NavigationGraphDef
Interface: NavigationGraphDef
Defined in: src/tree/types.ts:306
Properties
actions?
optionalactions?:Record<string,ActionDef&object>
Defined in: src/tree/types.ts:318
Root-level multi-attach actions: offered on several PAGES at once.
does?
optionaldoes?:string
Defined in: src/tree/types.ts:307
journeys?
optionaljourneys?:Record<string,JourneyDef>
Defined in: src/tree/types.ts:320
Named multi-step flows: the journeys this graph can be planned over.
pages?
optionalpages?:Record<string,PageNodeDef>
Defined in: src/tree/types.ts:316
Hand-authored pages. Optional since sources exist: a def whose whole
spine comes from fromRoutes(...) is the headline use case, and forcing
pages: {} on it was one line of pure boilerplate. Requiredness lives
where it means something — the build-time refusal judges the EFFECTIVE
graph (hand pages + sources folded), so a def with neither still dies
loudly with "has no pages".
sources?
optionalsources?: readonlyGraphSource[]
Defined in: src/tree/types.ts:336
Growable inputs the app ALREADY owns — fromRoutes(app.routes) seeds pages, fromJourneys(app.journeys) seeds journeys, fromLiveStore(app.actionStore) attaches live bindings per session. Static sources fold into this def BEFORE the compiler's walk, under ONE documented order:
"Pages first (routes then hand-authored, hand-authored wins), journeys overlay second and may only add, live actions attach last and only bind — nothing later in the order may remove anything earlier. Routes may also contribute link actions; hand-authored actions win."
Deterministic on purpose: nothing later in the order can remove anything earlier, so a traveler can trust the floor under their feet. A def without sources compiles exactly as before this field existed.