"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) { const previewConfig = { areaId, glbName, metadataName, routeName, vehicleModelName, vehicleModelNames, trafficSignalsName, }; 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: path.basename(area.outputs.glb), metadataName: path.basename(area.outputs.metadata), routeName: path.basename(area.outputs.vehicleRoute), vehicleModelName: path.basename(area.outputs.vehicleModel), trafficSignalsName: path.relative(area.outputs.areaDir, area.outputs.trafficSignals).split(path.sep).join("/"), routeSegments: Array.isArray(route.segments) ? route.segments.length : null, }; } module.exports = { cesiumPreviewHtml, previewSummary, writeCesiumPreviewSupportFiles, };