"use strict"; const fs = require("fs"); const { parseOsm } = require("./osm"); const { buildTrafficSignalFeatures, buildTrafficSignalsFromFeatures, validateTrafficSignalFeatures, validateTrafficSignalSourceReferences, } = require("./traffic-signals"); const SCHEMA = "native-traffic-signals/v1"; function loadOrGenerate(file, osmText, stopLines, intersections) { if (fs.existsSync(file)) return validateDocument(JSON.parse(fs.readFileSync(file, "utf8")), osmText); return generate(osmText, stopLines, intersections); } function generate(osmText, stopLines, intersections) { const controls = parseOsm(osmText).trafficSignalControls; return { schema: SCHEMA, provenance: "generated:osm-controls", assemblies: buildTrafficSignalFeatures(stopLines, intersections, controls) }; } function validateDocument(value, osmText) { if (value?.schema !== SCHEMA) throw new Error(`Expected ${SCHEMA} signal document`); const assemblies = validateTrafficSignalFeatures(value.assemblies); if (osmText) validateTrafficSignalSourceReferences(assemblies, parseOsm(osmText).trafficSignalControls); return { schema: SCHEMA, provenance: value.provenance || "native", assemblies }; } function runtime(document) { return buildTrafficSignalsFromFeatures(document.assemblies); } module.exports = { SCHEMA, generate, loadOrGenerate, validateDocument, runtime };