feat(assets): publish reusable area packages
This commit is contained in:
@@ -10,6 +10,7 @@ const {
|
||||
layerFile,
|
||||
} = require("./scene-layers");
|
||||
const { digest: glbDigest } = require("../glb-digest");
|
||||
const { validateManifest } = require("./package-contract");
|
||||
const {
|
||||
BUDGETS,
|
||||
evaluateGlbBudget,
|
||||
@@ -31,8 +32,8 @@ function analyzeArea(configPath, options = {}) {
|
||||
const artifacts = artifactStatus(area);
|
||||
const manifests = stageManifestStatus(area, resolvedConfig);
|
||||
const metadataWarnings = [];
|
||||
const metadata = metadataSummary(area.outputs.metadata, metadataWarnings);
|
||||
const glb = fs.existsSync(area.outputs.glb) ? glbDigest(area.outputs.glb) : null;
|
||||
const metadata = metadataSummary(area.outputs.packageManifest, metadataWarnings);
|
||||
const glb = fs.existsSync(area.outputs.packagePrimaryGlb) ? glbDigest(area.outputs.packagePrimaryGlb) : null;
|
||||
const warnings = [
|
||||
...metadataWarnings,
|
||||
...collectWarnings(area, osm, artifacts, manifests, glb, metadata),
|
||||
@@ -331,8 +332,8 @@ function artifactStatus(area) {
|
||||
["Traffic signal runtime", area.outputs.trafficSignals, true, "file"],
|
||||
["Blend scene", area.outputs.blend, true, "file"],
|
||||
["Render PNG", area.outputs.render, true, "file"],
|
||||
["Cesium GLB", area.outputs.glb, true, "file"],
|
||||
["Cesium metadata", area.outputs.metadata, true, "file"],
|
||||
["Package manifest", area.outputs.packageManifest, true, "file"],
|
||||
["Package primary GLB", area.outputs.packagePrimaryGlb, true, "file"],
|
||||
["Cesium preview", area.outputs.cesiumPreview, true, "file"],
|
||||
];
|
||||
return entries.map(([label, file, expected, type]) => {
|
||||
@@ -359,6 +360,7 @@ function metadataSummary(file, warnings) {
|
||||
if (!fs.existsSync(file)) return null;
|
||||
try {
|
||||
const metadata = JSON.parse(fs.readFileSync(file, "utf8"));
|
||||
if (metadata.schema === "osm-asset-package/v1") validateManifest(metadata, path.dirname(file));
|
||||
return {
|
||||
asset: metadata.asset || null,
|
||||
assets: Array.isArray(metadata.assets) ? metadata.assets.length : 0,
|
||||
@@ -748,7 +750,7 @@ function classifyAreaQuality(result) {
|
||||
warnings.push(`OSM ways reference ${osm.ways.missingNodeRefs} missing node(s).`);
|
||||
}
|
||||
|
||||
const fatalArtifacts = new Set(["Cesium GLB", "Cesium metadata", "Cesium preview"]);
|
||||
const fatalArtifacts = new Set(["Package manifest", "Package primary GLB", "Cesium preview"]);
|
||||
for (const artifact of artifacts) {
|
||||
if (fatalArtifacts.has(artifact.label)) {
|
||||
if (!artifact.exists) {
|
||||
|
||||
Reference in New Issue
Block a user