@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +90 -0
- package/README.md +43 -2
- package/dist/a11y/announcer.d.ts +65 -0
- package/dist/a11y/announcer.js +140 -0
- package/dist/a11y/announcer.js.map +1 -0
- package/dist/a11y/contrast.d.ts +54 -0
- package/dist/a11y/contrast.js +93 -0
- package/dist/a11y/contrast.js.map +1 -0
- package/dist/a11y/focus.d.ts +123 -0
- package/dist/a11y/focus.js +282 -0
- package/dist/a11y/focus.js.map +1 -0
- package/dist/a11y/index.d.ts +21 -0
- package/dist/a11y/index.js +18 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/a11y/keyboard.d.ts +144 -0
- package/dist/a11y/keyboard.js +317 -0
- package/dist/a11y/keyboard.js.map +1 -0
- package/dist/adapters/default-image.d.ts +25 -0
- package/dist/adapters/default-image.js +37 -0
- package/dist/adapters/default-image.js.map +1 -0
- package/dist/adapters/index.d.ts +27 -0
- package/dist/adapters/index.js +28 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/next-image.d.ts +38 -0
- package/dist/adapters/next-image.js +124 -0
- package/dist/adapters/next-image.js.map +1 -0
- package/dist/adapters/types.d.ts +61 -0
- package/dist/adapters/types.js +11 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/analytics/index.d.ts +14 -0
- package/dist/analytics/index.js +15 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +65 -0
- package/dist/analytics/tracker.js +251 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/analytics/types.d.ts +130 -0
- package/dist/analytics/types.js +11 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/provider.d.ts +132 -0
- package/dist/auth/provider.js +473 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/types.d.ts +117 -0
- package/dist/auth/types.js +9 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/binding/collection.d.ts +190 -0
- package/dist/binding/collection.js +358 -0
- package/dist/binding/collection.js.map +1 -0
- package/dist/binding/datasource.d.ts +319 -0
- package/dist/binding/datasource.js +556 -0
- package/dist/binding/datasource.js.map +1 -0
- package/dist/binding/engine.d.ts +65 -0
- package/dist/binding/engine.js +268 -0
- package/dist/binding/engine.js.map +1 -0
- package/dist/binding/expression.d.ts +150 -0
- package/dist/binding/expression.js +787 -0
- package/dist/binding/expression.js.map +1 -0
- package/dist/binding/index.d.ts +19 -0
- package/dist/binding/index.js +14 -0
- package/dist/binding/index.js.map +1 -0
- package/dist/binding/two-way.d.ts +149 -0
- package/dist/binding/two-way.js +462 -0
- package/dist/binding/two-way.js.map +1 -0
- package/dist/binding/types.d.ts +119 -0
- package/dist/binding/types.js +9 -0
- package/dist/binding/types.js.map +1 -0
- package/dist/blocks/component-types.d.ts +81 -0
- package/dist/blocks/component-types.js +11 -0
- package/dist/blocks/component-types.js.map +1 -0
- package/dist/blocks/composition-rules.d.ts +168 -0
- package/dist/blocks/composition-rules.js +391 -0
- package/dist/blocks/composition-rules.js.map +1 -0
- package/dist/blocks/hooks.d.ts +31 -0
- package/dist/blocks/hooks.js +42 -0
- package/dist/blocks/hooks.js.map +1 -0
- package/dist/blocks/index.d.ts +14 -0
- package/dist/blocks/index.js +23 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/registry.d.ts +84 -0
- package/dist/blocks/registry.js +136 -0
- package/dist/blocks/registry.js.map +1 -0
- package/dist/blocks/rule-engine.d.ts +131 -0
- package/dist/blocks/rule-engine.js +321 -0
- package/dist/blocks/rule-engine.js.map +1 -0
- package/dist/blocks/surface-event-context.d.ts +13 -0
- package/dist/blocks/surface-event-context.js +14 -0
- package/dist/blocks/surface-event-context.js.map +1 -0
- package/dist/blocks/surface-id-context.d.ts +13 -0
- package/dist/blocks/surface-id-context.js +15 -0
- package/dist/blocks/surface-id-context.js.map +1 -0
- package/dist/bus.d.ts +41 -0
- package/dist/bus.js +158 -0
- package/dist/bus.js.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.js +10 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory.d.ts +32 -0
- package/dist/cache/memory.js +138 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/types.d.ts +62 -0
- package/dist/cache/types.js +9 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/capability/index.d.ts +72 -0
- package/dist/capability/index.js +87 -0
- package/dist/capability/index.js.map +1 -0
- package/dist/capability/kernel-capabilities.d.ts +31 -0
- package/dist/capability/kernel-capabilities.js +36 -0
- package/dist/capability/kernel-capabilities.js.map +1 -0
- package/dist/capability/platform-capabilities.d.ts +71 -0
- package/dist/capability/platform-capabilities.js +267 -0
- package/dist/capability/platform-capabilities.js.map +1 -0
- package/dist/capability/type-mapping.d.ts +70 -0
- package/dist/capability/type-mapping.js +107 -0
- package/dist/capability/type-mapping.js.map +1 -0
- package/dist/capability/validation.d.ts +46 -0
- package/dist/capability/validation.js +54 -0
- package/dist/capability/validation.js.map +1 -0
- package/dist/connectors/declared-connector.d.ts +48 -0
- package/dist/connectors/declared-connector.js +333 -0
- package/dist/connectors/declared-connector.js.map +1 -0
- package/dist/connectors/engine-registry.d.ts +50 -0
- package/dist/connectors/engine-registry.js +135 -0
- package/dist/connectors/engine-registry.js.map +1 -0
- package/dist/connectors/index.d.ts +14 -0
- package/dist/connectors/index.js +14 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/module-loader.d.ts +70 -0
- package/dist/connectors/module-loader.js +143 -0
- package/dist/connectors/module-loader.js.map +1 -0
- package/dist/connectors/types.d.ts +174 -0
- package/dist/connectors/types.js +23 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/context.d.ts +27 -0
- package/dist/context.js +38 -0
- package/dist/context.js.map +1 -0
- package/dist/data/DataCapabilityProvider.d.ts +39 -0
- package/dist/data/DataCapabilityProvider.js +58 -0
- package/dist/data/DataCapabilityProvider.js.map +1 -0
- package/dist/data/index.d.ts +17 -0
- package/dist/data/index.js +18 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/manager.d.ts +40 -0
- package/dist/data/manager.js +442 -0
- package/dist/data/manager.js.map +1 -0
- package/dist/data/types.d.ts +218 -0
- package/dist/data/types.js +2 -0
- package/dist/data/types.js.map +1 -0
- package/dist/entity/aggregate.d.ts +8 -0
- package/dist/entity/aggregate.js +24 -0
- package/dist/entity/aggregate.js.map +1 -0
- package/dist/entity/apply-query.d.ts +58 -0
- package/dist/entity/apply-query.js +264 -0
- package/dist/entity/apply-query.js.map +1 -0
- package/dist/entity/behavior.d.ts +94 -0
- package/dist/entity/behavior.js +78 -0
- package/dist/entity/behavior.js.map +1 -0
- package/dist/entity/connector.d.ts +141 -0
- package/dist/entity/connector.js +89 -0
- package/dist/entity/connector.js.map +1 -0
- package/dist/entity/connectors/index.d.ts +12 -0
- package/dist/entity/connectors/index.js +11 -0
- package/dist/entity/connectors/index.js.map +1 -0
- package/dist/entity/connectors/static.d.ts +51 -0
- package/dist/entity/connectors/static.js +245 -0
- package/dist/entity/connectors/static.js.map +1 -0
- package/dist/entity/entity-datasource.d.ts +50 -0
- package/dist/entity/entity-datasource.js +33 -0
- package/dist/entity/entity-datasource.js.map +1 -0
- package/dist/entity/facade.d.ts +70 -0
- package/dist/entity/facade.js +70 -0
- package/dist/entity/facade.js.map +1 -0
- package/dist/entity/http-connector.d.ts +123 -0
- package/dist/entity/http-connector.js +295 -0
- package/dist/entity/http-connector.js.map +1 -0
- package/dist/entity/index.d.ts +38 -0
- package/dist/entity/index.js +31 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/postgres-connector.d.ts +64 -0
- package/dist/entity/postgres-connector.js +239 -0
- package/dist/entity/postgres-connector.js.map +1 -0
- package/dist/entity/registry.d.ts +59 -0
- package/dist/entity/registry.js +90 -0
- package/dist/entity/registry.js.map +1 -0
- package/dist/entity/store.d.ts +66 -0
- package/dist/entity/store.js +349 -0
- package/dist/entity/store.js.map +1 -0
- package/dist/entity/types.d.ts +180 -0
- package/dist/entity/types.js +10 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/execution-context.d.ts +88 -0
- package/dist/execution-context.js +146 -0
- package/dist/execution-context.js.map +1 -0
- package/dist/executor.d.ts +27 -0
- package/dist/executor.js +33 -0
- package/dist/executor.js.map +1 -0
- package/dist/forms/form-entity-bridge.d.ts +94 -0
- package/dist/forms/form-entity-bridge.js +96 -0
- package/dist/forms/form-entity-bridge.js.map +1 -0
- package/dist/forms/form-write-target.d.ts +34 -0
- package/dist/forms/form-write-target.js +81 -0
- package/dist/forms/form-write-target.js.map +1 -0
- package/dist/forms/index.d.ts +22 -0
- package/dist/forms/index.js +25 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/named-control-values.d.ts +27 -0
- package/dist/forms/named-control-values.js +42 -0
- package/dist/forms/named-control-values.js.map +1 -0
- package/dist/forms/processor.d.ts +55 -0
- package/dist/forms/processor.js +154 -0
- package/dist/forms/processor.js.map +1 -0
- package/dist/forms/types.d.ts +174 -0
- package/dist/forms/types.js +33 -0
- package/dist/forms/types.js.map +1 -0
- package/dist/forms/validator.d.ts +61 -0
- package/dist/forms/validator.js +218 -0
- package/dist/forms/validator.js.map +1 -0
- package/dist/graph/index.d.ts +10 -0
- package/dist/graph/index.js +9 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/resolver.d.ts +66 -0
- package/dist/graph/resolver.js +243 -0
- package/dist/graph/resolver.js.map +1 -0
- package/dist/graph/types.d.ts +125 -0
- package/dist/graph/types.js +9 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/hooks/useInstalledAtoms.d.ts +96 -0
- package/dist/hooks/useInstalledAtoms.js +92 -0
- package/dist/hooks/useInstalledAtoms.js.map +1 -0
- package/dist/i18n/index.d.ts +15 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translator.d.ts +76 -0
- package/dist/i18n/translator.js +357 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/i18n/types.d.ts +93 -0
- package/dist/i18n/types.js +9 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +47 -0
- package/dist/kernel.js +258 -0
- package/dist/kernel.js.map +1 -0
- package/dist/perf/budget.d.ts +92 -0
- package/dist/perf/budget.js +122 -0
- package/dist/perf/budget.js.map +1 -0
- package/dist/perf/index.d.ts +16 -0
- package/dist/perf/index.js +13 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/render-timer.d.ts +90 -0
- package/dist/perf/render-timer.js +136 -0
- package/dist/perf/render-timer.js.map +1 -0
- package/dist/perf/reporter.d.ts +126 -0
- package/dist/perf/reporter.js +241 -0
- package/dist/perf/reporter.js.map +1 -0
- package/dist/perf/web-vitals.d.ts +111 -0
- package/dist/perf/web-vitals.js +268 -0
- package/dist/perf/web-vitals.js.map +1 -0
- package/dist/registry.d.ts +63 -0
- package/dist/registry.js +126 -0
- package/dist/registry.js.map +1 -0
- package/dist/render/BehaviorSurfaceProvider.d.ts +65 -0
- package/dist/render/BehaviorSurfaceProvider.js +185 -0
- package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
- package/dist/render/BlockErrorBoundary.d.ts +26 -0
- package/dist/render/BlockErrorBoundary.js +41 -0
- package/dist/render/BlockErrorBoundary.js.map +1 -0
- package/dist/render/DataBoundSurfaceRenderer.d.ts +78 -0
- package/dist/render/DataBoundSurfaceRenderer.js +998 -0
- package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
- package/dist/render/DynamicBlockWrapper.d.ts +23 -0
- package/dist/render/DynamicBlockWrapper.js +117 -0
- package/dist/render/DynamicBlockWrapper.js.map +1 -0
- package/dist/render/appearance-resolver.d.ts +50 -0
- package/dist/render/appearance-resolver.js +78 -0
- package/dist/render/appearance-resolver.js.map +1 -0
- package/dist/render/capability-gate.d.ts +69 -0
- package/dist/render/capability-gate.js +94 -0
- package/dist/render/capability-gate.js.map +1 -0
- package/dist/render/conditional-states-css.d.ts +41 -0
- package/dist/render/conditional-states-css.js +82 -0
- package/dist/render/conditional-states-css.js.map +1 -0
- package/dist/render/connections-context.d.ts +31 -0
- package/dist/render/connections-context.js +34 -0
- package/dist/render/connections-context.js.map +1 -0
- package/dist/render/dark-theme-css.d.ts +36 -0
- package/dist/render/dark-theme-css.js +67 -0
- package/dist/render/dark-theme-css.js.map +1 -0
- package/dist/render/data-binding-types.d.ts +191 -0
- package/dist/render/data-binding-types.js +11 -0
- package/dist/render/data-binding-types.js.map +1 -0
- package/dist/render/data-cache.d.ts +30 -0
- package/dist/render/data-cache.js +37 -0
- package/dist/render/data-cache.js.map +1 -0
- package/dist/render/derive-dark-theme.d.ts +17 -0
- package/dist/render/derive-dark-theme.js +18 -0
- package/dist/render/derive-dark-theme.js.map +1 -0
- package/dist/render/dynamic-artifact-context.d.ts +77 -0
- package/dist/render/dynamic-artifact-context.js +89 -0
- package/dist/render/dynamic-artifact-context.js.map +1 -0
- package/dist/render/dynamic-block-loader.d.ts +80 -0
- package/dist/render/dynamic-block-loader.js +197 -0
- package/dist/render/dynamic-block-loader.js.map +1 -0
- package/dist/render/endpoint.d.ts +18 -0
- package/dist/render/endpoint.js +109 -0
- package/dist/render/endpoint.js.map +1 -0
- package/dist/render/entity-facade-context.d.ts +34 -0
- package/dist/render/entity-facade-context.js +37 -0
- package/dist/render/entity-facade-context.js.map +1 -0
- package/dist/render/group-states-css.d.ts +41 -0
- package/dist/render/group-states-css.js +73 -0
- package/dist/render/group-states-css.js.map +1 -0
- package/dist/render/hooks/useSurfaceEvents.d.ts +8 -0
- package/dist/render/hooks/useSurfaceEvents.js +9 -0
- package/dist/render/hooks/useSurfaceEvents.js.map +1 -0
- package/dist/render/hooks/useSurfaceId.d.ts +8 -0
- package/dist/render/hooks/useSurfaceId.js +9 -0
- package/dist/render/hooks/useSurfaceId.js.map +1 -0
- package/dist/render/index.d.ts +48 -0
- package/dist/render/index.js +61 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/interaction-rule-engine.d.ts +12 -0
- package/dist/render/interaction-rule-engine.js +47 -0
- package/dist/render/interaction-rule-engine.js.map +1 -0
- package/dist/render/keyframes-css.d.ts +31 -0
- package/dist/render/keyframes-css.js +44 -0
- package/dist/render/keyframes-css.js.map +1 -0
- package/dist/render/query-state.d.ts +3 -0
- package/dist/render/query-state.js +70 -0
- package/dist/render/query-state.js.map +1 -0
- package/dist/render/renderer.d.ts +44 -0
- package/dist/render/renderer.js +937 -0
- package/dist/render/renderer.js.map +1 -0
- package/dist/render/resolve-expressions.d.ts +37 -0
- package/dist/render/resolve-expressions.js +309 -0
- package/dist/render/resolve-expressions.js.map +1 -0
- package/dist/render/responsive-style-css.d.ts +42 -0
- package/dist/render/responsive-style-css.js +123 -0
- package/dist/render/responsive-style-css.js.map +1 -0
- package/dist/render/responsive.d.ts +49 -0
- package/dist/render/responsive.js +99 -0
- package/dist/render/responsive.js.map +1 -0
- package/dist/render/scoped-css.d.ts +71 -0
- package/dist/render/scoped-css.js +102 -0
- package/dist/render/scoped-css.js.map +1 -0
- package/dist/render/shell-selection.d.ts +69 -0
- package/dist/render/shell-selection.js +117 -0
- package/dist/render/shell-selection.js.map +1 -0
- package/dist/render/states-css.d.ts +32 -0
- package/dist/render/states-css.js +63 -0
- package/dist/render/states-css.js.map +1 -0
- package/dist/render/surface-data-context.d.ts +18 -0
- package/dist/render/surface-data-context.js +21 -0
- package/dist/render/surface-data-context.js.map +1 -0
- package/dist/render/surface-event-bus.d.ts +19 -0
- package/dist/render/surface-event-bus.js +68 -0
- package/dist/render/surface-event-bus.js.map +1 -0
- package/dist/render/surface-event-context.d.ts +11 -0
- package/dist/render/surface-event-context.js +12 -0
- package/dist/render/surface-event-context.js.map +1 -0
- package/dist/render/surface-id-context.d.ts +8 -0
- package/dist/render/surface-id-context.js +9 -0
- package/dist/render/surface-id-context.js.map +1 -0
- package/dist/render/theme-utils.d.ts +14 -0
- package/dist/render/theme-utils.js +15 -0
- package/dist/render/theme-utils.js.map +1 -0
- package/dist/render/types.d.ts +282 -0
- package/dist/render/types.js +9 -0
- package/dist/render/types.js.map +1 -0
- package/dist/render/visibility-css.d.ts +42 -0
- package/dist/render/visibility-css.js +119 -0
- package/dist/render/visibility-css.js.map +1 -0
- package/dist/render/width-scope.d.ts +34 -0
- package/dist/render/width-scope.js +44 -0
- package/dist/render/width-scope.js.map +1 -0
- package/dist/render/write-only-sources.d.ts +33 -0
- package/dist/render/write-only-sources.js +99 -0
- package/dist/render/write-only-sources.js.map +1 -0
- package/dist/routing/index.d.ts +14 -0
- package/dist/routing/index.js +15 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/router.d.ts +42 -0
- package/dist/routing/router.js +218 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/types.d.ts +124 -0
- package/dist/routing/types.js +9 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/seo/generator.d.ts +39 -0
- package/dist/seo/generator.js +236 -0
- package/dist/seo/generator.js.map +1 -0
- package/dist/seo/index.d.ts +14 -0
- package/dist/seo/index.js +15 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/types.d.ts +181 -0
- package/dist/seo/types.js +9 -0
- package/dist/seo/types.js.map +1 -0
- package/dist/state/index.d.ts +15 -0
- package/dist/state/index.js +16 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/manager.d.ts +33 -0
- package/dist/state/manager.js +81 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/store.d.ts +40 -0
- package/dist/state/store.js +145 -0
- package/dist/state/store.js.map +1 -0
- package/dist/state/types.d.ts +107 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/surface/expression.d.ts +65 -0
- package/dist/surface/expression.js +179 -0
- package/dist/surface/expression.js.map +1 -0
- package/dist/surface/index.d.ts +32 -0
- package/dist/surface/index.js +25 -0
- package/dist/surface/index.js.map +1 -0
- package/dist/surface/interpreter.d.ts +96 -0
- package/dist/surface/interpreter.js +231 -0
- package/dist/surface/interpreter.js.map +1 -0
- package/dist/surface/layout.d.ts +54 -0
- package/dist/surface/layout.js +288 -0
- package/dist/surface/layout.js.map +1 -0
- package/dist/surface/output.d.ts +90 -0
- package/dist/surface/output.js +104 -0
- package/dist/surface/output.js.map +1 -0
- package/dist/surface/primitives.d.ts +180 -0
- package/dist/surface/primitives.js +339 -0
- package/dist/surface/primitives.js.map +1 -0
- package/dist/surface/renderer.d.ts +96 -0
- package/dist/surface/renderer.js +190 -0
- package/dist/surface/renderer.js.map +1 -0
- package/dist/surface/schemas.d.ts +181 -0
- package/dist/surface/schemas.js +142 -0
- package/dist/surface/schemas.js.map +1 -0
- package/dist/surface/transforms.d.ts +144 -0
- package/dist/surface/transforms.js +120 -0
- package/dist/surface/transforms.js.map +1 -0
- package/dist/surface/types.d.ts +160 -0
- package/dist/surface/types.js +51 -0
- package/dist/surface/types.js.map +1 -0
- package/dist/surface/validation.d.ts +123 -0
- package/dist/surface/validation.js +147 -0
- package/dist/surface/validation.js.map +1 -0
- package/dist/validator.d.ts +55 -0
- package/dist/validator.js +100 -0
- package/dist/validator.js.map +1 -0
- package/package.json +106 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/binding/expression.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Expression Evaluator for Data Binding\n *\n * Enhanced expression evaluation for data binding in surfaces\n *\n * This module extends the base expression evaluator with:\n * - Arithmetic operations (+, -, *, /, %)\n * - Data/state/params context separation\n * - Dependency extraction for reactive updates\n * - Safe null-coalescing operators\n *\n * @module @pwfabric/runtime/binding/expression\n */\n\n// ============================================================\n// EXPRESSION CONTEXT\n// ============================================================\n\n/**\n * Context for expression evaluation in data binding\n */\nexport interface BindingExpressionContext {\n /** Data from data sources */\n readonly data: Record<string, unknown>\n /** State from state stores */\n readonly state: Record<string, unknown>\n /** URL/route parameters */\n readonly params: Record<string, unknown>\n /** Custom helper functions */\n readonly helpers?: Record<string, (...args: unknown[]) => unknown>\n}\n\n/**\n * Result of expression evaluation\n */\nexport type ExpressionEvalResult<T = unknown> =\n | { readonly success: true; readonly value: T }\n | { readonly success: false; readonly error: string }\n\n// ============================================================\n// EXPRESSION EVALUATOR INTERFACE\n// ============================================================\n\n/**\n * Expression evaluator interface for data binding\n */\nexport interface ExpressionEvaluator {\n /**\n * Evaluate an expression in the given context\n */\n evaluate(expression: string, context: BindingExpressionContext): unknown\n\n /**\n * Check if a value is an expression (contains {{...}})\n */\n isExpression(value: unknown): boolean\n\n /**\n * Extract dependencies from an expression for reactive updates\n */\n extractDependencies(expression: string): ExpressionDependency[]\n\n /**\n * Interpolate expressions in a template string\n */\n interpolate(template: string, context: BindingExpressionContext): string\n}\n\n/**\n * Dependency extracted from an expression\n */\nexport interface ExpressionDependency {\n /** The source of the dependency */\n readonly source: 'data' | 'state' | 'params'\n /** The path within the source */\n readonly path: string\n}\n\n// ============================================================\n// PATH RESOLUTION\n// ============================================================\n\n/**\n * Read one named property off a value, stepping into a list of one record.\n *\n * A LIST SOURCE ALWAYS BINDS AS A LIST (DataBoundSurfaceRenderer): a `rest`,\n * `entity` or `graphql` source answering with ONE object is bound as `[obj]`,\n * so `{{src[0].field}}` and `{{src.length}}` behave the same whatever the\n * endpoint returned. But a detail page is authored as `{{product.title}}`, and\n * a property read on an array finds nothing — such a page would render blank\n * (`{{rows.name}}` → empty while `{{rows[0].name}}` → \"banana\").\n *\n * So: when the value is an array of EXACTLY ONE element and the array itself\n * does not carry the key (not `length`, not an index, not an array method),\n * the read continues into that one element. A list of two or more is a list —\n * its `.title` stays undefined, as it always was. Both evaluators (this one\n * and surface/expression) read properties through here, so a path means the\n * same thing in a binding and in a block prop.\n */\nexport function readProperty(target: unknown, key: string): unknown {\n if (target === null || target === undefined || typeof target !== 'object') return undefined\n if (Array.isArray(target) && target.length === 1 && !(key in target)) {\n const only: unknown = target[0]\n return only !== null && typeof only === 'object'\n ? (only as Record<string, unknown>)[key]\n : undefined\n }\n return (target as Record<string, unknown>)[key]\n}\n\n/**\n * Resolve a dotted path in an object, handling nested properties and array indices\n *\n * @example\n * resolvePath({ user: { name: 'John' } }, 'user.name') // 'John'\n * resolvePath({ items: ['a', 'b'] }, 'items[0]') // 'a'\n * resolvePath({ users: [{ name: 'John' }] }, 'users[0].name') // 'John'\n */\nexport function resolvePath(obj: unknown, path: string): unknown {\n if (!path || typeof obj !== 'object' || obj === null) {\n return undefined\n }\n\n const parts = parsePath(path)\n let current: unknown = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined\n }\n\n if (part.type === 'property') {\n if (typeof current === 'object') {\n current = readProperty(current, part.key)\n } else {\n return undefined\n }\n } else if (part.type === 'index') {\n if (Array.isArray(current)) {\n current = current[part.index]\n } else {\n return undefined\n }\n }\n }\n\n return current\n}\n\n/**\n * Parsed path segment\n */\ntype PathSegment = { type: 'property'; key: string } | { type: 'index'; index: number }\n\n/**\n * Parse a path string into segments\n */\nfunction parsePath(path: string): PathSegment[] {\n const segments: PathSegment[] = []\n // Match property names and array indices: foo, [0], foo[0], foo.bar[1].baz\n //\n // A HYPHEN is a name CHARACTER. With `\\w+` it would be a boundary, and since\n // source ids are hyphenated, `hero-stats.0.text` would split into FOUR\n // segments (`hero`,`stats`,`0`,`text`) instead of three and never resolve.\n // The sibling resolver (surface/expression.ts) accepts hyphenated ids too:\n // its path regex is `/^[\\w\\-.[\\]]+$/`.\n const regex = /([\\w-]+)|\\[(\\d+)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(path)) !== null) {\n if (match[1] !== undefined) {\n // Property name\n segments.push({ type: 'property', key: match[1] })\n } else if (match[2] !== undefined) {\n // Array index\n segments.push({ type: 'index', index: parseInt(match[2], 10) })\n }\n }\n\n return segments\n}\n\n// ============================================================\n// EXPRESSION PARSER — ONE GRAMMAR FOR BOTH EVALUATORS\n// ============================================================\n//\n// This token parser (bindings, computed values) also serves\n// surface/expression.ts (every block prop and every `visibleWhen`). A separate\n// regex/`split` evaluator there would drift in the ways that matter most to\n// generated apps:\n//\n// - the surface one had no parentheses, no arithmetic, no method calls — an\n// expression it could not read came back as the raw `{{…}}` string, which\n// a `visibleWhen` then counted as TRUE, so the block always showed;\n// - it split helper arguments on every comma, so `join(xs, ', ')` joined\n// with `\"\"`.\n//\n// Now there is one tokenizer, one parser producing an AST, and one evaluator.\n// What differs between the two callers is only how a NAME resolves (see\n// `NameResolver`) and two lexical options kept for backward compatibility.\n//\n// STRICT BY DESIGN. An unknown character, an unterminated string, a trailing\n// token or a call to something that is not a helper is an ERROR, not a partial\n// value. The previous parser skipped unknown characters and ignored whatever\n// followed the first complete expression (`5-3` evaluated to 5) — a silent\n// wrong answer is the failure class this exists to end. Callers decide what an\n// error means: a block prop keeps its raw template, a `visibleWhen` hides.\n//\n// `&&`, `||`, `??` and `?:` SHORT-CIRCUIT, because evaluation walks the AST:\n// `isEmpty(x) || x.length > 3` never evaluates the right side when the left\n// already decided.\n\ntype TokenType =\n | 'number'\n | 'string'\n | 'literal'\n | 'identifier'\n | 'operator'\n | 'paren'\n | 'bracket'\n | 'dot'\n | 'comma'\n | 'question'\n | 'colon'\n\ninterface Token {\n type: TokenType\n value: unknown\n raw: string\n}\n\n/** Lexical options — the only grammar differences between the two callers. */\nexport interface ExpressionSyntaxOptions {\n /**\n * `hero-stats-data.0.text` is ONE name. Surface data-source ids are\n * hyphenated, and the surface evaluator always read them as paths, so in\n * that mode a `-` between two name characters with no space around it is\n * part of the name. Subtraction needs spaces there: `a - b`.\n */\n readonly hyphenNames?: boolean\n /** The binding evaluator has always read the literal `undefined` as `null`. */\n readonly undefinedAsNull?: boolean\n}\n\nconst MULTI_OPS = ['===', '!==', '>=', '<=', '==', '!=', '&&', '||', '??'] as const\nconst SINGLE_OPS = new Set(['+', '-', '*', '/', '%', '>', '<', '!'])\n\n/** A token after which a `-` is binary minus, not the sign of a number. */\nfunction endsValue(t: Token | undefined): boolean {\n if (!t) return false\n if (t.type === 'number' || t.type === 'string' || t.type === 'literal' || t.type === 'identifier') return true\n return (t.type === 'paren' && t.value === ')') || (t.type === 'bracket' && t.value === ']')\n}\n\nfunction tokenize(expr: string, opts: ExpressionSyntaxOptions): Token[] {\n const tokens: Token[] = []\n let i = 0\n const nameChar = /[\\w$]/\n\n const readName = (allowLeadingDigit: boolean): string => {\n let name = ''\n while (i < expr.length) {\n const c = expr.charAt(i)\n if (nameChar.test(c)) {\n name += c\n i++\n continue\n }\n // a hyphen joins two name characters (`hero-stats`) in hyphenNames mode\n if (\n opts.hyphenNames &&\n c === '-' &&\n name.length > 0 &&\n /[\\w$]/.test(expr.charAt(i + 1))\n ) {\n name += c\n i++\n continue\n }\n break\n }\n if (!allowLeadingDigit && /^\\d/.test(name)) throw new Error(`Unexpected number in name '${name}'`)\n return name\n }\n\n while (i < expr.length) {\n const ch = expr.charAt(i)\n if (/\\s/.test(ch)) {\n i++\n continue\n }\n const prev = tokens[tokens.length - 1]\n\n // A property name after a dot: digits (`items.0`) and keywords\n // (`item.default`, `row.null`) are names here, never literals.\n if (prev?.type === 'dot' && /[\\w$]/.test(ch)) {\n const name = readName(true)\n tokens.push({ type: 'identifier', value: name, raw: name })\n continue\n }\n\n if (ch === \"'\" || ch === '\"') {\n const quote = ch\n let value = ''\n i++\n let closed = false\n while (i < expr.length) {\n const c = expr.charAt(i)\n if (c === quote) {\n closed = true\n break\n }\n if (c === '\\\\' && i + 1 < expr.length) {\n i++\n const e = expr.charAt(i)\n value += e === 'n' ? '\\n' : e === 't' ? '\\t' : e\n } else {\n value += c\n }\n i++\n }\n if (!closed) throw new Error('Unterminated string literal')\n i++\n tokens.push({ type: 'string', value, raw: `${quote}${value}${quote}` })\n continue\n }\n\n // Numbers. A leading `-` is a sign only where a value cannot end —\n // `5-3` is subtraction, `-3` and `a * -3` are negative literals.\n if (/\\d/.test(ch) || (ch === '-' && /\\d/.test(expr.charAt(i + 1)) && !endsValue(prev))) {\n let num = ''\n if (ch === '-') {\n num = '-'\n i++\n }\n while (i < expr.length && /\\d/.test(expr.charAt(i))) num += expr.charAt(i++)\n if (expr.charAt(i) === '.' && /\\d/.test(expr.charAt(i + 1))) {\n num += expr.charAt(i++)\n while (i < expr.length && /\\d/.test(expr.charAt(i))) num += expr.charAt(i++)\n }\n tokens.push({ type: 'number', value: parseFloat(num), raw: num })\n continue\n }\n\n if (/[a-zA-Z_$]/.test(ch)) {\n const name = readName(false)\n if (name === 'true') tokens.push({ type: 'literal', value: true, raw: name })\n else if (name === 'false') tokens.push({ type: 'literal', value: false, raw: name })\n else if (name === 'null') tokens.push({ type: 'literal', value: null, raw: name })\n else if (name === 'undefined')\n tokens.push({ type: 'literal', value: opts.undefinedAsNull ? null : undefined, raw: name })\n else tokens.push({ type: 'identifier', value: name, raw: name })\n continue\n }\n\n const multi = MULTI_OPS.find((op) => expr.startsWith(op, i))\n if (multi) {\n tokens.push({ type: 'operator', value: multi, raw: multi })\n i += multi.length\n continue\n }\n\n if (SINGLE_OPS.has(ch)) tokens.push({ type: 'operator', value: ch, raw: ch })\n else if (ch === '(' || ch === ')') tokens.push({ type: 'paren', value: ch, raw: ch })\n else if (ch === '[' || ch === ']') tokens.push({ type: 'bracket', value: ch, raw: ch })\n else if (ch === '.') tokens.push({ type: 'dot', value: ch, raw: ch })\n else if (ch === ',') tokens.push({ type: 'comma', value: ch, raw: ch })\n else if (ch === '?') tokens.push({ type: 'question', value: ch, raw: ch })\n else if (ch === ':') tokens.push({ type: 'colon', value: ch, raw: ch })\n else throw new Error(`Unexpected character '${ch}' at ${i}`)\n i++\n }\n\n return tokens\n}\n\n// ---- AST ----------------------------------------------------------------\n\ntype Node =\n | { readonly k: 'lit'; readonly v: unknown }\n | { readonly k: 'name'; readonly name: string }\n | { readonly k: 'member'; readonly obj: Node; readonly prop: string }\n | { readonly k: 'index'; readonly obj: Node; readonly index: Node }\n | { readonly k: 'call'; readonly name: string; readonly args: readonly Node[] }\n | { readonly k: 'method'; readonly obj: Node; readonly name: string; readonly args: readonly Node[] }\n | { readonly k: 'unary'; readonly op: string; readonly arg: Node }\n | { readonly k: 'binary'; readonly op: string; readonly l: Node; readonly r: Node }\n | { readonly k: 'cond'; readonly test: Node; readonly then: Node; readonly else: Node }\n | { readonly k: 'array'; readonly items: readonly Node[] }\n\nconst BINARY_LEVELS: readonly (readonly string[])[] = [\n ['||'],\n ['&&'],\n ['??'],\n ['===', '!==', '==', '!='],\n ['>', '<', '>=', '<='],\n ['+', '-'],\n ['*', '/', '%'],\n]\n\nfunction parse(tokens: readonly Token[]): Node {\n let pos = 0\n const peek = (): Token | undefined => tokens[pos]\n const is = (type: TokenType, value?: unknown): boolean => {\n const t = tokens[pos]\n return t !== undefined && t.type === type && (value === undefined || t.value === value)\n }\n const expect = (type: TokenType, value: unknown, what: string): void => {\n if (!is(type, value)) throw new Error(`Expected ${what}`)\n pos++\n }\n\n const parseArgs = (close: string, closeType: TokenType): Node[] => {\n const args: Node[] = []\n if (is(closeType, close)) {\n pos++\n return args\n }\n for (;;) {\n args.push(parseTernary())\n if (is('comma')) {\n pos++\n continue\n }\n expect(closeType, close, `'${close}'`)\n return args\n }\n }\n\n function parseTernary(): Node {\n const test = parseBinary(0)\n if (!is('question')) return test\n pos++\n const then = parseTernary()\n expect('colon', ':', \"':' in ternary expression\")\n return { k: 'cond', test, then, else: parseTernary() }\n }\n\n function parseBinary(level: number): Node {\n const ops = BINARY_LEVELS[level]\n if (!ops) return parseUnary()\n let left = parseBinary(level + 1)\n for (;;) {\n const t = peek()\n if (!t || t.type !== 'operator' || !ops.includes(t.value as string)) return left\n pos++\n left = { k: 'binary', op: t.value as string, l: left, r: parseBinary(level + 1) }\n }\n }\n\n function parseUnary(): Node {\n if (is('operator', '!') || is('operator', '-') || is('operator', '+')) {\n const op = (tokens[pos++] as Token).value as string\n return { k: 'unary', op, arg: parseUnary() }\n }\n return parsePostfix()\n }\n\n function parsePostfix(): Node {\n let node = parsePrimary()\n for (;;) {\n if (is('dot')) {\n pos++\n const t = peek()\n if (!t || t.type !== 'identifier') throw new Error('Expected property name after .')\n pos++\n const name = t.value as string\n if (is('paren', '(')) {\n pos++\n node = { k: 'method', obj: node, name, args: parseArgs(')', 'paren') }\n } else {\n node = { k: 'member', obj: node, prop: name }\n }\n } else if (is('bracket', '[')) {\n pos++\n const index = parseTernary()\n expect('bracket', ']', \"']'\")\n node = { k: 'index', obj: node, index }\n } else if (is('paren', '(')) {\n throw new Error('Only helpers and safe methods can be called')\n } else {\n return node\n }\n }\n }\n\n function parsePrimary(): Node {\n const t = peek()\n if (!t) throw new Error('Unexpected end of expression')\n if (t.type === 'number' || t.type === 'string' || t.type === 'literal') {\n pos++\n return { k: 'lit', v: t.value }\n }\n if (t.type === 'identifier') {\n pos++\n const name = t.value as string\n if (is('paren', '(')) {\n pos++\n return { k: 'call', name, args: parseArgs(')', 'paren') }\n }\n return { k: 'name', name }\n }\n if (is('paren', '(')) {\n pos++\n const inner = parseTernary()\n expect('paren', ')', \"')'\")\n return inner\n }\n if (is('bracket', '[')) {\n pos++\n return { k: 'array', items: parseArgs(']', 'bracket') }\n }\n throw new Error(`Unexpected token '${t.raw}'`)\n }\n\n const root = parseTernary()\n if (pos < tokens.length) throw new Error(`Unexpected token '${(tokens[pos] as Token).raw}'`)\n return root\n}\n\n/**\n * Parse once, evaluate many times. Block props are re-resolved on every state\n * change, and the same few hundred template strings come through each time.\n */\nconst AST_CACHE_LIMIT = 2000\nconst astCache = new Map<string, Node | Error>()\n\nfunction parseCached(expr: string, opts: ExpressionSyntaxOptions): Node {\n const key = `${opts.hyphenNames ? 'h' : '-'}${opts.undefinedAsNull ? 'n' : '-'}${expr}`\n let hit = astCache.get(key)\n if (hit === undefined) {\n try {\n hit = parse(tokenize(expr, opts))\n } catch (e) {\n hit = e instanceof Error ? e : new Error(String(e))\n }\n if (astCache.size >= AST_CACHE_LIMIT) astCache.clear()\n astCache.set(key, hit)\n }\n if (hit instanceof Error) throw hit\n return hit\n}\n\n// ---- evaluation ---------------------------------------------------------\n\n/**\n * How a bare name and a call resolve. The grammar is shared; the scope is the\n * caller's: bindings see `data` / `state` / `params`, block props see the\n * surface's expression data (`state`, source ids, `item`, `__errors`, …).\n */\nexport interface NameResolver {\n /** The value of a bare name. */\n lookup(name: string): unknown\n /** The helper a call names, or undefined when there is none. */\n helper(name: string): ((...args: unknown[]) => unknown) | undefined\n}\n\n/**\n * Methods that may be called on a value. Pure, allocation-bounded, and\n * nothing that reaches a constructor, a prototype or a function: a template\n * is authored by a model and rendered in a visitor's browser.\n */\nconst STRING_METHODS = new Set([\n 'toLowerCase', 'toUpperCase', 'trim', 'trimStart', 'trimEnd', 'includes', 'startsWith', 'endsWith',\n 'indexOf', 'lastIndexOf', 'slice', 'substring', 'padStart', 'padEnd', 'split', 'replace',\n 'replaceAll', 'charAt', 'at', 'concat', 'repeat', 'toString', 'localeCompare',\n])\nconst ARRAY_METHODS = new Set(['includes', 'indexOf', 'lastIndexOf', 'join', 'slice', 'at', 'concat'])\nconst NUMBER_METHODS = new Set(['toFixed', 'toPrecision', 'toString', 'toLocaleString'])\n\nfunction callMethod(target: unknown, name: string, args: unknown[]): unknown {\n if (target === null || target === undefined) return undefined\n let allowed = false\n if (typeof target === 'string') allowed = STRING_METHODS.has(name)\n else if (Array.isArray(target)) allowed = ARRAY_METHODS.has(name)\n else if (typeof target === 'number') allowed = NUMBER_METHODS.has(name)\n if (!allowed) throw new Error(`Method '${name}' is not supported`)\n // A `repeat`/`padStart` count from data must not allocate without bound.\n if ((name === 'repeat' || name === 'padStart' || name === 'padEnd') && Number(args[0]) > 10_000) {\n throw new Error(`Method '${name}' argument too large`)\n }\n const fn = (target as unknown as Record<string, unknown>)[name] as (...a: unknown[]) => unknown\n return fn.apply(target, args)\n}\n\nfunction readMember(target: unknown, prop: string): unknown {\n if (typeof target === 'string') return prop === 'length' ? target.length : undefined\n if (target !== null && target !== undefined && typeof target === 'object') return readProperty(target, prop)\n return undefined\n}\n\nfunction evalNode(node: Node, scope: NameResolver): unknown {\n switch (node.k) {\n case 'lit':\n return node.v\n case 'name':\n return scope.lookup(node.name)\n case 'member':\n return readMember(evalNode(node.obj, scope), node.prop)\n case 'index': {\n const target = evalNode(node.obj, scope)\n const index = evalNode(node.index, scope)\n if (target === null || target === undefined) return undefined\n if (Array.isArray(target)) return target[index as number]\n if (typeof target === 'object') return (target as Record<string, unknown>)[String(index)]\n return undefined\n }\n case 'call': {\n const fn = scope.helper(node.name)\n if (typeof fn !== 'function') throw new Error(`Unknown helper: ${node.name}`)\n return fn(...node.args.map((a) => evalNode(a, scope)))\n }\n case 'method':\n return callMethod(\n evalNode(node.obj, scope),\n node.name,\n node.args.map((a) => evalNode(a, scope))\n )\n case 'unary': {\n const v = evalNode(node.arg, scope)\n if (node.op === '!') return !v\n if (node.op === '-') return -(v as number)\n return +(v as number)\n }\n case 'cond':\n return evalNode(node.test, scope) ? evalNode(node.then, scope) : evalNode(node.else, scope)\n case 'array':\n return node.items.map((n) => evalNode(n, scope))\n case 'binary': {\n // short-circuiting operators first — the right side may never run\n if (node.op === '&&') {\n const l = evalNode(node.l, scope)\n return l ? evalNode(node.r, scope) : l\n }\n if (node.op === '||') {\n const l = evalNode(node.l, scope)\n return l ? l : evalNode(node.r, scope)\n }\n if (node.op === '??') {\n const l = evalNode(node.l, scope)\n return l ?? evalNode(node.r, scope)\n }\n const l = evalNode(node.l, scope)\n const r = evalNode(node.r, scope)\n switch (node.op) {\n case '===': return l === r\n case '!==': return l !== r\n case '==': return l == r\n case '!=': return l != r\n case '>': return (l as number) > (r as number)\n case '<': return (l as number) < (r as number)\n case '>=': return (l as number) >= (r as number)\n case '<=': return (l as number) <= (r as number)\n case '+':\n return typeof l === 'string' || typeof r === 'string'\n ? String(l) + String(r)\n : (l as number) + (r as number)\n case '-': return (l as number) - (r as number)\n case '*': return (l as number) * (r as number)\n case '/': return (l as number) / (r as number)\n case '%': return (l as number) % (r as number)\n }\n throw new Error(`Unknown operator ${node.op}`)\n }\n }\n}\n\n/**\n * Evaluate one expression (the text between `{{` and `}}`) against a scope.\n * Throws on a syntax error, an unknown helper or an unsupported method — the\n * two public evaluators turn that into `{ success: false }`.\n */\nexport function evaluateWithScope(\n expression: string,\n scope: NameResolver,\n opts: ExpressionSyntaxOptions = {}\n): unknown {\n const trimmed = expression.trim()\n if (!trimmed) return undefined\n return evalNode(parseCached(trimmed, opts), scope)\n}\n\n// ============================================================\n// EXPRESSION EVALUATOR IMPLEMENTATION\n// ============================================================\n\n/**\n * Evaluate an expression with full context support\n */\nexport function evaluateExpression(\n expression: string,\n context: BindingExpressionContext\n): ExpressionEvalResult {\n try {\n const helpers = context.helpers\n const scope: NameResolver = {\n lookup(name) {\n if (name === 'data') return context.data\n if (name === 'state') return context.state\n if (name === 'params') return context.params\n // A helper named bare (without a call) has always resolved to the\n // function itself here; kept.\n if (helpers && Object.prototype.hasOwnProperty.call(helpers, name)) return helpers[name]\n // Shorthand access. Priority: params > state > data (most specific first)\n if (name in context.params) return context.params[name]\n if (name in context.state) return context.state[name]\n if (name in context.data) return context.data[name]\n return undefined\n },\n helper: (name) => (helpers && Object.prototype.hasOwnProperty.call(helpers, name) ? helpers[name] : undefined),\n }\n return { success: true, value: evaluateWithScope(expression, scope, { undefinedAsNull: true }) }\n } catch (e) {\n return { success: false, error: `Expression error: ${e}` }\n }\n}\n\n// ============================================================\n// DEPENDENCY EXTRACTION\n// ============================================================\n\n/**\n * Extract dependencies from an expression for reactive updates\n */\nexport function extractDependencies(expression: string): ExpressionDependency[] {\n const dependencies: ExpressionDependency[] = []\n const seen = new Set<string>()\n\n // Match patterns like: data.foo.bar, state.count, params.id\n // Also match shorthand: foo.bar (when referring to data/state/params root)\n const patterns = [\n /\\bdata\\.(\\w+(?:\\.\\w+|\\[\\d+\\])*)/g,\n /\\bstate\\.(\\w+(?:\\.\\w+|\\[\\d+\\])*)/g,\n /\\bparams\\.(\\w+(?:\\.\\w+|\\[\\d+\\])*)/g,\n ]\n\n const sources: readonly ('data' | 'state' | 'params')[] = ['data', 'state', 'params']\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i]\n const source = sources[i]\n if (!pattern || !source) continue\n\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(expression)) !== null) {\n const path = match[1]\n if (path === undefined) continue\n const key = `${source}.${path}`\n if (!seen.has(key)) {\n seen.add(key)\n dependencies.push({ source, path })\n }\n }\n }\n\n return dependencies\n}\n\n// ============================================================\n// INTERPOLATION\n// ============================================================\n\n/**\n * Check if a value contains expression syntax\n */\nexport function isExpression(value: unknown): boolean {\n if (typeof value !== 'string') return false\n return /\\{\\{.+?\\}\\}/.test(value)\n}\n\n/**\n * Interpolate expressions within a template string\n *\n * @example\n * interpolate('Hello, {{user.name}}!', context) // 'Hello, John!'\n * interpolate('Total: {{price * quantity}}', context) // 'Total: 100'\n */\nexport function interpolate(template: string, context: BindingExpressionContext): string {\n const pattern = /\\{\\{(.+?)\\}\\}/g\n return template.replace(pattern, (_, expr: string) => {\n const result = evaluateExpression(expr.trim(), context)\n if (result.success) {\n return String(result.value ?? '')\n }\n return ''\n })\n}\n\n// ============================================================\n// DEFAULT HELPERS\n// ============================================================\n\n/**\n * Default helper functions for expressions\n */\nexport const DEFAULT_BINDING_HELPERS: Record<string, (...args: unknown[]) => unknown> = {\n // String helpers\n upper: (s: unknown) => String(s).toUpperCase(),\n lower: (s: unknown) => String(s).toLowerCase(),\n trim: (s: unknown) => String(s).trim(),\n capitalize: (s: unknown) => {\n const str = String(s)\n return str.charAt(0).toUpperCase() + str.slice(1)\n },\n concat: (...args: unknown[]) => args.map(String).join(''),\n\n // Number helpers\n round: (n: unknown, decimals?: unknown) => {\n const num = Number(n)\n const d = Number(decimals ?? 0)\n return Math.round(num * Math.pow(10, d)) / Math.pow(10, d)\n },\n floor: (n: unknown) => Math.floor(Number(n)),\n ceil: (n: unknown) => Math.ceil(Number(n)),\n abs: (n: unknown) => Math.abs(Number(n)),\n min: (...args: unknown[]) => Math.min(...args.map(Number)),\n max: (...args: unknown[]) => Math.max(...args.map(Number)),\n /**\n * How many pages `total` rows fill at `size` per page — `ceil(total / size)`,\n * but SAFE: a missing, non-numeric, zero or negative total or size gives 0,\n * never `NaN` or `Infinity` (the envelope is absent until the first fetch\n * lands). Pair with `__meta.<source>.total` on a `returns` source:\n * `{{pages(__meta.products.total, 20)}}`. Wrap in `max(1, …)` for a pager\n * that should read \"1 / 1\" on an empty list.\n */\n pages: (total: unknown, size: unknown) => {\n const t = Number(total)\n const s = Number(size)\n if (!Number.isFinite(t) || !Number.isFinite(s) || t <= 0 || s <= 0) return 0\n return Math.ceil(t / s)\n },\n\n // Aggregate helpers — one data source, several KPI figures. Without these a\n // KPI strip needed one source (one fetch) per number. Filtering stays the\n // data layer's job (EntityQuery.filter); these only fold what is already\n // fetched.\n sumBy: (items: unknown, field?: unknown) => {\n if (!Array.isArray(items)) return 0\n const f = field === undefined ? undefined : String(field)\n return items.reduce<number>((acc, it) => {\n const v = f === undefined ? it : (it as Record<string, unknown> | null)?.[f]\n const n = Number(v)\n return Number.isFinite(n) ? acc + n : acc\n }, 0)\n },\n groupCount: (items: unknown, field: unknown) => {\n const out: Record<string, number> = {}\n if (!Array.isArray(items)) return out\n const f = String(field)\n for (const it of items) {\n const v = (it as Record<string, unknown> | null)?.[f]\n const key = v === null || v === undefined || v === '' ? 'unknown' : String(v)\n out[key] = (out[key] ?? 0) + 1\n }\n return out\n },\n\n // Array helpers\n length: (arr: unknown) => (Array.isArray(arr) ? arr.length : String(arr).length),\n first: (arr: unknown) => (Array.isArray(arr) ? arr[0] : undefined),\n last: (arr: unknown) => (Array.isArray(arr) ? arr[arr.length - 1] : undefined),\n join: (arr: unknown, sep?: unknown) =>\n Array.isArray(arr) ? arr.join(String(sep ?? ',')) : String(arr),\n includes: (arr: unknown, item: unknown) =>\n Array.isArray(arr) ? arr.includes(item) : String(arr).includes(String(item)),\n slice: (arr: unknown, start?: unknown, end?: unknown) => {\n if (Array.isArray(arr)) {\n return arr.slice(\n start !== undefined ? Number(start) : undefined,\n end !== undefined ? Number(end) : undefined\n )\n }\n return String(arr).slice(\n start !== undefined ? Number(start) : undefined,\n end !== undefined ? Number(end) : undefined\n )\n },\n\n // Type checks\n isEmpty: (v: unknown) =>\n v === null ||\n v === undefined ||\n v === '' ||\n (Array.isArray(v) && v.length === 0) ||\n (typeof v === 'object' && Object.keys(v).length === 0),\n isNotEmpty: (v: unknown) =>\n v !== null && v !== undefined && v !== '' && !(Array.isArray(v) && v.length === 0),\n isArray: (v: unknown) => Array.isArray(v),\n isString: (v: unknown) => typeof v === 'string',\n isNumber: (v: unknown) => typeof v === 'number' && !isNaN(v),\n isBoolean: (v: unknown) => typeof v === 'boolean',\n isNull: (v: unknown) => v === null || v === undefined,\n\n // Object helpers\n keys: (obj: unknown) => (typeof obj === 'object' && obj !== null ? Object.keys(obj) : []),\n values: (obj: unknown) => (typeof obj === 'object' && obj !== null ? Object.values(obj) : []),\n\n // Formatting helpers\n json: (v: unknown) => JSON.stringify(v),\n /**\n * Today's date in the visitor's time zone, as `YYYY-MM-DD`.\n * The shape date fields are stored in, so it compares as a string:\n * `{{event.date >= today()}}` for \"upcoming\", `today(-7)` for a week ago.\n * The optional argument shifts by whole days. Before this an \"upcoming\"\n * filter had nothing to compare against and a page hard-coded a date.\n */\n today: (offsetDays?: unknown) => {\n const d = new Date()\n const shift = Number(offsetDays ?? 0)\n if (Number.isFinite(shift) && shift !== 0) d.setDate(d.getDate() + Math.trunc(shift))\n const mm = String(d.getMonth() + 1).padStart(2, '0')\n const dd = String(d.getDate()).padStart(2, '0')\n return `${d.getFullYear()}-${mm}-${dd}`\n },\n date: (v: unknown) => new Date(v as string | number).toLocaleDateString(),\n time: (v: unknown) => new Date(v as string | number).toLocaleTimeString(),\n datetime: (v: unknown) => new Date(v as string | number).toLocaleString(),\n currency: (v: unknown, currency?: unknown, locale?: unknown) => {\n const num = Number(v)\n return new Intl.NumberFormat(String(locale ?? 'en-US'), {\n style: 'currency',\n currency: String(currency ?? 'USD'),\n }).format(num)\n },\n percent: (v: unknown, decimals?: unknown) => {\n const num = Number(v)\n const d = Number(decimals ?? 0)\n return `${(num * 100).toFixed(d)}%`\n },\n}\n\n// ============================================================\n// EXPRESSION EVALUATOR FACTORY\n// ============================================================\n\n/**\n * Create an expression evaluator with context and helpers\n */\nexport function createExpressionEvaluator(\n additionalHelpers?: Record<string, (...args: unknown[]) => unknown>\n): ExpressionEvaluator {\n const helpers = { ...DEFAULT_BINDING_HELPERS, ...additionalHelpers }\n\n return {\n evaluate(expression: string, context: BindingExpressionContext): unknown {\n const result = evaluateExpression(expression, {\n ...context,\n helpers: { ...helpers, ...context.helpers },\n })\n if (result.success) {\n return result.value\n }\n throw new Error(result.error)\n },\n\n isExpression,\n\n extractDependencies,\n\n interpolate(template: string, context: BindingExpressionContext): string {\n return interpolate(template, {\n ...context,\n helpers: { ...helpers, ...context.helpers },\n })\n },\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binding Module
|
|
3
|
+
*
|
|
4
|
+
* Capability-to-surface binding system
|
|
5
|
+
* Enhanced data binding with expressions, collections, and data sources
|
|
6
|
+
*
|
|
7
|
+
* @module @pwfabric/runtime/binding
|
|
8
|
+
*/
|
|
9
|
+
export type { BindingState, BindingConfig, RuntimeBindingTransform, BindingCacheConfig, RetryConfig, BoundCapability, BindingError, BindingContext, AuthContext, BindingResult, SurfaceBindingResult, } from './types.js';
|
|
10
|
+
export type { BindingEngine } from './engine.js';
|
|
11
|
+
export { RuntimeBindingEngine, createBindingEngine } from './engine.js';
|
|
12
|
+
export type { BindingExpressionContext, ExpressionEvalResult, ExpressionEvaluator, ExpressionDependency, } from './expression.js';
|
|
13
|
+
export { evaluateExpression, resolvePath as resolveBindingPath, extractDependencies, isExpression as isBindingExpression, interpolate as interpolateBinding, createExpressionEvaluator, DEFAULT_BINDING_HELPERS, } from './expression.js';
|
|
14
|
+
export type { CollectionChangeType, CollectionChangeEvent, CollectionChangeListener, CollectionBinding, MutableCollectionBinding, } from './collection.js';
|
|
15
|
+
export { ReactiveCollection, createCollection, createReadOnlyCollection, createCollectionFromAsync, } from './collection.js';
|
|
16
|
+
export type { DataSourceType, DataSource, DataSourceListener, BaseDataSourceConfig, DataSourceCacheConfig, StaticDataSourceConfig, ApiDataSourceConfig, GraphQLDataSourceConfig, StateDataSourceConfig, DataSourceConfig, DataSourceRetryConfig, DataSourceRegistry, } from './datasource.js';
|
|
17
|
+
export { StaticDataSource, ApiDataSource, StateDataSource, InMemoryDataSourceRegistry, createDataSourceRegistry, createDataSource, createStaticDataSource, createApiDataSource, createStateDataSource, } from './datasource.js';
|
|
18
|
+
export type { TwoWayBindingConfig, ValidationResult as TwoWayValidationResult, TwoWayBinding, ChangeListener, } from './two-way.js';
|
|
19
|
+
export { TwoWayBindingManager, createTwoWayBindingManager } from './two-way.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binding Module
|
|
3
|
+
*
|
|
4
|
+
* Capability-to-surface binding system
|
|
5
|
+
* Enhanced data binding with expressions, collections, and data sources
|
|
6
|
+
*
|
|
7
|
+
* @module @pwfabric/runtime/binding
|
|
8
|
+
*/
|
|
9
|
+
export { RuntimeBindingEngine, createBindingEngine } from './engine.js';
|
|
10
|
+
export { evaluateExpression, resolvePath as resolveBindingPath, extractDependencies, isExpression as isBindingExpression, interpolate as interpolateBinding, createExpressionEvaluator, DEFAULT_BINDING_HELPERS, } from './expression.js';
|
|
11
|
+
export { ReactiveCollection, createCollection, createReadOnlyCollection, createCollectionFromAsync, } from './collection.js';
|
|
12
|
+
export { StaticDataSource, ApiDataSource, StateDataSource, InMemoryDataSourceRegistry, createDataSourceRegistry, createDataSource, createStaticDataSource, createApiDataSource, createStateDataSource, } from './datasource.js';
|
|
13
|
+
export { TwoWayBindingManager, createTwoWayBindingManager } from './two-way.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/binding/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAavE,OAAO,EACL,kBAAkB,EAClB,WAAW,IAAI,kBAAkB,EACjC,mBAAmB,EACnB,YAAY,IAAI,mBAAmB,EACnC,WAAW,IAAI,kBAAkB,EACjC,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAcxB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAA;AAqBxB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AAaxB,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA","sourcesContent":["/**\n * Binding Module\n *\n * Capability-to-surface binding system\n * Enhanced data binding with expressions, collections, and data sources\n *\n * @module @pwfabric/runtime/binding\n */\n\n// ============================================================\n// TYPES\n// ============================================================\n\nexport type {\n BindingState,\n BindingConfig,\n RuntimeBindingTransform,\n BindingCacheConfig,\n RetryConfig,\n BoundCapability,\n BindingError,\n BindingContext,\n AuthContext,\n BindingResult,\n SurfaceBindingResult,\n} from './types.js'\n\n// ============================================================\n// ENGINE\n// ============================================================\n\nexport type { BindingEngine } from './engine.js'\nexport { RuntimeBindingEngine, createBindingEngine } from './engine.js'\n\n// ============================================================\n// EXPRESSION EVALUATOR\n// ============================================================\n\nexport type {\n BindingExpressionContext,\n ExpressionEvalResult,\n ExpressionEvaluator,\n ExpressionDependency,\n} from './expression.js'\n\nexport {\n evaluateExpression,\n resolvePath as resolveBindingPath,\n extractDependencies,\n isExpression as isBindingExpression,\n interpolate as interpolateBinding,\n createExpressionEvaluator,\n DEFAULT_BINDING_HELPERS,\n} from './expression.js'\n\n// ============================================================\n// COLLECTION BINDING\n// ============================================================\n\nexport type {\n CollectionChangeType,\n CollectionChangeEvent,\n CollectionChangeListener,\n CollectionBinding,\n MutableCollectionBinding,\n} from './collection.js'\n\nexport {\n ReactiveCollection,\n createCollection,\n createReadOnlyCollection,\n createCollectionFromAsync,\n} from './collection.js'\n\n// ============================================================\n// DATA SOURCES\n// ============================================================\n\nexport type {\n DataSourceType,\n DataSource,\n DataSourceListener,\n BaseDataSourceConfig,\n DataSourceCacheConfig,\n StaticDataSourceConfig,\n ApiDataSourceConfig,\n GraphQLDataSourceConfig,\n StateDataSourceConfig,\n DataSourceConfig,\n DataSourceRetryConfig,\n DataSourceRegistry,\n} from './datasource.js'\n\nexport {\n StaticDataSource,\n ApiDataSource,\n StateDataSource,\n InMemoryDataSourceRegistry,\n createDataSourceRegistry,\n createDataSource,\n createStaticDataSource,\n createApiDataSource,\n createStateDataSource,\n} from './datasource.js'\n\n// ============================================================\n// TWO-WAY BINDING (P1-5)\n// ============================================================\n\nexport type {\n TwoWayBindingConfig,\n ValidationResult as TwoWayValidationResult,\n TwoWayBinding,\n ChangeListener,\n} from './two-way.js'\n\nexport { TwoWayBindingManager, createTwoWayBindingManager } from './two-way.js'\n"]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-way Data Binding
|
|
3
|
+
*
|
|
4
|
+
* P1-5: Extends the binding system with write-back capability.
|
|
5
|
+
* UI changes propagate back to the data source, enabling form inputs,
|
|
6
|
+
* editable fields, and other interactive elements to automatically
|
|
7
|
+
* update the data model.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/binding/two-way
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for a two-way binding
|
|
13
|
+
*/
|
|
14
|
+
export interface TwoWayBindingConfig {
|
|
15
|
+
/** Data path using dot-notation (e.g., "user.profile.name") */
|
|
16
|
+
readonly path: string;
|
|
17
|
+
/** Debounce delay in ms for write-back (default: 300) */
|
|
18
|
+
readonly debounceMs?: number;
|
|
19
|
+
/** Optional validation function run before setting value */
|
|
20
|
+
readonly validate?: (value: unknown) => ValidationResult;
|
|
21
|
+
/** Optional transform functions between UI and model */
|
|
22
|
+
readonly transform?: {
|
|
23
|
+
readonly toModel?: (uiValue: unknown) => unknown;
|
|
24
|
+
readonly toView?: (modelValue: unknown) => unknown;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of value validation
|
|
29
|
+
*/
|
|
30
|
+
export interface ValidationResult {
|
|
31
|
+
readonly valid: boolean;
|
|
32
|
+
readonly error?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A two-way binding instance for a specific data path
|
|
36
|
+
*/
|
|
37
|
+
export interface TwoWayBinding<T = unknown> {
|
|
38
|
+
/** The data path this binding targets */
|
|
39
|
+
readonly path: string;
|
|
40
|
+
/** Current value at the path */
|
|
41
|
+
readonly value: T;
|
|
42
|
+
/** Current validation error, if any */
|
|
43
|
+
readonly error?: string | undefined;
|
|
44
|
+
/** Whether the value has changed from the initial value */
|
|
45
|
+
readonly isDirty: boolean;
|
|
46
|
+
/** Whether validation is currently running */
|
|
47
|
+
readonly isValidating: boolean;
|
|
48
|
+
/** Set a new value (triggers validation, debounced write-back) */
|
|
49
|
+
setValue(newValue: T): void;
|
|
50
|
+
/** Reset value to the initial value */
|
|
51
|
+
reset(): void;
|
|
52
|
+
/** Dispose the binding and clean up timers */
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Listener called when a value changes at a path
|
|
57
|
+
*/
|
|
58
|
+
export type ChangeListener<T = unknown> = (newValue: T, oldValue: T) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Manages two-way data bindings.
|
|
61
|
+
*
|
|
62
|
+
* Provides a central data store with path-based access, change listeners,
|
|
63
|
+
* validation, transforms, and batch update support. Each call to `bind()`
|
|
64
|
+
* creates a `TwoWayBinding` instance that can read/write a specific path
|
|
65
|
+
* in the data model.
|
|
66
|
+
*/
|
|
67
|
+
export declare class TwoWayBindingManager {
|
|
68
|
+
private readonly bindings;
|
|
69
|
+
private data;
|
|
70
|
+
private readonly listeners;
|
|
71
|
+
private batchDepth;
|
|
72
|
+
private readonly pendingNotifications;
|
|
73
|
+
constructor(initialData?: Record<string, unknown>);
|
|
74
|
+
/**
|
|
75
|
+
* Create a two-way binding for a specific data path.
|
|
76
|
+
*
|
|
77
|
+
* Returns a `TwoWayBinding` instance that tracks the value at the path,
|
|
78
|
+
* supports validation and transforms, and writes changes back to the
|
|
79
|
+
* data model with optional debouncing.
|
|
80
|
+
*/
|
|
81
|
+
bind<T = unknown>(config: TwoWayBindingConfig): TwoWayBinding<T>;
|
|
82
|
+
/**
|
|
83
|
+
* Get the current value at a data path
|
|
84
|
+
*/
|
|
85
|
+
getValue(path: string): unknown;
|
|
86
|
+
/**
|
|
87
|
+
* Set a value at a data path, triggering change listeners
|
|
88
|
+
*/
|
|
89
|
+
setValue(path: string, value: unknown): void;
|
|
90
|
+
/**
|
|
91
|
+
* Subscribe to changes at a data path.
|
|
92
|
+
*
|
|
93
|
+
* @returns Unsubscribe function
|
|
94
|
+
*/
|
|
95
|
+
onChange<T = unknown>(path: string, listener: ChangeListener<T>): () => void;
|
|
96
|
+
/**
|
|
97
|
+
* Batch multiple updates together.
|
|
98
|
+
*
|
|
99
|
+
* Listener notifications are deferred until the outermost batch
|
|
100
|
+
* completes, then fired once per changed path.
|
|
101
|
+
*/
|
|
102
|
+
batch(updates: () => void): void;
|
|
103
|
+
/**
|
|
104
|
+
* Get all bindings that have been modified from their initial values
|
|
105
|
+
*/
|
|
106
|
+
getDirtyBindings(): readonly TwoWayBinding[];
|
|
107
|
+
/**
|
|
108
|
+
* Reset all bindings to their initial values
|
|
109
|
+
*/
|
|
110
|
+
resetAll(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Dispose all bindings and clear all listeners
|
|
113
|
+
*/
|
|
114
|
+
dispose(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Internal method called by binding instances to write back to the model.
|
|
117
|
+
* Not part of the public API.
|
|
118
|
+
*/
|
|
119
|
+
setValueInternal(path: string, modelValue: unknown, oldViewValue: unknown): void;
|
|
120
|
+
private notifyChange;
|
|
121
|
+
private flushPendingNotifications;
|
|
122
|
+
private fireListeners;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create a two-way binding manager
|
|
126
|
+
*
|
|
127
|
+
* @param initialData - Optional initial data to populate the model
|
|
128
|
+
* @returns A new TwoWayBindingManager instance
|
|
129
|
+
*
|
|
130
|
+
* @example
|
|
131
|
+
* ```ts
|
|
132
|
+
* const manager = createTwoWayBindingManager({
|
|
133
|
+
* user: { name: 'John', email: 'john@example.com' }
|
|
134
|
+
* })
|
|
135
|
+
*
|
|
136
|
+
* const nameBinding = manager.bind<string>({
|
|
137
|
+
* path: 'user.name',
|
|
138
|
+
* debounceMs: 200,
|
|
139
|
+
* validate: (v) => ({
|
|
140
|
+
* valid: typeof v === 'string' && v.length > 0,
|
|
141
|
+
* error: 'Name is required',
|
|
142
|
+
* }),
|
|
143
|
+
* })
|
|
144
|
+
*
|
|
145
|
+
* nameBinding.setValue('Jane')
|
|
146
|
+
* // After debounce, manager.getValue('user.name') === 'Jane'
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export declare function createTwoWayBindingManager(initialData?: Record<string, unknown>): TwoWayBindingManager;
|