d893e406d62811b6c65e2c38aa86ee94acb9ed5e
compileGeometry took 1575 ms on a 41-road area and grew superlinearly — 6x the time for 2x the roads — while feature count grew linearly. Profiling put 84% of it in three adjacent lines: `bounds` alone was 821 ms, `ringsOverlap` 258 ms, and the intermediate arrays cost another 163 ms of GC. The callers walk every lane in 0.25 m steps and test each step's rectangle against every control feature, which is millions of calls on a small area. Each one recomputed the control's bounding box from scratch through four `Math.min(...ring.map(...))` spreads, allocating four arrays per call for a box that never changes. Control rings are the same array objects for the whole compile, so their bounds are now computed once into a WeakMap, candidate bounds are taken in a single allocation-free pass, and the cheap rejection moved up into `ringsOverlapControl` so the exact test only runs for boxes that actually touch. 1575 ms -> 104 ms, and the per-road cost is flat instead of rising, so this now extends to city-scale areas rather than degrading quadratically. Output is unchanged, which the fixture baselines prove. Found because a preview felt slow to drag. The measurement mattered more than the reading did: the nested `model.roads.find()` calls that looked like the culprit were not, and building the scoped-compile architecture first would have left this untouched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Road Compiler
Compiles a native-road-package/v1 RoadCompilerInput JSON file into native-road GeoJSON, diagnostics, traffic-signal runtime assets, and a deterministic completion marker.
npx road-compiler --input /absolute/path/road-compiler.input.json
The compiler does not read host area configuration. The caller owns configuration normalization and creates the input JSON. Successful compilation writes exactly one NATIVE_ROAD_COMPILE_DONE JSON marker to stdout.
Run npm test after npm ci to validate the package and its two self-contained area fixtures without the host repository. The migrated baselines remain upgrade corpus; the host repository owns the strict path-normalized parity gate.
Description
Languages
JavaScript
98.9%
HTML
1.1%