@pwfabric/runtime 0.0.0-stage → 1.0.0-rc.0
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 +13 -2
- package/dist/__tests__/dom-test-setup.d.ts +21 -0
- package/dist/__tests__/dom-test-setup.d.ts.map +1 -0
- package/dist/__tests__/dom-test-setup.js +36 -0
- package/dist/__tests__/dom-test-setup.js.map +1 -0
- package/dist/a11y/announcer.d.ts +66 -0
- package/dist/a11y/announcer.d.ts.map +1 -0
- package/dist/a11y/announcer.js +140 -0
- package/dist/a11y/announcer.js.map +1 -0
- package/dist/a11y/contrast.d.ts +55 -0
- package/dist/a11y/contrast.d.ts.map +1 -0
- package/dist/a11y/contrast.js +93 -0
- package/dist/a11y/contrast.js.map +1 -0
- package/dist/a11y/focus.d.ts +124 -0
- package/dist/a11y/focus.d.ts.map +1 -0
- package/dist/a11y/focus.js +282 -0
- package/dist/a11y/focus.js.map +1 -0
- package/dist/a11y/index.d.ts +22 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/index.js +18 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/a11y/keyboard.d.ts +145 -0
- package/dist/a11y/keyboard.d.ts.map +1 -0
- package/dist/a11y/keyboard.js +317 -0
- package/dist/a11y/keyboard.js.map +1 -0
- package/dist/adapters/default-image.d.ts +26 -0
- package/dist/adapters/default-image.d.ts.map +1 -0
- package/dist/adapters/default-image.js +37 -0
- package/dist/adapters/default-image.js.map +1 -0
- package/dist/adapters/index.d.ts +28 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +28 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/next-image.d.ts +39 -0
- package/dist/adapters/next-image.d.ts.map +1 -0
- package/dist/adapters/next-image.js +124 -0
- package/dist/adapters/next-image.js.map +1 -0
- package/dist/adapters/types.d.ts +62 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +11 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/analytics/index.d.ts +15 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +15 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +66 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +251 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/analytics/types.d.ts +131 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +11 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/auth/index.d.ts +16 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/provider.d.ts +133 -0
- package/dist/auth/provider.d.ts.map +1 -0
- package/dist/auth/provider.js +473 -0
- package/dist/auth/provider.js.map +1 -0
- package/dist/auth/types.d.ts +118 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +9 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/binding/collection.d.ts +191 -0
- package/dist/binding/collection.d.ts.map +1 -0
- package/dist/binding/collection.js +358 -0
- package/dist/binding/collection.js.map +1 -0
- package/dist/binding/datasource.d.ts +320 -0
- package/dist/binding/datasource.d.ts.map +1 -0
- package/dist/binding/datasource.js +556 -0
- package/dist/binding/datasource.js.map +1 -0
- package/dist/binding/engine.d.ts +66 -0
- package/dist/binding/engine.d.ts.map +1 -0
- package/dist/binding/engine.js +268 -0
- package/dist/binding/engine.js.map +1 -0
- package/dist/binding/expression.d.ts +151 -0
- package/dist/binding/expression.d.ts.map +1 -0
- package/dist/binding/expression.js +787 -0
- package/dist/binding/expression.js.map +1 -0
- package/dist/binding/index.d.ts +20 -0
- package/dist/binding/index.d.ts.map +1 -0
- package/dist/binding/index.js +14 -0
- package/dist/binding/index.js.map +1 -0
- package/dist/binding/two-way.d.ts +150 -0
- package/dist/binding/two-way.d.ts.map +1 -0
- package/dist/binding/two-way.js +462 -0
- package/dist/binding/two-way.js.map +1 -0
- package/dist/binding/types.d.ts +120 -0
- package/dist/binding/types.d.ts.map +1 -0
- package/dist/binding/types.js +9 -0
- package/dist/binding/types.js.map +1 -0
- package/dist/blocks/__test-fixtures__/block-fixtures.d.ts +40 -0
- package/dist/blocks/__test-fixtures__/block-fixtures.d.ts.map +1 -0
- package/dist/blocks/__test-fixtures__/block-fixtures.js +506 -0
- package/dist/blocks/__test-fixtures__/block-fixtures.js.map +1 -0
- package/dist/blocks/component-types.d.ts +82 -0
- package/dist/blocks/component-types.d.ts.map +1 -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 +169 -0
- package/dist/blocks/composition-rules.d.ts.map +1 -0
- package/dist/blocks/composition-rules.js +391 -0
- package/dist/blocks/composition-rules.js.map +1 -0
- package/dist/blocks/hooks.d.ts +32 -0
- package/dist/blocks/hooks.d.ts.map +1 -0
- package/dist/blocks/hooks.js +42 -0
- package/dist/blocks/hooks.js.map +1 -0
- package/dist/blocks/index.d.ts +16 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +24 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/registry.d.ts +85 -0
- package/dist/blocks/registry.d.ts.map +1 -0
- package/dist/blocks/registry.js +136 -0
- package/dist/blocks/registry.js.map +1 -0
- package/dist/blocks/rule-engine.d.ts +132 -0
- package/dist/blocks/rule-engine.d.ts.map +1 -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 +14 -0
- package/dist/blocks/surface-event-context.d.ts.map +1 -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 +14 -0
- package/dist/blocks/surface-id-context.d.ts.map +1 -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 +42 -0
- package/dist/bus.d.ts.map +1 -0
- package/dist/bus.js +158 -0
- package/dist/bus.js.map +1 -0
- package/dist/cache/index.d.ts +10 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +10 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory.d.ts +33 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +138 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/types.d.ts +63 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +9 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/capability/index.d.ts +73 -0
- package/dist/capability/index.d.ts.map +1 -0
- package/dist/capability/index.js +87 -0
- package/dist/capability/index.js.map +1 -0
- package/dist/capability/kernel-capabilities.d.ts +32 -0
- package/dist/capability/kernel-capabilities.d.ts.map +1 -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 +72 -0
- package/dist/capability/platform-capabilities.d.ts.map +1 -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 +71 -0
- package/dist/capability/type-mapping.d.ts.map +1 -0
- package/dist/capability/type-mapping.js +107 -0
- package/dist/capability/type-mapping.js.map +1 -0
- package/dist/capability/validation.d.ts +47 -0
- package/dist/capability/validation.d.ts.map +1 -0
- package/dist/capability/validation.js +54 -0
- package/dist/capability/validation.js.map +1 -0
- package/dist/connectors/declared-connector.d.ts +49 -0
- package/dist/connectors/declared-connector.d.ts.map +1 -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 +51 -0
- package/dist/connectors/engine-registry.d.ts.map +1 -0
- package/dist/connectors/engine-registry.js +135 -0
- package/dist/connectors/engine-registry.js.map +1 -0
- package/dist/connectors/index.d.ts +15 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +14 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/module-loader.d.ts +71 -0
- package/dist/connectors/module-loader.d.ts.map +1 -0
- package/dist/connectors/module-loader.js +143 -0
- package/dist/connectors/module-loader.js.map +1 -0
- package/dist/connectors/types.d.ts +175 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +23 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/context.d.ts +28 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +38 -0
- package/dist/context.js.map +1 -0
- package/dist/data/DataCapabilityProvider.d.ts +40 -0
- package/dist/data/DataCapabilityProvider.d.ts.map +1 -0
- package/dist/data/DataCapabilityProvider.js +58 -0
- package/dist/data/DataCapabilityProvider.js.map +1 -0
- package/dist/data/index.d.ts +18 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +18 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/manager.d.ts +41 -0
- package/dist/data/manager.d.ts.map +1 -0
- package/dist/data/manager.js +442 -0
- package/dist/data/manager.js.map +1 -0
- package/dist/data/types.d.ts +219 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +2 -0
- package/dist/data/types.js.map +1 -0
- package/dist/entity/aggregate.d.ts +9 -0
- package/dist/entity/aggregate.d.ts.map +1 -0
- package/dist/entity/aggregate.js +24 -0
- package/dist/entity/aggregate.js.map +1 -0
- package/dist/entity/apply-query.d.ts +59 -0
- package/dist/entity/apply-query.d.ts.map +1 -0
- package/dist/entity/apply-query.js +264 -0
- package/dist/entity/apply-query.js.map +1 -0
- package/dist/entity/behavior.d.ts +95 -0
- package/dist/entity/behavior.d.ts.map +1 -0
- package/dist/entity/behavior.js +78 -0
- package/dist/entity/behavior.js.map +1 -0
- package/dist/entity/connector.d.ts +142 -0
- package/dist/entity/connector.d.ts.map +1 -0
- package/dist/entity/connector.js +89 -0
- package/dist/entity/connector.js.map +1 -0
- package/dist/entity/connectors/index.d.ts +13 -0
- package/dist/entity/connectors/index.d.ts.map +1 -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 +52 -0
- package/dist/entity/connectors/static.d.ts.map +1 -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 +51 -0
- package/dist/entity/entity-datasource.d.ts.map +1 -0
- package/dist/entity/entity-datasource.js +33 -0
- package/dist/entity/entity-datasource.js.map +1 -0
- package/dist/entity/facade.d.ts +71 -0
- package/dist/entity/facade.d.ts.map +1 -0
- package/dist/entity/facade.js +70 -0
- package/dist/entity/facade.js.map +1 -0
- package/dist/entity/http-connector.d.ts +124 -0
- package/dist/entity/http-connector.d.ts.map +1 -0
- package/dist/entity/http-connector.js +295 -0
- package/dist/entity/http-connector.js.map +1 -0
- package/dist/entity/index.d.ts +39 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +31 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/postgres-connector.d.ts +65 -0
- package/dist/entity/postgres-connector.d.ts.map +1 -0
- package/dist/entity/postgres-connector.js +239 -0
- package/dist/entity/postgres-connector.js.map +1 -0
- package/dist/entity/registry.d.ts +60 -0
- package/dist/entity/registry.d.ts.map +1 -0
- package/dist/entity/registry.js +90 -0
- package/dist/entity/registry.js.map +1 -0
- package/dist/entity/store.d.ts +67 -0
- package/dist/entity/store.d.ts.map +1 -0
- package/dist/entity/store.js +349 -0
- package/dist/entity/store.js.map +1 -0
- package/dist/entity/types.d.ts +181 -0
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +10 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/execution-context.d.ts +89 -0
- package/dist/execution-context.d.ts.map +1 -0
- package/dist/execution-context.js +146 -0
- package/dist/execution-context.js.map +1 -0
- package/dist/executor.d.ts +28 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +33 -0
- package/dist/executor.js.map +1 -0
- package/dist/forms/form-entity-bridge.d.ts +95 -0
- package/dist/forms/form-entity-bridge.d.ts.map +1 -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 +35 -0
- package/dist/forms/form-write-target.d.ts.map +1 -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 +23 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +25 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/named-control-values.d.ts +28 -0
- package/dist/forms/named-control-values.d.ts.map +1 -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 +56 -0
- package/dist/forms/processor.d.ts.map +1 -0
- package/dist/forms/processor.js +154 -0
- package/dist/forms/processor.js.map +1 -0
- package/dist/forms/types.d.ts +175 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/forms/types.js +33 -0
- package/dist/forms/types.js.map +1 -0
- package/dist/forms/validator.d.ts +62 -0
- package/dist/forms/validator.d.ts.map +1 -0
- package/dist/forms/validator.js +218 -0
- package/dist/forms/validator.js.map +1 -0
- package/dist/graph/index.d.ts +11 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +9 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/resolver.d.ts +67 -0
- package/dist/graph/resolver.d.ts.map +1 -0
- package/dist/graph/resolver.js +243 -0
- package/dist/graph/resolver.js.map +1 -0
- package/dist/graph/types.d.ts +126 -0
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +9 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/hooks/useInstalledAtoms.d.ts +97 -0
- package/dist/hooks/useInstalledAtoms.d.ts.map +1 -0
- package/dist/hooks/useInstalledAtoms.js +92 -0
- package/dist/hooks/useInstalledAtoms.js.map +1 -0
- package/dist/i18n/index.d.ts +16 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +14 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translator.d.ts +77 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/i18n/translator.js +357 -0
- package/dist/i18n/translator.js.map +1 -0
- package/dist/i18n/types.d.ts +94 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +9 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.d.ts +48 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +258 -0
- package/dist/kernel.js.map +1 -0
- package/dist/perf/budget.d.ts +93 -0
- package/dist/perf/budget.d.ts.map +1 -0
- package/dist/perf/budget.js +122 -0
- package/dist/perf/budget.js.map +1 -0
- package/dist/perf/index.d.ts +17 -0
- package/dist/perf/index.d.ts.map +1 -0
- package/dist/perf/index.js +13 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/render-timer.d.ts +91 -0
- package/dist/perf/render-timer.d.ts.map +1 -0
- package/dist/perf/render-timer.js +136 -0
- package/dist/perf/render-timer.js.map +1 -0
- package/dist/perf/reporter.d.ts +127 -0
- package/dist/perf/reporter.d.ts.map +1 -0
- package/dist/perf/reporter.js +241 -0
- package/dist/perf/reporter.js.map +1 -0
- package/dist/perf/web-vitals.d.ts +112 -0
- package/dist/perf/web-vitals.d.ts.map +1 -0
- package/dist/perf/web-vitals.js +268 -0
- package/dist/perf/web-vitals.js.map +1 -0
- package/dist/registry.d.ts +64 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +126 -0
- package/dist/registry.js.map +1 -0
- package/dist/render/BehaviorSurfaceProvider.d.ts +66 -0
- package/dist/render/BehaviorSurfaceProvider.d.ts.map +1 -0
- package/dist/render/BehaviorSurfaceProvider.js +185 -0
- package/dist/render/BehaviorSurfaceProvider.js.map +1 -0
- package/dist/render/BlockErrorBoundary.d.ts +27 -0
- package/dist/render/BlockErrorBoundary.d.ts.map +1 -0
- package/dist/render/BlockErrorBoundary.js +41 -0
- package/dist/render/BlockErrorBoundary.js.map +1 -0
- package/dist/render/DataBoundSurfaceRenderer.d.ts +79 -0
- package/dist/render/DataBoundSurfaceRenderer.d.ts.map +1 -0
- package/dist/render/DataBoundSurfaceRenderer.js +998 -0
- package/dist/render/DataBoundSurfaceRenderer.js.map +1 -0
- package/dist/render/DynamicBlockWrapper.d.ts +24 -0
- package/dist/render/DynamicBlockWrapper.d.ts.map +1 -0
- package/dist/render/DynamicBlockWrapper.js +117 -0
- package/dist/render/DynamicBlockWrapper.js.map +1 -0
- package/dist/render/appearance-resolver.d.ts +51 -0
- package/dist/render/appearance-resolver.d.ts.map +1 -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 +70 -0
- package/dist/render/capability-gate.d.ts.map +1 -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 +42 -0
- package/dist/render/conditional-states-css.d.ts.map +1 -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 +32 -0
- package/dist/render/connections-context.d.ts.map +1 -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 +37 -0
- package/dist/render/dark-theme-css.d.ts.map +1 -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 +192 -0
- package/dist/render/data-binding-types.d.ts.map +1 -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 +31 -0
- package/dist/render/data-cache.d.ts.map +1 -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 +18 -0
- package/dist/render/derive-dark-theme.d.ts.map +1 -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 +78 -0
- package/dist/render/dynamic-artifact-context.d.ts.map +1 -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 +81 -0
- package/dist/render/dynamic-block-loader.d.ts.map +1 -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 +19 -0
- package/dist/render/endpoint.d.ts.map +1 -0
- package/dist/render/endpoint.js +109 -0
- package/dist/render/endpoint.js.map +1 -0
- package/dist/render/entity-facade-context.d.ts +35 -0
- package/dist/render/entity-facade-context.d.ts.map +1 -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 +42 -0
- package/dist/render/group-states-css.d.ts.map +1 -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 +9 -0
- package/dist/render/hooks/useSurfaceEvents.d.ts.map +1 -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 +9 -0
- package/dist/render/hooks/useSurfaceId.d.ts.map +1 -0
- package/dist/render/hooks/useSurfaceId.js +9 -0
- package/dist/render/hooks/useSurfaceId.js.map +1 -0
- package/dist/render/index.d.ts +49 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +61 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/interaction-rule-engine.d.ts +13 -0
- package/dist/render/interaction-rule-engine.d.ts.map +1 -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 +32 -0
- package/dist/render/keyframes-css.d.ts.map +1 -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 +4 -0
- package/dist/render/query-state.d.ts.map +1 -0
- package/dist/render/query-state.js +70 -0
- package/dist/render/query-state.js.map +1 -0
- package/dist/render/renderer.d.ts +45 -0
- package/dist/render/renderer.d.ts.map +1 -0
- package/dist/render/renderer.js +937 -0
- package/dist/render/renderer.js.map +1 -0
- package/dist/render/resolve-expressions.d.ts +38 -0
- package/dist/render/resolve-expressions.d.ts.map +1 -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 +43 -0
- package/dist/render/responsive-style-css.d.ts.map +1 -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 +50 -0
- package/dist/render/responsive.d.ts.map +1 -0
- package/dist/render/responsive.js +99 -0
- package/dist/render/responsive.js.map +1 -0
- package/dist/render/scoped-css.d.ts +72 -0
- package/dist/render/scoped-css.d.ts.map +1 -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 +70 -0
- package/dist/render/shell-selection.d.ts.map +1 -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 +33 -0
- package/dist/render/states-css.d.ts.map +1 -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 +19 -0
- package/dist/render/surface-data-context.d.ts.map +1 -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 +20 -0
- package/dist/render/surface-event-bus.d.ts.map +1 -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 +12 -0
- package/dist/render/surface-event-context.d.ts.map +1 -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 +9 -0
- package/dist/render/surface-id-context.d.ts.map +1 -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 +15 -0
- package/dist/render/theme-utils.d.ts.map +1 -0
- package/dist/render/theme-utils.js +15 -0
- package/dist/render/theme-utils.js.map +1 -0
- package/dist/render/types.d.ts +283 -0
- package/dist/render/types.d.ts.map +1 -0
- package/dist/render/types.js +9 -0
- package/dist/render/types.js.map +1 -0
- package/dist/render/visibility-css.d.ts +43 -0
- package/dist/render/visibility-css.d.ts.map +1 -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 +35 -0
- package/dist/render/width-scope.d.ts.map +1 -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 +34 -0
- package/dist/render/write-only-sources.d.ts.map +1 -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 +15 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +15 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/router.d.ts +43 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +218 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/types.d.ts +125 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +9 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/seo/generator.d.ts +40 -0
- package/dist/seo/generator.d.ts.map +1 -0
- package/dist/seo/generator.js +236 -0
- package/dist/seo/generator.js.map +1 -0
- package/dist/seo/index.d.ts +15 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +15 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/types.d.ts +182 -0
- package/dist/seo/types.d.ts.map +1 -0
- package/dist/seo/types.js +9 -0
- package/dist/seo/types.js.map +1 -0
- package/dist/state/index.d.ts +16 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +16 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/manager.d.ts +34 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +81 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/store.d.ts +41 -0
- package/dist/state/store.d.ts.map +1 -0
- package/dist/state/store.js +145 -0
- package/dist/state/store.js.map +1 -0
- package/dist/state/types.d.ts +108 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/surface/expression.d.ts +66 -0
- package/dist/surface/expression.d.ts.map +1 -0
- package/dist/surface/expression.js +179 -0
- package/dist/surface/expression.js.map +1 -0
- package/dist/surface/index.d.ts +33 -0
- package/dist/surface/index.d.ts.map +1 -0
- package/dist/surface/index.js +25 -0
- package/dist/surface/index.js.map +1 -0
- package/dist/surface/interpreter.d.ts +97 -0
- package/dist/surface/interpreter.d.ts.map +1 -0
- package/dist/surface/interpreter.js +231 -0
- package/dist/surface/interpreter.js.map +1 -0
- package/dist/surface/layout.d.ts +55 -0
- package/dist/surface/layout.d.ts.map +1 -0
- package/dist/surface/layout.js +288 -0
- package/dist/surface/layout.js.map +1 -0
- package/dist/surface/output.d.ts +91 -0
- package/dist/surface/output.d.ts.map +1 -0
- package/dist/surface/output.js +104 -0
- package/dist/surface/output.js.map +1 -0
- package/dist/surface/primitives.d.ts +181 -0
- package/dist/surface/primitives.d.ts.map +1 -0
- package/dist/surface/primitives.js +339 -0
- package/dist/surface/primitives.js.map +1 -0
- package/dist/surface/renderer.d.ts +97 -0
- package/dist/surface/renderer.d.ts.map +1 -0
- package/dist/surface/renderer.js +190 -0
- package/dist/surface/renderer.js.map +1 -0
- package/dist/surface/schemas.d.ts +182 -0
- package/dist/surface/schemas.d.ts.map +1 -0
- package/dist/surface/schemas.js +142 -0
- package/dist/surface/schemas.js.map +1 -0
- package/dist/surface/transforms.d.ts +145 -0
- package/dist/surface/transforms.d.ts.map +1 -0
- package/dist/surface/transforms.js +120 -0
- package/dist/surface/transforms.js.map +1 -0
- package/dist/surface/types.d.ts +161 -0
- package/dist/surface/types.d.ts.map +1 -0
- package/dist/surface/types.js +51 -0
- package/dist/surface/types.js.map +1 -0
- package/dist/surface/validation.d.ts +124 -0
- package/dist/surface/validation.d.ts.map +1 -0
- package/dist/surface/validation.js +147 -0
- package/dist/surface/validation.js.map +1 -0
- package/dist/validator.d.ts +56 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +100 -0
- package/dist/validator.js.map +1 -0
- package/package.json +105 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface Rendering Types
|
|
3
|
+
*
|
|
4
|
+
* Internal types for surface rendering pipeline
|
|
5
|
+
*
|
|
6
|
+
* @module @pwfabric/runtime/surface/types
|
|
7
|
+
*/
|
|
8
|
+
import type { CapabilityId, SurfaceId } from '@pwfabric/contracts';
|
|
9
|
+
/**
|
|
10
|
+
* Primitive types supported by the runtime
|
|
11
|
+
*/
|
|
12
|
+
export type PrimitiveType = 'text' | 'container' | 'button' | 'input' | 'image' | 'link' | 'list' | 'list-item' | 'divider' | 'spacer' | 'heading' | 'paragraph' | 'slot' | 'fragment' | 'conditional' | 'loop';
|
|
13
|
+
/**
|
|
14
|
+
* Base properties shared by all render nodes
|
|
15
|
+
*/
|
|
16
|
+
export interface BaseNodeProps {
|
|
17
|
+
readonly id?: string;
|
|
18
|
+
readonly key?: string;
|
|
19
|
+
readonly className?: string;
|
|
20
|
+
readonly style?: Record<string, string | number>;
|
|
21
|
+
readonly data?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Render node - the output of surface rendering
|
|
25
|
+
*/
|
|
26
|
+
export interface RenderNode {
|
|
27
|
+
readonly type: PrimitiveType | string;
|
|
28
|
+
readonly props: BaseNodeProps & Record<string, unknown>;
|
|
29
|
+
readonly children: readonly RenderNode[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a render node
|
|
33
|
+
*/
|
|
34
|
+
export declare function createNode(type: PrimitiveType | string, props?: BaseNodeProps & Record<string, unknown>, children?: readonly RenderNode[]): RenderNode;
|
|
35
|
+
/**
|
|
36
|
+
* Surface JSON definition (input format)
|
|
37
|
+
*/
|
|
38
|
+
export interface SurfaceJSON {
|
|
39
|
+
readonly $schema?: string;
|
|
40
|
+
readonly id: string;
|
|
41
|
+
readonly version: string;
|
|
42
|
+
readonly environment: string;
|
|
43
|
+
readonly metadata?: {
|
|
44
|
+
readonly name?: string;
|
|
45
|
+
readonly description?: string;
|
|
46
|
+
readonly tags?: readonly string[];
|
|
47
|
+
};
|
|
48
|
+
readonly bindings?: readonly BindingJSON[];
|
|
49
|
+
readonly layout: LayoutJSON;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Capability binding in JSON
|
|
53
|
+
*/
|
|
54
|
+
export interface BindingJSON {
|
|
55
|
+
readonly capability: string;
|
|
56
|
+
readonly alias?: string;
|
|
57
|
+
readonly transform?: {
|
|
58
|
+
readonly input?: Record<string, unknown>;
|
|
59
|
+
readonly output?: Record<string, unknown>;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Layout definition in JSON
|
|
64
|
+
*/
|
|
65
|
+
export interface LayoutJSON {
|
|
66
|
+
readonly type: PrimitiveType | string;
|
|
67
|
+
readonly props?: Record<string, unknown>;
|
|
68
|
+
readonly children?: readonly LayoutJSON[];
|
|
69
|
+
readonly slot?: string;
|
|
70
|
+
readonly if?: string;
|
|
71
|
+
readonly each?: {
|
|
72
|
+
readonly items: string;
|
|
73
|
+
readonly as: string;
|
|
74
|
+
readonly key?: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Context passed during rendering
|
|
79
|
+
*/
|
|
80
|
+
export interface RenderContext {
|
|
81
|
+
readonly surfaceId: SurfaceId;
|
|
82
|
+
readonly bindings: Map<string, CapabilityId>;
|
|
83
|
+
readonly data: Record<string, unknown>;
|
|
84
|
+
readonly slots: Map<string, readonly RenderNode[]>;
|
|
85
|
+
readonly parent?: RenderContext;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Create a render context
|
|
89
|
+
*/
|
|
90
|
+
export declare function createRenderContext(options: {
|
|
91
|
+
surfaceId: SurfaceId;
|
|
92
|
+
bindings?: Map<string, CapabilityId>;
|
|
93
|
+
data?: Record<string, unknown>;
|
|
94
|
+
slots?: Map<string, readonly RenderNode[]>;
|
|
95
|
+
parent?: RenderContext;
|
|
96
|
+
}): RenderContext;
|
|
97
|
+
/**
|
|
98
|
+
* Create a child context with additional data
|
|
99
|
+
*/
|
|
100
|
+
export declare function createChildContext(parent: RenderContext, additionalData: Record<string, unknown>): RenderContext;
|
|
101
|
+
/**
|
|
102
|
+
* Result of rendering a surface
|
|
103
|
+
*/
|
|
104
|
+
export type RenderResult = {
|
|
105
|
+
readonly success: true;
|
|
106
|
+
readonly output: RenderOutput;
|
|
107
|
+
} | {
|
|
108
|
+
readonly success: false;
|
|
109
|
+
readonly error: RenderError;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Render output
|
|
113
|
+
*/
|
|
114
|
+
export interface RenderOutput {
|
|
115
|
+
readonly surfaceId: SurfaceId;
|
|
116
|
+
readonly root: RenderNode;
|
|
117
|
+
readonly metadata: {
|
|
118
|
+
readonly renderTime: number;
|
|
119
|
+
readonly nodeCount: number;
|
|
120
|
+
readonly bindings: readonly string[];
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Formalized error code vocabulary for render errors
|
|
125
|
+
*/
|
|
126
|
+
export type RenderErrorCode = 'invalid_surface' | 'missing_binding' | 'layout_error' | 'slot_error' | 'expression_error';
|
|
127
|
+
/**
|
|
128
|
+
* Render error types
|
|
129
|
+
*/
|
|
130
|
+
export type RenderError = {
|
|
131
|
+
readonly type: 'invalid_surface';
|
|
132
|
+
readonly message: string;
|
|
133
|
+
readonly details?: Record<string, unknown>;
|
|
134
|
+
} | {
|
|
135
|
+
readonly type: 'missing_binding';
|
|
136
|
+
readonly binding: string;
|
|
137
|
+
readonly details?: Record<string, unknown>;
|
|
138
|
+
} | {
|
|
139
|
+
readonly type: 'layout_error';
|
|
140
|
+
readonly message: string;
|
|
141
|
+
readonly details?: Record<string, unknown>;
|
|
142
|
+
} | {
|
|
143
|
+
readonly type: 'slot_error';
|
|
144
|
+
readonly slot: string;
|
|
145
|
+
readonly message: string;
|
|
146
|
+
readonly details?: Record<string, unknown>;
|
|
147
|
+
} | {
|
|
148
|
+
readonly type: 'expression_error';
|
|
149
|
+
readonly expression: string;
|
|
150
|
+
readonly message: string;
|
|
151
|
+
readonly details?: Record<string, unknown>;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Create a successful render result
|
|
155
|
+
*/
|
|
156
|
+
export declare function renderSuccess(output: RenderOutput): RenderResult;
|
|
157
|
+
/**
|
|
158
|
+
* Create a failed render result
|
|
159
|
+
*/
|
|
160
|
+
export declare function renderError(error: RenderError): RenderResult;
|
|
161
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/surface/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Surface Rendering Types
|
|
3
|
+
*
|
|
4
|
+
* Internal types for surface rendering pipeline
|
|
5
|
+
*
|
|
6
|
+
* @module @pwfabric/runtime/surface/types
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Create a render node
|
|
10
|
+
*/
|
|
11
|
+
export function createNode(type, props = {}, children = []) {
|
|
12
|
+
return { type, props, children };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a render context
|
|
16
|
+
*/
|
|
17
|
+
export function createRenderContext(options) {
|
|
18
|
+
const result = {
|
|
19
|
+
surfaceId: options.surfaceId,
|
|
20
|
+
bindings: options.bindings ?? new Map(),
|
|
21
|
+
data: options.data ?? {},
|
|
22
|
+
slots: options.slots ?? new Map(),
|
|
23
|
+
};
|
|
24
|
+
if (options.parent) {
|
|
25
|
+
return { ...result, parent: options.parent };
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a child context with additional data
|
|
31
|
+
*/
|
|
32
|
+
export function createChildContext(parent, additionalData) {
|
|
33
|
+
return {
|
|
34
|
+
...parent,
|
|
35
|
+
data: { ...parent.data, ...additionalData },
|
|
36
|
+
parent,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a successful render result
|
|
41
|
+
*/
|
|
42
|
+
export function renderSuccess(output) {
|
|
43
|
+
return { success: true, output };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a failed render result
|
|
47
|
+
*/
|
|
48
|
+
export function renderError(error) {
|
|
49
|
+
return { success: false, error };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/surface/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiDH;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,IAA4B,EAC5B,QAAiD,EAAE,EACnD,WAAkC,EAAE;IAEpC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AAClC,CAAC;AAkED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAMnC;IACC,MAAM,MAAM,GAAkB;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE;QACvC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE;KAClC,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;IAC9C,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAqB,EACrB,cAAuC;IAEvC,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,cAAc,EAAE;QAC3C,MAAM;KACP,CAAA;AACH,CAAC;AAoED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Props Validation
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation of block props using injected Zod schemas.
|
|
5
|
+
* the legacy `blockSchemas` map is gone — production
|
|
6
|
+
* callers supply a schema map sourced from the install pipeline (per-atom
|
|
7
|
+
* `manifest.definition.props[*].jsonSchema` rebuilt into Zod). Without a
|
|
8
|
+
* schema map the validator runs in lenient mode and passes everything
|
|
9
|
+
* through.
|
|
10
|
+
*
|
|
11
|
+
* @module @pwfabric/runtime/surface/validation
|
|
12
|
+
*/
|
|
13
|
+
import type { ZodSchema } from 'zod';
|
|
14
|
+
/** Map of block type → Zod schema. Supply via options to enable strict checks. */
|
|
15
|
+
export type BlockSchemaMap = Readonly<Record<string, ZodSchema>>;
|
|
16
|
+
/**
|
|
17
|
+
* Options for block props validation
|
|
18
|
+
*/
|
|
19
|
+
export interface BlockPropsValidationOptions {
|
|
20
|
+
/**
|
|
21
|
+
* When true, unknown block types cause validation failure.
|
|
22
|
+
* When false (default), unknown block types pass through.
|
|
23
|
+
*/
|
|
24
|
+
readonly strict?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Per-block-type Zod schemas. the runtime no longer
|
|
27
|
+
* ships a built-in schema map — callers that want prop validation
|
|
28
|
+
* supply their own (typically rebuilt from
|
|
29
|
+
* each installed block manifest's `definition.props[*].jsonSchema`).
|
|
30
|
+
* Omitting the map yields lenient pass-through behaviour.
|
|
31
|
+
*/
|
|
32
|
+
readonly schemas?: BlockSchemaMap;
|
|
33
|
+
/**
|
|
34
|
+
* Per-block-type manifest props. When supplied, props a manifest
|
|
35
|
+
* does not declare and templates on `bindable: false` props are reported as
|
|
36
|
+
* WARNINGS (`manifestPropFindings`); they never fail validation.
|
|
37
|
+
*/
|
|
38
|
+
readonly manifests?: BlockManifestPropsMap;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of validating block props against the schema
|
|
42
|
+
*/
|
|
43
|
+
export interface BlockPropsValidationResult {
|
|
44
|
+
readonly valid: boolean;
|
|
45
|
+
readonly errors: readonly string[];
|
|
46
|
+
readonly coerced?: Record<string, unknown>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate block props against the known Zod schema for the given block type.
|
|
50
|
+
*
|
|
51
|
+
* - Known block types are validated against the schema from @pwfabric/core.
|
|
52
|
+
* - Unknown block types pass through in lenient mode (default) and fail in strict mode.
|
|
53
|
+
* - On success, returns coerced data (with defaults applied by Zod).
|
|
54
|
+
*/
|
|
55
|
+
export declare function validateBlockProps(type: string, props: Record<string, unknown>, options?: BlockPropsValidationOptions): BlockPropsValidationResult;
|
|
56
|
+
/**
|
|
57
|
+
* Layout node shape for recursive validation.
|
|
58
|
+
* Matches LayoutJSON structure without importing it to avoid circular deps.
|
|
59
|
+
*/
|
|
60
|
+
interface LayoutNode {
|
|
61
|
+
readonly type: string;
|
|
62
|
+
readonly props?: Record<string, unknown>;
|
|
63
|
+
readonly children?: readonly LayoutNode[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A single validation issue with path context
|
|
67
|
+
*/
|
|
68
|
+
export interface LayoutPropsIssue {
|
|
69
|
+
readonly path: string;
|
|
70
|
+
readonly type: string;
|
|
71
|
+
readonly errors: readonly string[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Validate all block props in a layout tree recursively.
|
|
75
|
+
*
|
|
76
|
+
* Returns a flat list of validation issues with path context.
|
|
77
|
+
*/
|
|
78
|
+
export declare function validateLayoutProps(layout: LayoutNode, options?: BlockPropsValidationOptions, path?: string): readonly LayoutPropsIssue[];
|
|
79
|
+
/**
|
|
80
|
+
* One prop a pack manifest declares: `manifest.definition.props[*]`. Only the
|
|
81
|
+
* two fields the check reads; a full manifest entry passes as it is.
|
|
82
|
+
*/
|
|
83
|
+
export interface ManifestPropSpec {
|
|
84
|
+
readonly name: string;
|
|
85
|
+
/** `false` = the prop takes a literal only; a `{{ }}` template is not resolved for it. */
|
|
86
|
+
readonly bindable?: boolean;
|
|
87
|
+
}
|
|
88
|
+
/** Block type → the props its manifest declares. */
|
|
89
|
+
export type BlockManifestPropsMap = Readonly<Record<string, readonly ManifestPropSpec[]>>;
|
|
90
|
+
export type ManifestPropFindingCode = 'UNKNOWN_PROP' | 'TEMPLATE_ON_UNBINDABLE';
|
|
91
|
+
/**
|
|
92
|
+
* A prop that does not match its block's manifest. Always a WARNING:
|
|
93
|
+
* existing apps carry such props and must keep rendering; a caller
|
|
94
|
+
* decides whether to show, count or (later) refuse them.
|
|
95
|
+
*/
|
|
96
|
+
export interface ManifestPropFinding {
|
|
97
|
+
readonly path: string;
|
|
98
|
+
readonly type: string;
|
|
99
|
+
readonly prop: string;
|
|
100
|
+
readonly code: ManifestPropFindingCode;
|
|
101
|
+
readonly severity: 'warning';
|
|
102
|
+
readonly message: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The props of ONE block that its manifest does not allow.
|
|
106
|
+
*
|
|
107
|
+
* WHY: a prop the manifest does not declare was
|
|
108
|
+
* accepted silently. The schema check rebuilds each prop's JSON schema into a
|
|
109
|
+
* passthrough object, so a misspelt or invented prop (`tone` on a block that
|
|
110
|
+
* has none, `paddingY` where the block reads `padding`) validated clean and
|
|
111
|
+
* did nothing on screen. And a `{{ }}` template on a `bindable: false` prop was
|
|
112
|
+
* shown to the visitor as literal braces. Both are now named.
|
|
113
|
+
*
|
|
114
|
+
* @param specs the block's declared props; `undefined` (block not in the map)
|
|
115
|
+
* yields nothing, because an unknown block type is a different finding.
|
|
116
|
+
*/
|
|
117
|
+
export declare function blockManifestPropFindings(type: string, props: Record<string, unknown> | undefined, specs: readonly ManifestPropSpec[] | undefined, path?: string): ManifestPropFinding[];
|
|
118
|
+
/**
|
|
119
|
+
* Every manifest finding in a layout tree, with path context. Blocks whose
|
|
120
|
+
* type is not in `manifests` are skipped.
|
|
121
|
+
*/
|
|
122
|
+
export declare function manifestPropFindings(layout: LayoutNode, manifests: BlockManifestPropsMap, path?: string): ManifestPropFinding[];
|
|
123
|
+
export {};
|
|
124
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/surface/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Props Validation
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation of block props using injected Zod schemas.
|
|
5
|
+
* the legacy `blockSchemas` map is gone — production
|
|
6
|
+
* callers supply a schema map sourced from the install pipeline (per-atom
|
|
7
|
+
* `manifest.definition.props[*].jsonSchema` rebuilt into Zod). Without a
|
|
8
|
+
* schema map the validator runs in lenient mode and passes everything
|
|
9
|
+
* through.
|
|
10
|
+
*
|
|
11
|
+
* @module @pwfabric/runtime/surface/validation
|
|
12
|
+
*/
|
|
13
|
+
// ============================================================
|
|
14
|
+
// VALIDATION FUNCTIONS
|
|
15
|
+
// ============================================================
|
|
16
|
+
/**
|
|
17
|
+
* Validate block props against the known Zod schema for the given block type.
|
|
18
|
+
*
|
|
19
|
+
* - Known block types are validated against the schema from @pwfabric/core.
|
|
20
|
+
* - Unknown block types pass through in lenient mode (default) and fail in strict mode.
|
|
21
|
+
* - On success, returns coerced data (with defaults applied by Zod).
|
|
22
|
+
*/
|
|
23
|
+
export function validateBlockProps(type, props, options = {}) {
|
|
24
|
+
const { strict = false, schemas } = options;
|
|
25
|
+
const schema = schemas?.[type];
|
|
26
|
+
if (!schema) {
|
|
27
|
+
if (strict) {
|
|
28
|
+
return {
|
|
29
|
+
valid: false,
|
|
30
|
+
errors: [`Unknown block type: ${type}`],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Lenient mode: unknown / unsupplied types pass through
|
|
34
|
+
return { valid: true, errors: [] };
|
|
35
|
+
}
|
|
36
|
+
const result = schema.safeParse(props);
|
|
37
|
+
if (result.success) {
|
|
38
|
+
return {
|
|
39
|
+
valid: true,
|
|
40
|
+
errors: [],
|
|
41
|
+
coerced: result.data,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
valid: false,
|
|
46
|
+
errors: result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validate all block props in a layout tree recursively.
|
|
51
|
+
*
|
|
52
|
+
* Returns a flat list of validation issues with path context.
|
|
53
|
+
*/
|
|
54
|
+
export function validateLayoutProps(layout, options = {}, path = 'root') {
|
|
55
|
+
const issues = [];
|
|
56
|
+
const result = validateBlockProps(layout.type, layout.props ?? {}, options);
|
|
57
|
+
if (!result.valid) {
|
|
58
|
+
issues.push({
|
|
59
|
+
path,
|
|
60
|
+
type: layout.type,
|
|
61
|
+
errors: result.errors,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (layout.children) {
|
|
65
|
+
for (let i = 0; i < layout.children.length; i++) {
|
|
66
|
+
const child = layout.children[i];
|
|
67
|
+
if (child) {
|
|
68
|
+
const childIssues = validateLayoutProps(child, options, `${path}.children[${i}]`);
|
|
69
|
+
issues.push(...childIssues);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return issues;
|
|
74
|
+
}
|
|
75
|
+
function carriesTemplate(value, depth = 0) {
|
|
76
|
+
if (depth > 8)
|
|
77
|
+
return false;
|
|
78
|
+
if (typeof value === 'string')
|
|
79
|
+
return value.includes('{{');
|
|
80
|
+
if (Array.isArray(value))
|
|
81
|
+
return value.some((v) => carriesTemplate(v, depth + 1));
|
|
82
|
+
if (value && typeof value === 'object') {
|
|
83
|
+
return Object.values(value).some((v) => carriesTemplate(v, depth + 1));
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The props of ONE block that its manifest does not allow.
|
|
89
|
+
*
|
|
90
|
+
* WHY: a prop the manifest does not declare was
|
|
91
|
+
* accepted silently. The schema check rebuilds each prop's JSON schema into a
|
|
92
|
+
* passthrough object, so a misspelt or invented prop (`tone` on a block that
|
|
93
|
+
* has none, `paddingY` where the block reads `padding`) validated clean and
|
|
94
|
+
* did nothing on screen. And a `{{ }}` template on a `bindable: false` prop was
|
|
95
|
+
* shown to the visitor as literal braces. Both are now named.
|
|
96
|
+
*
|
|
97
|
+
* @param specs the block's declared props; `undefined` (block not in the map)
|
|
98
|
+
* yields nothing, because an unknown block type is a different finding.
|
|
99
|
+
*/
|
|
100
|
+
export function blockManifestPropFindings(type, props, specs, path = 'root') {
|
|
101
|
+
if (!specs || !props)
|
|
102
|
+
return [];
|
|
103
|
+
const byName = new Map(specs.map((s) => [s.name, s]));
|
|
104
|
+
const out = [];
|
|
105
|
+
for (const [prop, value] of Object.entries(props)) {
|
|
106
|
+
if (value === undefined)
|
|
107
|
+
continue;
|
|
108
|
+
const spec = byName.get(prop);
|
|
109
|
+
if (!spec) {
|
|
110
|
+
out.push({
|
|
111
|
+
path,
|
|
112
|
+
type,
|
|
113
|
+
prop,
|
|
114
|
+
code: 'UNKNOWN_PROP',
|
|
115
|
+
severity: 'warning',
|
|
116
|
+
message: `"${prop}" is not a prop of ${type}; the block ignores it.`,
|
|
117
|
+
});
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (spec.bindable === false && carriesTemplate(value)) {
|
|
121
|
+
out.push({
|
|
122
|
+
path,
|
|
123
|
+
type,
|
|
124
|
+
prop,
|
|
125
|
+
code: 'TEMPLATE_ON_UNBINDABLE',
|
|
126
|
+
severity: 'warning',
|
|
127
|
+
message: `"${prop}" on ${type} takes a literal value; its {{ }} template is shown as written.`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Every manifest finding in a layout tree, with path context. Blocks whose
|
|
135
|
+
* type is not in `manifests` are skipped.
|
|
136
|
+
*/
|
|
137
|
+
export function manifestPropFindings(layout, manifests, path = 'root') {
|
|
138
|
+
const out = blockManifestPropFindings(layout.type, layout.props, manifests[layout.type], path);
|
|
139
|
+
if (layout.children) {
|
|
140
|
+
layout.children.forEach((child, i) => {
|
|
141
|
+
if (child)
|
|
142
|
+
out.push(...manifestPropFindings(child, manifests, `${path}.children[${i}]`));
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/surface/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract Validator
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation for contracts
|
|
5
|
+
*
|
|
6
|
+
* @module @pwfabric/runtime/validator
|
|
7
|
+
*/
|
|
8
|
+
import type { Contract, Capability, ValidationResult, ValidationError } from '@pwfabric/contracts';
|
|
9
|
+
/**
|
|
10
|
+
* Contract validator interface
|
|
11
|
+
*/
|
|
12
|
+
export interface ContractValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Validate input against a contract
|
|
15
|
+
*/
|
|
16
|
+
validateInput<T>(contract: Contract<T, unknown>, data: unknown): ValidationResult<T>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate output against a contract
|
|
19
|
+
*/
|
|
20
|
+
validateOutput<T>(contract: Contract<unknown, T>, data: unknown): ValidationResult<T>;
|
|
21
|
+
/**
|
|
22
|
+
* Validate a capability's contract
|
|
23
|
+
*/
|
|
24
|
+
validateCapability(capability: Capability): ValidationResult<void>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Runtime contract validator
|
|
28
|
+
*/
|
|
29
|
+
export declare class RuntimeContractValidator implements ContractValidator {
|
|
30
|
+
validateInput<T>(contract: Contract<T, unknown>, data: unknown): ValidationResult<T>;
|
|
31
|
+
validateOutput<T>(contract: Contract<unknown, T>, data: unknown): ValidationResult<T>;
|
|
32
|
+
validateCapability(capability: Capability): ValidationResult<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a contract validator
|
|
36
|
+
*/
|
|
37
|
+
export declare function createValidator(): ContractValidator;
|
|
38
|
+
/**
|
|
39
|
+
* Validation result type guard
|
|
40
|
+
*/
|
|
41
|
+
export declare function isValidationSuccess<T>(result: ValidationResult<T>): result is {
|
|
42
|
+
success: true;
|
|
43
|
+
data: T;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Validation result type guard for errors
|
|
47
|
+
*/
|
|
48
|
+
export declare function isValidationFailure<T>(result: ValidationResult<T>): result is {
|
|
49
|
+
success: false;
|
|
50
|
+
error: ValidationError[];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Format validation errors as a string
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatValidationErrors(errors: ValidationError[]): string;
|
|
56
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAOlG;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAEpF;;OAEG;IACH,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAErF;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;CACnE;AAMD;;GAEG;AACH,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAepF,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAerF,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC;CAmDnE;AAMD;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC1B,MAAM,IAAI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAEtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC1B,MAAM,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,eAAe,EAAE,CAAA;CAAE,CAExD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAOxE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract Validator
|
|
3
|
+
*
|
|
4
|
+
* Runtime validation for contracts
|
|
5
|
+
*
|
|
6
|
+
* @module @pwfabric/runtime/validator
|
|
7
|
+
*/
|
|
8
|
+
import { ok, err, validationError } from '@pwfabric/contracts';
|
|
9
|
+
// ============================================================
|
|
10
|
+
// RUNTIME VALIDATOR IMPLEMENTATION
|
|
11
|
+
// ============================================================
|
|
12
|
+
/**
|
|
13
|
+
* Runtime contract validator
|
|
14
|
+
*/
|
|
15
|
+
export class RuntimeContractValidator {
|
|
16
|
+
validateInput(contract, data) {
|
|
17
|
+
try {
|
|
18
|
+
return contract.validateInput(data);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const errors = [
|
|
22
|
+
validationError([], error instanceof Error ? error.message : 'Unknown validation error', 'validation_error'),
|
|
23
|
+
];
|
|
24
|
+
return err(errors);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
validateOutput(contract, data) {
|
|
28
|
+
try {
|
|
29
|
+
return contract.validateOutput(data);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const errors = [
|
|
33
|
+
validationError([], error instanceof Error ? error.message : 'Unknown validation error', 'validation_error'),
|
|
34
|
+
];
|
|
35
|
+
return err(errors);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
validateCapability(capability) {
|
|
39
|
+
const errors = [];
|
|
40
|
+
// Validate capability has required fields
|
|
41
|
+
if (!capability.id) {
|
|
42
|
+
errors.push(validationError(['id'], 'Capability ID is required', 'required'));
|
|
43
|
+
}
|
|
44
|
+
if (!capability.version) {
|
|
45
|
+
errors.push(validationError(['version'], 'Capability version is required', 'required'));
|
|
46
|
+
}
|
|
47
|
+
if (!capability.contract) {
|
|
48
|
+
errors.push(validationError(['contract'], 'Capability contract is required', 'required'));
|
|
49
|
+
}
|
|
50
|
+
if (!capability.execute) {
|
|
51
|
+
errors.push(validationError(['execute'], 'Capability execute function is required', 'required'));
|
|
52
|
+
}
|
|
53
|
+
// Validate contract exists and has required methods
|
|
54
|
+
if (capability.contract) {
|
|
55
|
+
if (!capability.contract.validateInput) {
|
|
56
|
+
errors.push(validationError(['contract', 'validateInput'], 'Contract validateInput method is required', 'required'));
|
|
57
|
+
}
|
|
58
|
+
if (!capability.contract.validateOutput) {
|
|
59
|
+
errors.push(validationError(['contract', 'validateOutput'], 'Contract validateOutput method is required', 'required'));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (errors.length > 0) {
|
|
63
|
+
return err(errors);
|
|
64
|
+
}
|
|
65
|
+
return ok(undefined);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ============================================================
|
|
69
|
+
// VALIDATION UTILITIES
|
|
70
|
+
// ============================================================
|
|
71
|
+
/**
|
|
72
|
+
* Create a contract validator
|
|
73
|
+
*/
|
|
74
|
+
export function createValidator() {
|
|
75
|
+
return new RuntimeContractValidator();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validation result type guard
|
|
79
|
+
*/
|
|
80
|
+
export function isValidationSuccess(result) {
|
|
81
|
+
return result.success === true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validation result type guard for errors
|
|
85
|
+
*/
|
|
86
|
+
export function isValidationFailure(result) {
|
|
87
|
+
return result.success === false;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Format validation errors as a string
|
|
91
|
+
*/
|
|
92
|
+
export function formatValidationErrors(errors) {
|
|
93
|
+
return errors
|
|
94
|
+
.map((e) => {
|
|
95
|
+
const path = e.path.length > 0 ? `${e.path.join('.')}: ` : '';
|
|
96
|
+
return `${path}${e.message} (${e.code})`;
|
|
97
|
+
})
|
|
98
|
+
.join('\n');
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=validator.js.map
|