// PROCITY citygen — canonical Lane A public entry point (barrel). // // Consumers import the whole CityGen API from here (not from plan.js directly), e.g. Lane B's shell: // const citygen = await import('./js/citygen/index.js'); citygen.generatePlan(seed) → CityPlan // Keep this the stable import surface for the lane; internals may move between files behind it. // // (Originated as a Lane F integration shim because the shell imports ./js/citygen/index.js while the // generator ships as plan.js; adopted here as the real Lane A entry point, per the shim's own note.) export { generatePlan, chunkIndex, chunkKey, CHUNK, lotCorners, obbOverlap, isOpen } from './plan.js'; export { shopName, townName, bandName } from './names.js'; export { generatePlanOSM, osmTownKeys, registerTownCache, validateTownCache, MIN_TOWN_SHOPS } from './plan_osm.js'; export { withGigs, gigKeyFor, POSTER_CLEAR } from './gigs.js'; // The street-corridor law + venue vocabulary, re-exported so consumers get the whole Lane A contract // from one import (ROUND13). `roadWidth`/`vergeBand`/`poleOffset` are the road-vs-verge split of // `edge.width` — see the note in registry.js; `gigKeyFor` is the one and only genre→audio-key mapping. export { SHOP_TYPES, VENUE_KINDS, genreForVenueKind, roadWidth, vergeBand, poleOffset } from '../core/registry.js'; // planSource selector (round 6; multi-town round 8). Default 'synthetic' → the byte-identical // golden-hash generator; 'osm' → the real-data fixture importer. Lane F wires ?plansrc=osm (+ optional // &town=) to these args so the shell bootstrap picks the producer/town without B–F caring which // ran. Unknown source → synthetic; unknown town → the default town. import { generatePlan as _synth } from './plan.js'; import { generatePlanOSM as _osm } from './plan_osm.js'; import { withGigs as _withGigs } from './gigs.js'; export function generatePlanFor(seed, source = 'synthetic', opts = {}) { const plan = source === 'osm' ? _osm(seed, opts.town, opts) : _synth(seed); // v3 gig layer, gated: ?gigs=1 → shell passes { gigs:true, customBands } and we augment; otherwise // the base plan is returned untouched (byte-identical, goldens frozen — CITY_SPEC prime flag law). return opts.gigs ? _withGigs(plan, seed, opts) : plan; } // Convenience default so `citygen.default` also resolves to the (synthetic) generator. export { generatePlan as default } from './plan.js';