"use strict"; const fs = require("fs"); const path = require("path"); function writeCesiumPreviewSupportFiles(outDir) { for (const file of ["cesium-preview.css", "cesium-preview.js"]) { const source = path.join(__dirname, file); 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 = JSON.parse(fs.readFileSync(area.outputs.vehicleRoute, "utf8")); return { glbName: "package/manifest.json", metadataName: "package/manifest.json", routeName: path.relative(area.outputs.areaDir, area.outputs.vehicleRoute).split(path.sep).join("/"), 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, };