-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
enhancementNew feature or requestNew feature or requestmilestone:M10M10 LENS — Composable View ProjectionsM10 LENS — Composable View Projectionswave:1Wave 1 — Foundation (lenses + context + contracts)Wave 1 — Foundation (lenses + context + contracts)
Description
LNS-003: Lens Composition Engine
Parent: #227 (M10 LENS)
What
Implement composeLenses() in src/lens.js and wire into renderView() in src/views.js via options.lenses parameter.
composeLenses(lensNames)→ returns a single function that chains lenses left-to-rightrenderView(graph, viewName, options)gainsoptions.lenses(array of lens names)needsPropertiespropagates: if ANY lens in chain needs it, the view runs with properties
Why
Composition is what makes lenses powerful — view:lens1:lens2 applies transformations in sequence.
Acceptance Criteria
-
composeLenses(['a', 'b'])appliesathenbto ViewResult - Unknown lens name → clear error with available lens list
-
needsPropertiespropagation works correctly - Wired into
renderView()— passinglenses: ['incomplete']works - Empty lenses array = no-op (identity)
- Tests for composition order, error cases, needsProperties propagation
Dependencies
- LNS-002 (lens registry must exist)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestmilestone:M10M10 LENS — Composable View ProjectionsM10 LENS — Composable View Projectionswave:1Wave 1 — Foundation (lenses + context + contracts)Wave 1 — Foundation (lenses + context + contracts)