@huukhanhnguyen/model / core/laneNodes
core/laneNodes
collectionOf()
collectionOf(
model,lane):CollectionNode
The CollectionNode for one lane (membership + per-entry headers as real dependency edges). Lazily created, one per lane.
Parameters
model
lane
string
Returns
evaluateLaneExpression()
evaluateLaneExpression(
model,source,parameters?):unknown
Evaluate ONE authored lane expression (a sheet title) in the model's live parameter scope — the same getter-backed context every other record lane uses, so reading a param registers a real edge.
parameters layers the lane's OWN signature ON TOP (own name wins). A title is lane HEADER data — model-level metadata a drawing index reads (see CollectionNode's key/header split) — so unlike the lane's BODY it stays host-visible: "'PLAN LEVEL ' + level" naming a model parameter is a pinned, deliberate behavior. The lane's own parameters are simply also in scope now.
Parameters
model
source
string
parameters?
Returns
unknown
syncCollections()
syncCollections(
model):void
Verify every live collection's cache before a public pull trusts a memo.
The UI mutates lane JSON in place, and a cached ChainNode never re-reads its inputs, so without this step nothing would ever notice. Nothing is subscribed — this is a check the READ path runs, and it is cheap: only collections some consumer actually created are in the map, and each one compares a key list and a couple of header fields, never a body.
Parameters
model
Returns
void