feat: complete native traffic signal workflow
This commit is contained in:
33
scripts/lib/native-traffic-signals.js
Normal file
33
scripts/lib/native-traffic-signals.js
Normal file
@@ -0,0 +1,33 @@
|
||||
"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 };
|
||||
Reference in New Issue
Block a user