@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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface Rendering Module
|
|
3
|
+
*
|
|
4
|
+
* Surface JSON interpreter, renderer, layout system, and primitives
|
|
5
|
+
*
|
|
6
|
+
* This module provides the complete surface rendering pipeline:
|
|
7
|
+
* - JSON interpretation and validation
|
|
8
|
+
* - Layout resolution (slots, conditionals, loops)
|
|
9
|
+
* - Deterministic rendering
|
|
10
|
+
* - Built-in primitives
|
|
11
|
+
*
|
|
12
|
+
* @module @pwfabric/runtime/surface
|
|
13
|
+
*/
|
|
14
|
+
export { createNode, createRenderContext, createChildContext, renderSuccess, renderError, } from './types.js';
|
|
15
|
+
export { evaluate, interpolate, resolvePath, createExpressionContext, DEFAULT_HELPERS, } from './expression.js';
|
|
16
|
+
export { resolveLayout, createSlotMap, extractSlots, composeLayouts, wrapInContainer, validateLayout, } from './layout.js';
|
|
17
|
+
export { PRIMITIVE_DEFINITIONS, text, container, button, heading, spacer, divider, isPrimitive, getPrimitiveDefinition, } from './primitives.js';
|
|
18
|
+
// Schemas
|
|
19
|
+
export { surfaceJsonSchema, layoutJsonSchema, bindingJsonSchema, environmentSchema, isSurfaceJSON, isLayoutJSON, isBindingJSON, } from './schemas.js';
|
|
20
|
+
export { interpretSurface, parseSurfaceJSON, SurfaceBuilder, surface, createSurfaceContext, } from './interpreter.js';
|
|
21
|
+
export { DeterministicRenderer, createRenderer, renderSurface, isRenderSuccess, isRenderError, serializeNode, serializeOutput, hashNode, verifyDeterminism, } from './renderer.js';
|
|
22
|
+
export { validateBlockProps, validateLayoutProps, blockManifestPropFindings, manifestPropFindings, } from './validation.js';
|
|
23
|
+
export { mapTransformConfigSchema, filterTransformConfigSchema, pickTransformConfigSchema, omitTransformConfigSchema, customTransformConfigSchema, validateTransformConfig, narrowTransformDescriptor, createMapTransform, createFilterTransform, createPickTransform, createOmitTransform, createCustomTransform, } from './transforms.js';
|
|
24
|
+
export { createWebOutput, createApiOutput, createCliOutput } from './output.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/surface/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAInB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAA;AAqBpB,OAAO,EACL,qBAAqB,EACrB,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AAExB,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAA;AAQrB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,OAAO,EACP,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,iBAAiB,GAClB,MAAM,eAAe,CAAA;AAYtB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAYxB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iBAAiB,CAAA;AASxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA","sourcesContent":["/**\n * Surface Rendering Module\n *\n * Surface JSON interpreter, renderer, layout system, and primitives\n *\n * This module provides the complete surface rendering pipeline:\n * - JSON interpretation and validation\n * - Layout resolution (slots, conditionals, loops)\n * - Deterministic rendering\n * - Built-in primitives\n *\n * @module @pwfabric/runtime/surface\n */\n\n// Types\nexport type {\n PrimitiveType,\n BaseNodeProps,\n RenderNode,\n SurfaceJSON,\n BindingJSON,\n LayoutJSON,\n RenderContext,\n RenderResult,\n RenderOutput,\n RenderError,\n RenderErrorCode,\n} from './types.js'\n\nexport {\n createNode,\n createRenderContext,\n createChildContext,\n renderSuccess,\n renderError,\n} from './types.js'\n\n// Expression evaluation\nexport type { ExpressionResult, ExpressionContext } from './expression.js'\nexport {\n evaluate,\n interpolate,\n resolvePath,\n createExpressionContext,\n DEFAULT_HELPERS,\n} from './expression.js'\n\n// Layout system\nexport type { LayoutResult } from './layout.js'\nexport {\n resolveLayout,\n createSlotMap,\n extractSlots,\n composeLayouts,\n wrapInContainer,\n validateLayout,\n} from './layout.js'\n\n// Primitives\nexport type {\n TextProps,\n ContainerProps,\n ButtonProps,\n InputProps,\n ImageProps,\n LinkProps,\n ListProps,\n HeadingProps,\n SpacerProps,\n DividerProps,\n SlotProps,\n ConditionalProps,\n LoopProps,\n PrimitiveDefinition,\n PropDefinition,\n} from './primitives.js'\n\nexport {\n PRIMITIVE_DEFINITIONS,\n text,\n container,\n button,\n heading,\n spacer,\n divider,\n isPrimitive,\n getPrimitiveDefinition,\n} from './primitives.js'\n\n// Schemas\nexport {\n surfaceJsonSchema,\n layoutJsonSchema,\n bindingJsonSchema,\n environmentSchema,\n isSurfaceJSON,\n isLayoutJSON,\n isBindingJSON,\n} from './schemas.js'\n\n// Interpreter\nexport type {\n InterpretedSurface,\n InterpretationResult,\n InterpretSurfaceOptions,\n} from './interpreter.js'\nexport {\n interpretSurface,\n parseSurfaceJSON,\n SurfaceBuilder,\n surface,\n createSurfaceContext,\n} from './interpreter.js'\n\n// Renderer\nexport type { RenderOptions, SurfaceRenderer } from './renderer.js'\nexport {\n DeterministicRenderer,\n createRenderer,\n renderSurface,\n isRenderSuccess,\n isRenderError,\n serializeNode,\n serializeOutput,\n hashNode,\n verifyDeterminism,\n} from './renderer.js'\n\n// Block Props Validation\nexport type {\n BlockPropsValidationResult,\n BlockPropsValidationOptions,\n LayoutPropsIssue,\n ManifestPropSpec,\n BlockManifestPropsMap,\n ManifestPropFinding,\n ManifestPropFindingCode,\n} from './validation.js'\nexport {\n validateBlockProps,\n validateLayoutProps,\n blockManifestPropFindings,\n manifestPropFindings,\n} from './validation.js'\n\n// Typed Transform Wrappers\nexport type {\n MapTransformConfig,\n FilterTransformConfig,\n PickTransformConfig,\n OmitTransformConfig,\n CustomTransformConfig,\n TypedTransformConfig,\n TransformValidationResult,\n} from './transforms.js'\nexport {\n mapTransformConfigSchema,\n filterTransformConfigSchema,\n pickTransformConfigSchema,\n omitTransformConfigSchema,\n customTransformConfigSchema,\n validateTransformConfig,\n narrowTransformDescriptor,\n createMapTransform,\n createFilterTransform,\n createPickTransform,\n createOmitTransform,\n createCustomTransform,\n} from './transforms.js'\n\n// Typed Output Factories\nexport type {\n TypedWebOutput,\n TypedApiOutput,\n TypedCliOutput,\n OutputFactoryResult,\n} from './output.js'\nexport { createWebOutput, createApiOutput, createCliOutput } from './output.js'\n"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface JSON Interpreter
|
|
3
|
+
*
|
|
4
|
+
* Parse and validate Surface JSON definitions
|
|
5
|
+
*
|
|
6
|
+
* The interpreter converts Surface JSON into a validated Surface object
|
|
7
|
+
* that can be rendered by the renderer.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/surface/interpreter
|
|
10
|
+
*/
|
|
11
|
+
import type { SurfaceId, CapabilityId } from '@pwfabric/contracts';
|
|
12
|
+
import type { SurfaceJSON, LayoutJSON, RenderContext } from './types.js';
|
|
13
|
+
import { type BlockPropsValidationOptions, type ManifestPropFinding } from './validation.js';
|
|
14
|
+
import type { EnvironmentType } from '@pwfabric/contracts';
|
|
15
|
+
/**
|
|
16
|
+
* Interpreted surface
|
|
17
|
+
*/
|
|
18
|
+
export interface InterpretedSurface {
|
|
19
|
+
readonly id: SurfaceId;
|
|
20
|
+
readonly version: string;
|
|
21
|
+
readonly environment: EnvironmentType;
|
|
22
|
+
readonly metadata: {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly description?: string;
|
|
25
|
+
readonly tags?: readonly string[];
|
|
26
|
+
};
|
|
27
|
+
readonly bindings: Map<string, CapabilityId>;
|
|
28
|
+
readonly layout: LayoutJSON;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Interpretation result
|
|
32
|
+
*/
|
|
33
|
+
export type InterpretationResult = {
|
|
34
|
+
readonly success: true;
|
|
35
|
+
readonly surface: InterpretedSurface;
|
|
36
|
+
/**
|
|
37
|
+
* Manifest findings when `validation.manifests` was supplied.
|
|
38
|
+
* Warnings only: the surface is interpreted all the same.
|
|
39
|
+
*/
|
|
40
|
+
readonly warnings?: readonly ManifestPropFinding[];
|
|
41
|
+
} | {
|
|
42
|
+
readonly success: false;
|
|
43
|
+
readonly errors: readonly string[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Options for surface interpretation
|
|
47
|
+
*/
|
|
48
|
+
export interface InterpretSurfaceOptions {
|
|
49
|
+
/**
|
|
50
|
+
* Block props validation options.
|
|
51
|
+
* Set to false to disable prop validation entirely.
|
|
52
|
+
*/
|
|
53
|
+
readonly validation?: BlockPropsValidationOptions | false;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Interpret a Surface JSON definition
|
|
57
|
+
*/
|
|
58
|
+
export declare function interpretSurface(json: SurfaceJSON, options?: InterpretSurfaceOptions): InterpretationResult;
|
|
59
|
+
/**
|
|
60
|
+
* Parse Surface JSON from a string
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseSurfaceJSON(jsonString: string): InterpretationResult;
|
|
63
|
+
/**
|
|
64
|
+
* Surface builder for programmatic construction
|
|
65
|
+
*/
|
|
66
|
+
export declare class SurfaceBuilder {
|
|
67
|
+
private _id;
|
|
68
|
+
private _version;
|
|
69
|
+
private _environment;
|
|
70
|
+
private _metadata;
|
|
71
|
+
private _bindings;
|
|
72
|
+
private _layout;
|
|
73
|
+
private _validationOptions;
|
|
74
|
+
constructor(id: string);
|
|
75
|
+
version(v: string): this;
|
|
76
|
+
environment(env: EnvironmentType): this;
|
|
77
|
+
name(n: string): this;
|
|
78
|
+
description(d: string): this;
|
|
79
|
+
tags(...t: string[]): this;
|
|
80
|
+
bind(capability: string, alias?: string): this;
|
|
81
|
+
layout(l: LayoutJSON): this;
|
|
82
|
+
/**
|
|
83
|
+
* Configure block props validation.
|
|
84
|
+
* Pass false to disable validation entirely.
|
|
85
|
+
*/
|
|
86
|
+
validation(options: BlockPropsValidationOptions | false): this;
|
|
87
|
+
build(): InterpretationResult;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a surface builder
|
|
91
|
+
*/
|
|
92
|
+
export declare function surface(id: string): SurfaceBuilder;
|
|
93
|
+
/**
|
|
94
|
+
* Create a render context for an interpreted surface
|
|
95
|
+
*/
|
|
96
|
+
export declare function createSurfaceContext(surface: InterpretedSurface, data?: Record<string, unknown>): RenderContext;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface JSON Interpreter
|
|
3
|
+
*
|
|
4
|
+
* Parse and validate Surface JSON definitions
|
|
5
|
+
*
|
|
6
|
+
* The interpreter converts Surface JSON into a validated Surface object
|
|
7
|
+
* that can be rendered by the renderer.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/surface/interpreter
|
|
10
|
+
*/
|
|
11
|
+
import { surfaceId, capabilityId, parseVersion } from '@pwfabric/contracts';
|
|
12
|
+
import { createRenderContext } from './types.js';
|
|
13
|
+
import { validateLayout } from './layout.js';
|
|
14
|
+
import { manifestPropFindings, validateLayoutProps, } from './validation.js';
|
|
15
|
+
// ============================================================
|
|
16
|
+
// SCHEMA VALIDATION
|
|
17
|
+
// ============================================================
|
|
18
|
+
/**
|
|
19
|
+
* Validate Surface JSON structure
|
|
20
|
+
*/
|
|
21
|
+
function validateSurfaceJSON(json) {
|
|
22
|
+
const errors = [];
|
|
23
|
+
if (!json || typeof json !== 'object') {
|
|
24
|
+
return { valid: false, errors: ['Surface JSON must be an object'] };
|
|
25
|
+
}
|
|
26
|
+
const obj = json;
|
|
27
|
+
// Required fields
|
|
28
|
+
if (typeof obj.id !== 'string' || !obj.id) {
|
|
29
|
+
errors.push('Surface must have a string id');
|
|
30
|
+
}
|
|
31
|
+
if (typeof obj.version !== 'string' || !obj.version) {
|
|
32
|
+
errors.push('Surface must have a string version');
|
|
33
|
+
}
|
|
34
|
+
if (typeof obj.environment !== 'string' || !obj.environment) {
|
|
35
|
+
errors.push('Surface must have a string environment');
|
|
36
|
+
}
|
|
37
|
+
// Validate environment
|
|
38
|
+
const validEnvironments = ['web', 'api', 'cli', 'worker', 'edge', 'node', 'native', 'test'];
|
|
39
|
+
if (obj.environment && !validEnvironments.includes(obj.environment)) {
|
|
40
|
+
errors.push(`Invalid environment: ${obj.environment}. Must be one of: ${validEnvironments.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
// Validate layout
|
|
43
|
+
if (!obj.layout || typeof obj.layout !== 'object') {
|
|
44
|
+
errors.push('Surface must have a layout object');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const layoutResult = validateLayout(obj.layout);
|
|
48
|
+
if (!layoutResult.valid) {
|
|
49
|
+
errors.push(...layoutResult.errors.map((e) => `layout: ${e}`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Validate bindings if present
|
|
53
|
+
if (obj.bindings !== undefined) {
|
|
54
|
+
if (!Array.isArray(obj.bindings)) {
|
|
55
|
+
errors.push('bindings must be an array');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
for (let i = 0; i < obj.bindings.length; i++) {
|
|
59
|
+
const binding = obj.bindings[i];
|
|
60
|
+
if (typeof binding.capability !== 'string') {
|
|
61
|
+
errors.push(`bindings[${i}]: capability must be a string`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Validate metadata if present
|
|
67
|
+
if (obj.metadata !== undefined && typeof obj.metadata !== 'object') {
|
|
68
|
+
errors.push('metadata must be an object');
|
|
69
|
+
}
|
|
70
|
+
return { valid: errors.length === 0, errors };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Interpret a Surface JSON definition
|
|
74
|
+
*/
|
|
75
|
+
export function interpretSurface(json, options = {}) {
|
|
76
|
+
// Validate structure
|
|
77
|
+
const validation = validateSurfaceJSON(json);
|
|
78
|
+
if (!validation.valid) {
|
|
79
|
+
return { success: false, errors: validation.errors };
|
|
80
|
+
}
|
|
81
|
+
// Parse version
|
|
82
|
+
const version = parseVersion(json.version);
|
|
83
|
+
if (!version) {
|
|
84
|
+
return { success: false, errors: [`Invalid version format: ${json.version}`] };
|
|
85
|
+
}
|
|
86
|
+
// Validate block props if not disabled
|
|
87
|
+
if (options.validation !== false) {
|
|
88
|
+
const propIssues = validateLayoutProps(json.layout, options.validation ?? {});
|
|
89
|
+
if (propIssues.length > 0) {
|
|
90
|
+
const propErrors = propIssues.flatMap((issue) => issue.errors.map((e) => `${issue.path} (${issue.type}): ${e}`));
|
|
91
|
+
return { success: false, errors: propErrors };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Build bindings map
|
|
95
|
+
const bindings = new Map();
|
|
96
|
+
if (json.bindings) {
|
|
97
|
+
for (const binding of json.bindings) {
|
|
98
|
+
const alias = binding.alias ?? binding.capability;
|
|
99
|
+
bindings.set(alias, capabilityId(binding.capability));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Build metadata with only defined properties
|
|
103
|
+
const metadata = {
|
|
104
|
+
name: json.metadata?.name ?? json.id,
|
|
105
|
+
};
|
|
106
|
+
if (json.metadata?.description !== undefined) {
|
|
107
|
+
;
|
|
108
|
+
metadata.description = json.metadata.description;
|
|
109
|
+
}
|
|
110
|
+
if (json.metadata?.tags !== undefined) {
|
|
111
|
+
;
|
|
112
|
+
metadata.tags = json.metadata.tags;
|
|
113
|
+
}
|
|
114
|
+
// Build interpreted surface
|
|
115
|
+
const surface = {
|
|
116
|
+
id: surfaceId(json.id),
|
|
117
|
+
version: json.version,
|
|
118
|
+
environment: json.environment,
|
|
119
|
+
metadata,
|
|
120
|
+
bindings,
|
|
121
|
+
layout: json.layout,
|
|
122
|
+
};
|
|
123
|
+
const manifests = options.validation !== false ? options.validation?.manifests : undefined;
|
|
124
|
+
if (manifests) {
|
|
125
|
+
const warnings = manifestPropFindings(json.layout, manifests);
|
|
126
|
+
if (warnings.length > 0)
|
|
127
|
+
return { success: true, surface, warnings };
|
|
128
|
+
}
|
|
129
|
+
return { success: true, surface };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parse Surface JSON from a string
|
|
133
|
+
*/
|
|
134
|
+
export function parseSurfaceJSON(jsonString) {
|
|
135
|
+
try {
|
|
136
|
+
const json = JSON.parse(jsonString);
|
|
137
|
+
return interpretSurface(json);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
return { success: false, errors: [`Invalid JSON: ${e}`] };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// ============================================================
|
|
144
|
+
// SURFACE BUILDER
|
|
145
|
+
// ============================================================
|
|
146
|
+
/**
|
|
147
|
+
* Surface builder for programmatic construction
|
|
148
|
+
*/
|
|
149
|
+
export class SurfaceBuilder {
|
|
150
|
+
_id;
|
|
151
|
+
_version = '1.0.0';
|
|
152
|
+
_environment = 'web';
|
|
153
|
+
_metadata = {};
|
|
154
|
+
_bindings = [];
|
|
155
|
+
_layout = null;
|
|
156
|
+
_validationOptions = {};
|
|
157
|
+
constructor(id) {
|
|
158
|
+
this._id = id;
|
|
159
|
+
}
|
|
160
|
+
version(v) {
|
|
161
|
+
this._version = v;
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
environment(env) {
|
|
165
|
+
this._environment = env;
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
name(n) {
|
|
169
|
+
this._metadata.name = n;
|
|
170
|
+
return this;
|
|
171
|
+
}
|
|
172
|
+
description(d) {
|
|
173
|
+
this._metadata.description = d;
|
|
174
|
+
return this;
|
|
175
|
+
}
|
|
176
|
+
tags(...t) {
|
|
177
|
+
this._metadata.tags = t;
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
bind(capability, alias) {
|
|
181
|
+
const binding = alias ? { capability, alias } : { capability };
|
|
182
|
+
this._bindings.push(binding);
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
layout(l) {
|
|
186
|
+
this._layout = l;
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Configure block props validation.
|
|
191
|
+
* Pass false to disable validation entirely.
|
|
192
|
+
*/
|
|
193
|
+
validation(options) {
|
|
194
|
+
this._validationOptions = options;
|
|
195
|
+
return this;
|
|
196
|
+
}
|
|
197
|
+
build() {
|
|
198
|
+
if (!this._layout) {
|
|
199
|
+
return { success: false, errors: ['Surface must have a layout'] };
|
|
200
|
+
}
|
|
201
|
+
const json = {
|
|
202
|
+
id: this._id,
|
|
203
|
+
version: this._version,
|
|
204
|
+
environment: this._environment,
|
|
205
|
+
metadata: this._metadata,
|
|
206
|
+
bindings: this._bindings,
|
|
207
|
+
layout: this._layout,
|
|
208
|
+
};
|
|
209
|
+
return interpretSurface(json, { validation: this._validationOptions });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Create a surface builder
|
|
214
|
+
*/
|
|
215
|
+
export function surface(id) {
|
|
216
|
+
return new SurfaceBuilder(id);
|
|
217
|
+
}
|
|
218
|
+
// ============================================================
|
|
219
|
+
// RENDER CONTEXT CREATION
|
|
220
|
+
// ============================================================
|
|
221
|
+
/**
|
|
222
|
+
* Create a render context for an interpreted surface
|
|
223
|
+
*/
|
|
224
|
+
export function createSurfaceContext(surface, data) {
|
|
225
|
+
return createRenderContext({
|
|
226
|
+
surfaceId: surface.id,
|
|
227
|
+
bindings: surface.bindings,
|
|
228
|
+
data: data ?? {},
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=interpreter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/surface/interpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Surface JSON Interpreter\n *\n * Parse and validate Surface JSON definitions\n *\n * The interpreter converts Surface JSON into a validated Surface object\n * that can be rendered by the renderer.\n *\n * @module @pwfabric/runtime/surface/interpreter\n */\n\nimport type { SurfaceId, CapabilityId } from '@pwfabric/contracts'\nimport { surfaceId, capabilityId, parseVersion } from '@pwfabric/contracts'\nimport type { SurfaceJSON, LayoutJSON, BindingJSON, RenderContext } from './types.js'\nimport { createRenderContext } from './types.js'\nimport { validateLayout } from './layout.js'\nimport {\n manifestPropFindings,\n validateLayoutProps,\n type BlockPropsValidationOptions,\n type ManifestPropFinding,\n} from './validation.js'\nimport type { EnvironmentType } from '@pwfabric/contracts'\n\n// ============================================================\n// INTERPRETATION TYPES\n// ============================================================\n\n/**\n * Interpreted surface\n */\nexport interface InterpretedSurface {\n readonly id: SurfaceId\n readonly version: string\n readonly environment: EnvironmentType\n readonly metadata: {\n readonly name: string\n readonly description?: string\n readonly tags?: readonly string[]\n }\n readonly bindings: Map<string, CapabilityId>\n readonly layout: LayoutJSON\n}\n\n/**\n * Interpretation result\n */\nexport type InterpretationResult =\n | {\n readonly success: true\n readonly surface: InterpretedSurface\n /**\n * Manifest findings when `validation.manifests` was supplied.\n * Warnings only: the surface is interpreted all the same.\n */\n readonly warnings?: readonly ManifestPropFinding[]\n }\n | { readonly success: false; readonly errors: readonly string[] }\n\n// ============================================================\n// SCHEMA VALIDATION\n// ============================================================\n\n/**\n * Validate Surface JSON structure\n */\nfunction validateSurfaceJSON(json: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = []\n\n if (!json || typeof json !== 'object') {\n return { valid: false, errors: ['Surface JSON must be an object'] }\n }\n\n const obj = json as Record<string, unknown>\n\n // Required fields\n if (typeof obj.id !== 'string' || !obj.id) {\n errors.push('Surface must have a string id')\n }\n\n if (typeof obj.version !== 'string' || !obj.version) {\n errors.push('Surface must have a string version')\n }\n\n if (typeof obj.environment !== 'string' || !obj.environment) {\n errors.push('Surface must have a string environment')\n }\n\n // Validate environment\n const validEnvironments = ['web', 'api', 'cli', 'worker', 'edge', 'node', 'native', 'test']\n if (obj.environment && !validEnvironments.includes(obj.environment as string)) {\n errors.push(\n `Invalid environment: ${obj.environment}. Must be one of: ${validEnvironments.join(', ')}`\n )\n }\n\n // Validate layout\n if (!obj.layout || typeof obj.layout !== 'object') {\n errors.push('Surface must have a layout object')\n } else {\n const layoutResult = validateLayout(obj.layout as LayoutJSON)\n if (!layoutResult.valid) {\n errors.push(...layoutResult.errors.map((e) => `layout: ${e}`))\n }\n }\n\n // Validate bindings if present\n if (obj.bindings !== undefined) {\n if (!Array.isArray(obj.bindings)) {\n errors.push('bindings must be an array')\n } else {\n for (let i = 0; i < obj.bindings.length; i++) {\n const binding = obj.bindings[i] as Record<string, unknown>\n if (typeof binding.capability !== 'string') {\n errors.push(`bindings[${i}]: capability must be a string`)\n }\n }\n }\n }\n\n // Validate metadata if present\n if (obj.metadata !== undefined && typeof obj.metadata !== 'object') {\n errors.push('metadata must be an object')\n }\n\n return { valid: errors.length === 0, errors }\n}\n\n// ============================================================\n// INTERPRETER\n// ============================================================\n\n/**\n * Options for surface interpretation\n */\nexport interface InterpretSurfaceOptions {\n /**\n * Block props validation options.\n * Set to false to disable prop validation entirely.\n */\n readonly validation?: BlockPropsValidationOptions | false\n}\n\n/**\n * Interpret a Surface JSON definition\n */\nexport function interpretSurface(\n json: SurfaceJSON,\n options: InterpretSurfaceOptions = {}\n): InterpretationResult {\n // Validate structure\n const validation = validateSurfaceJSON(json)\n if (!validation.valid) {\n return { success: false, errors: validation.errors }\n }\n\n // Parse version\n const version = parseVersion(json.version)\n if (!version) {\n return { success: false, errors: [`Invalid version format: ${json.version}`] }\n }\n\n // Validate block props if not disabled\n if (options.validation !== false) {\n const propIssues = validateLayoutProps(json.layout, options.validation ?? {})\n if (propIssues.length > 0) {\n const propErrors = propIssues.flatMap((issue) =>\n issue.errors.map((e) => `${issue.path} (${issue.type}): ${e}`)\n )\n return { success: false, errors: propErrors }\n }\n }\n\n // Build bindings map\n const bindings = new Map<string, CapabilityId>()\n if (json.bindings) {\n for (const binding of json.bindings) {\n const alias = binding.alias ?? binding.capability\n bindings.set(alias, capabilityId(binding.capability))\n }\n }\n\n // Build metadata with only defined properties\n const metadata: InterpretedSurface['metadata'] = {\n name: json.metadata?.name ?? json.id,\n }\n if (json.metadata?.description !== undefined) {\n ;(metadata as { description?: string }).description = json.metadata.description\n }\n if (json.metadata?.tags !== undefined) {\n ;(metadata as { tags?: readonly string[] }).tags = json.metadata.tags\n }\n\n // Build interpreted surface\n const surface: InterpretedSurface = {\n id: surfaceId(json.id),\n version: json.version,\n environment: json.environment as EnvironmentType,\n metadata,\n bindings,\n layout: json.layout,\n }\n\n const manifests = options.validation !== false ? options.validation?.manifests : undefined\n if (manifests) {\n const warnings = manifestPropFindings(json.layout, manifests)\n if (warnings.length > 0) return { success: true, surface, warnings }\n }\n return { success: true, surface }\n}\n\n/**\n * Parse Surface JSON from a string\n */\nexport function parseSurfaceJSON(jsonString: string): InterpretationResult {\n try {\n const json = JSON.parse(jsonString) as SurfaceJSON\n return interpretSurface(json)\n } catch (e) {\n return { success: false, errors: [`Invalid JSON: ${e}`] }\n }\n}\n\n// ============================================================\n// SURFACE BUILDER\n// ============================================================\n\n/**\n * Surface builder for programmatic construction\n */\nexport class SurfaceBuilder {\n private _id: string\n private _version = '1.0.0'\n private _environment: EnvironmentType = 'web'\n private _metadata: { name?: string; description?: string; tags?: string[] } = {}\n private _bindings: BindingJSON[] = []\n private _layout: LayoutJSON | null = null\n private _validationOptions: BlockPropsValidationOptions | false = {}\n\n constructor(id: string) {\n this._id = id\n }\n\n version(v: string): this {\n this._version = v\n return this\n }\n\n environment(env: EnvironmentType): this {\n this._environment = env\n return this\n }\n\n name(n: string): this {\n this._metadata.name = n\n return this\n }\n\n description(d: string): this {\n this._metadata.description = d\n return this\n }\n\n tags(...t: string[]): this {\n this._metadata.tags = t\n return this\n }\n\n bind(capability: string, alias?: string): this {\n const binding: BindingJSON = alias ? { capability, alias } : { capability }\n this._bindings.push(binding)\n return this\n }\n\n layout(l: LayoutJSON): this {\n this._layout = l\n return this\n }\n\n /**\n * Configure block props validation.\n * Pass false to disable validation entirely.\n */\n validation(options: BlockPropsValidationOptions | false): this {\n this._validationOptions = options\n return this\n }\n\n build(): InterpretationResult {\n if (!this._layout) {\n return { success: false, errors: ['Surface must have a layout'] }\n }\n\n const json: SurfaceJSON = {\n id: this._id,\n version: this._version,\n environment: this._environment,\n metadata: this._metadata,\n bindings: this._bindings,\n layout: this._layout,\n }\n\n return interpretSurface(json, { validation: this._validationOptions })\n }\n}\n\n/**\n * Create a surface builder\n */\nexport function surface(id: string): SurfaceBuilder {\n return new SurfaceBuilder(id)\n}\n\n// ============================================================\n// RENDER CONTEXT CREATION\n// ============================================================\n\n/**\n * Create a render context for an interpreted surface\n */\nexport function createSurfaceContext(\n surface: InterpretedSurface,\n data?: Record<string, unknown>\n): RenderContext {\n return createRenderContext({\n surfaceId: surface.id,\n bindings: surface.bindings,\n data: data ?? {},\n })\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout System
|
|
3
|
+
*
|
|
4
|
+
* Slot and layout resolution for surfaces
|
|
5
|
+
*
|
|
6
|
+
* The layout system handles:
|
|
7
|
+
* - Slot resolution (named slots with fallback content)
|
|
8
|
+
* - Layout composition (nesting surfaces)
|
|
9
|
+
* - Conditional rendering
|
|
10
|
+
* - Loop expansion
|
|
11
|
+
*
|
|
12
|
+
* @module @pwfabric/runtime/surface/layout
|
|
13
|
+
*/
|
|
14
|
+
import type { RenderNode, RenderContext, LayoutJSON } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Layout resolution result
|
|
17
|
+
*/
|
|
18
|
+
export type LayoutResult = {
|
|
19
|
+
readonly success: true;
|
|
20
|
+
readonly nodes: readonly RenderNode[];
|
|
21
|
+
} | {
|
|
22
|
+
readonly success: false;
|
|
23
|
+
readonly error: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a layout definition into render nodes
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveLayout(layout: LayoutJSON, context: RenderContext): LayoutResult;
|
|
29
|
+
/**
|
|
30
|
+
* Create a slot map from slot content
|
|
31
|
+
*/
|
|
32
|
+
export declare function createSlotMap(slots: Record<string, readonly RenderNode[]>): Map<string, readonly RenderNode[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Extract slots from children based on slot attribute
|
|
35
|
+
*/
|
|
36
|
+
export declare function extractSlots(children: readonly RenderNode[]): {
|
|
37
|
+
default: readonly RenderNode[];
|
|
38
|
+
named: Map<string, readonly RenderNode[]>;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Compose multiple layouts into one
|
|
42
|
+
*/
|
|
43
|
+
export declare function composeLayouts(layouts: readonly LayoutJSON[], context: RenderContext): LayoutResult;
|
|
44
|
+
/**
|
|
45
|
+
* Wrap nodes in a container
|
|
46
|
+
*/
|
|
47
|
+
export declare function wrapInContainer(nodes: readonly RenderNode[], props?: Record<string, unknown>): RenderNode;
|
|
48
|
+
/**
|
|
49
|
+
* Validate a layout definition
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateLayout(layout: LayoutJSON): {
|
|
52
|
+
valid: boolean;
|
|
53
|
+
errors: string[];
|
|
54
|
+
};
|