fix(assets): publish controllable traffic signal runtime

This commit is contained in:
2026-08-12 10:17:34 +08:00
parent 41a0e81a6f
commit f13d890ffb
16 changed files with 88 additions and 31 deletions

View File

@@ -49,6 +49,17 @@ function validateManifest(manifest, packageDir, options = {}) {
if (!resolved.startsWith(`${path.resolve(packageDir)}${path.sep}`) || !fs.existsSync(resolved)) fail(`asset '${asset.id}' is missing from package: ${asset.uri}`);
}
}
if (manifest.runtime !== undefined && !Array.isArray(manifest.runtime)) fail("runtime must be an array");
for (const runtime of manifest?.runtime || []) {
if (!runtime || typeof runtime.id !== "string" || !runtime.id) { fail("runtime asset id is required"); continue; }
if (ids.has(runtime.id)) fail(`duplicate asset id '${runtime.id}'`); ids.add(runtime.id);
if (typeof runtime.type !== "string" || !runtime.type) fail(`runtime '${runtime.id}' type is required`);
try { relativeUri(runtime.uri); } catch (error) { fail(error.message); continue; }
if (packageDir && options.requireFiles !== false) {
const resolved = path.resolve(packageDir, runtime.uri);
if (!resolved.startsWith(`${path.resolve(packageDir)}${path.sep}`) || !fs.existsSync(resolved)) fail(`runtime '${runtime.id}' is missing from package: ${runtime.uri}`);
}
}
if (sceneCount !== 1) fail("exactly one scene asset is required");
if (errors.length) throw new Error(`Invalid asset package manifest: ${errors.join("; ")}`);
return manifest;
@@ -60,6 +71,11 @@ function addIntegrity(manifest, packageDir) {
const buffer = fs.readFileSync(file);
asset.integrity = { bytes: buffer.length, sha256: crypto.createHash("sha256").update(buffer).digest("hex") };
}
for (const runtime of manifest.runtime || []) {
const file = path.resolve(packageDir, runtime.uri);
const buffer = fs.readFileSync(file);
runtime.integrity = { bytes: buffer.length, sha256: crypto.createHash("sha256").update(buffer).digest("hex") };
}
return manifest;
}