34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
"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 };
|