"use strict"; const fs = require("fs"); const path = require("path"); function writeCesiumPreviewSupportFiles(outDir) { const files = [ [path.join(__dirname, "cesium-preview.css"), "cesium-preview.css"], [path.join(__dirname, "cesium-preview.js"), "cesium-preview.js"], [path.join(__dirname, "..", "..", "assets", "preview", "vehicle-breakdown.png"), "vehicle-breakdown.png"], [path.join(__dirname, "..", "..", "assets", "preview", "vehicle-accident.png"), "vehicle-accident.png"], ]; for (const [source, file] of files) { if (!fs.existsSync(source)) { throw new Error(`Cesium preview support file '${file}' not found: ${source}`); } fs.copyFileSync(source, path.join(outDir, file)); } } function cesiumPreviewHtml(glbName, metadataName, routeName, vehicleModelName, areaId, vehicleModelNames = [], trafficSignalsName = null, previewDescriptorName = null) { const previewConfig = { areaId, glbName, metadataName, routeName, vehicleModelName, vehicleModelNames, trafficSignalsName, previewDescriptorName, }; return ` ${escapeHtml(areaId)} Cesium Preview
8 m/s
View
Loading diagnostics...
Loading ${escapeHtml(glbName)}...
Loading scene ${escapeHtml(areaId)}
`; } function escapeHtml(value) { return String(value) .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll('"', """); } function escapeScriptJson(value) { return String(value) .replaceAll("<", "\\u003c") .replaceAll(">", "\\u003e") .replaceAll("&", "\\u0026") .replaceAll("\u2028", "\\u2028") .replaceAll("\u2029", "\\u2029"); } function previewSummary(area) { const route = fs.existsSync(area.outputs.vehicleRoute) ? JSON.parse(fs.readFileSync(area.outputs.vehicleRoute, "utf8")) : null; return { glbName: "package/manifest.json", metadataName: "package/manifest.json", routeName: route ? path.relative(area.outputs.areaDir, area.outputs.vehicleRoute).split(path.sep).join("/") : null, vehicleModelName: path.relative(area.outputs.areaDir, area.outputs.vehicleModel).split(path.sep).join("/"), trafficSignalsName: "package/runtime/traffic-signals.json", routeSegments: Array.isArray(route?.segments) ? route.segments.length : null, }; } module.exports = { cesiumPreviewHtml, previewSummary, writeCesiumPreviewSupportFiles, };