@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
package/dist/index.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @pwfabric/runtime
|
|
3
|
+
*
|
|
4
|
+
* Runtime and execution engine for the PWFabric platform.
|
|
5
|
+
*
|
|
6
|
+
* Runtime spine implementation
|
|
7
|
+
* Surface rendering pipeline, layout system, primitives
|
|
8
|
+
* Binding engine, auth, cache, graph resolver
|
|
9
|
+
*
|
|
10
|
+
* @module @pwfabric/runtime
|
|
11
|
+
*/
|
|
12
|
+
// Re-export contracts for convenience
|
|
13
|
+
export * from '@pwfabric/contracts';
|
|
14
|
+
// Fabric kernel
|
|
15
|
+
export { FabricKernel, createFabric } from './kernel.js';
|
|
16
|
+
// Capability registry
|
|
17
|
+
export { InMemoryCapabilityRegistry, createRegistry } from './registry.js';
|
|
18
|
+
// Contract validator
|
|
19
|
+
export { RuntimeContractValidator, createValidator, isValidationSuccess, isValidationFailure, formatValidationErrors, } from './validator.js';
|
|
20
|
+
// Event bus
|
|
21
|
+
export { InMemoryEventBus, createEventBus, createFabricEvent } from './bus.js';
|
|
22
|
+
// Execution context
|
|
23
|
+
export { RuntimeExecutionContext, ConsoleExecutionLogger, NoOpExecutionLogger, createExecutionContext, generateTraceId, generateSpanId, } from './execution-context.js';
|
|
24
|
+
// Legacy exports (for backward compatibility)
|
|
25
|
+
export * from './context.js';
|
|
26
|
+
export * from './executor.js';
|
|
27
|
+
// Surface rendering pipeline
|
|
28
|
+
export * from './surface/index.js';
|
|
29
|
+
// Binding, cache, graph
|
|
30
|
+
export * from './binding/index.js';
|
|
31
|
+
export * from './cache/index.js';
|
|
32
|
+
export * from './graph/index.js';
|
|
33
|
+
// Auth is intentionally NOT part of the default export: it holds the
|
|
34
|
+
// MSAL/API-key providers, and pulling them into the default barrel would make
|
|
35
|
+
// every consumer of `.` — including `@pwfabric/embed`'s browser-facing IIFE
|
|
36
|
+
// build — carry them along. Available explicitly via `@pwfabric/runtime/auth`.
|
|
37
|
+
// State and forms capabilities
|
|
38
|
+
export * from './state/index.js';
|
|
39
|
+
export * from './forms/index.js';
|
|
40
|
+
// Entity system
|
|
41
|
+
export * from './entity/index.js';
|
|
42
|
+
// Connector engine loading + registry (platform-side
|
|
43
|
+
// execution of CONNECTOR/PROVIDER atom engines)
|
|
44
|
+
export * from './connectors/index.js';
|
|
45
|
+
export { SurfaceConnectionsContext, useSurfaceConnections } from './render/index.js';
|
|
46
|
+
export { EntitlementProvider, useEntitlements, GatedBlockPlaceholder } from './render/index.js';
|
|
47
|
+
export { BlockModuleLoader, DynamicBlockWrapper, DynamicArtifactProvider, preloadDynamicBlocks, useDynamicBlocks, useDynamicStarters, } from './render/index.js';
|
|
48
|
+
// Block Error Boundary (crash isolation)
|
|
49
|
+
export { BlockErrorBoundary } from './render/index.js';
|
|
50
|
+
export { dataSourceCacheKey } from './render/index.js';
|
|
51
|
+
// Surface event protocol
|
|
52
|
+
export { createSurfaceEventBus } from './render/index.js';
|
|
53
|
+
export { SurfaceEventContext } from './render/index.js';
|
|
54
|
+
export { useSurfaceEvents } from './render/index.js';
|
|
55
|
+
export { BehaviorSurfaceProvider } from './render/index.js';
|
|
56
|
+
export { SurfaceIdContext } from './render/index.js';
|
|
57
|
+
export { useSurfaceId } from './render/index.js';
|
|
58
|
+
export { ShellSelectionContext, ShellSelectionProvider, createShellSelectionStore, useShellSelection, } from './render/index.js';
|
|
59
|
+
// Image Adapters
|
|
60
|
+
export { DefaultImageAdapter, NextImageAdapter } from './adapters/index.js';
|
|
61
|
+
export { SurfaceRenderer as BlockSurfaceRenderer, BlockRenderer, getBlockIds, findBlockById, updateBlockById, DataBoundSurfaceRenderer, surfaceNeedsDataBinding, blockActionsOf, resolveEndpoint, resolveBlockExpressions, resolveString, surfaceThemeToCSS, } from './render/index.js';
|
|
62
|
+
// legacy first-party `*Block` component re-exports +
|
|
63
|
+
// `defaultBlockComponents` map retired. Production rendering loads
|
|
64
|
+
// components from CDN bundles via `BlockModuleLoader`; the static
|
|
65
|
+
// component registry no longer ships from this package.
|
|
66
|
+
// Capability system (definitions, type mapping, validation)
|
|
67
|
+
export * from './capability/index.js';
|
|
68
|
+
// Data, routing, SEO, analytics, i18n capabilities
|
|
69
|
+
export * from './data/index.js';
|
|
70
|
+
export * from './routing/index.js';
|
|
71
|
+
export * from './seo/index.js';
|
|
72
|
+
export * from './analytics/index.js';
|
|
73
|
+
export * from './i18n/index.js';
|
|
74
|
+
export { WebVitalsCollector, createWebVitalsCollector, rateMetric, RenderTimer, createRenderTimer, DEFAULT_BUDGET, BudgetChecker, createBudgetChecker, PerformanceReporter, createPerformanceReporter, } from './perf/index.js';
|
|
75
|
+
export { LiveRegionAnnouncer, createAnnouncer } from './a11y/index.js';
|
|
76
|
+
export { FocusTrapManager, FocusRestorer, createSkipLink, createFocusTrap, createFocusRestorer, } from './a11y/index.js';
|
|
77
|
+
export { KeyboardNavigationManager, RovingTabIndex, createKeyboardNav, createRovingTabIndex, } from './a11y/index.js';
|
|
78
|
+
export { hexToRgb, relativeLuminance, contrastRatio, checkContrast, meetsWCAG, } from './a11y/index.js';
|
|
79
|
+
// tenant-scoped pack atom registry hook
|
|
80
|
+
export { useInstalledAtoms, } from './hooks/useInstalledAtoms.js';
|
|
81
|
+
// The engine names no tenant: a host's tenant model (plan, entitlements,
|
|
82
|
+
// storage, installations) belongs to the host.
|
|
83
|
+
//
|
|
84
|
+
// What the engine offers is the mechanism without the vocabulary: `EntitlementProvider`
|
|
85
|
+
// and `useEntitlements` in ./render/capability-gate.tsx still enforce a claim
|
|
86
|
+
// set, typed structurally as `EntitlementClaims`.
|
|
87
|
+
// canonical home for block infrastructure (registry,
|
|
88
|
+
// composition rules, rule engine, contexts, hooks, default block
|
|
89
|
+
// components, schemas, 45 first-party block defs). Subpath import
|
|
90
|
+
// `@pwfabric/runtime/blocks` is the recommended consumer entry; the root
|
|
91
|
+
// re-exports above (SurfaceEventContext / useSurfaceEvents /
|
|
92
|
+
// SurfaceIdContext / useSurfaceId / defaultBlockComponents / 21 block
|
|
93
|
+
// components) now resolve via `runtime/render/*` → `runtime/blocks/*`
|
|
94
|
+
// preserving React-context identity.
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @pwfabric/runtime\n *\n * Runtime and execution engine for the PWFabric platform.\n *\n * Runtime spine implementation\n * Surface rendering pipeline, layout system, primitives\n * Binding engine, auth, cache, graph resolver\n *\n * @module @pwfabric/runtime\n */\n\n// Re-export contracts for convenience\nexport * from '@pwfabric/contracts'\n\n// Fabric kernel\nexport { FabricKernel, createFabric } from './kernel.js'\n\n// Capability registry\nexport { type CapabilityRegistry, InMemoryCapabilityRegistry, createRegistry } from './registry.js'\n\n// Contract validator\nexport {\n type ContractValidator,\n RuntimeContractValidator,\n createValidator,\n isValidationSuccess,\n isValidationFailure,\n formatValidationErrors,\n} from './validator.js'\n\n// Event bus\nexport { InMemoryEventBus, createEventBus, createFabricEvent } from './bus.js'\n\n// Execution context\nexport {\n type InvocationHandler,\n RuntimeExecutionContext,\n ConsoleExecutionLogger,\n NoOpExecutionLogger,\n createExecutionContext,\n generateTraceId,\n generateSpanId,\n type CreateExecutionContextOptions,\n} from './execution-context.js'\n\n// Legacy exports (for backward compatibility)\nexport * from './context.js'\nexport * from './executor.js'\n\n// Surface rendering pipeline\nexport * from './surface/index.js'\n\n// Binding, cache, graph\nexport * from './binding/index.js'\nexport * from './cache/index.js'\nexport * from './graph/index.js'\n\n// Auth is intentionally NOT part of the default export: it holds the\n// MSAL/API-key providers, and pulling them into the default barrel would make\n// every consumer of `.` — including `@pwfabric/embed`'s browser-facing IIFE\n// build — carry them along. Available explicitly via `@pwfabric/runtime/auth`.\n\n// State and forms capabilities\nexport * from './state/index.js'\nexport * from './forms/index.js'\n\n// Entity system\nexport * from './entity/index.js'\n\n// Connector engine loading + registry (platform-side\n// execution of CONNECTOR/PROVIDER atom engines)\nexport * from './connectors/index.js'\nexport { SurfaceConnectionsContext, useSurfaceConnections } from './render/index.js'\n\n// Surface renderer (avoiding duplicates with surface/index.js)\nexport type {\n BlockComponentProps,\n BlockComponent,\n BlockComponentRegistry,\n CapabilityProvider,\n BlockContext,\n SurfaceEventType,\n SurfaceEvent,\n SurfaceRendererProps,\n BlockRendererProps,\n RenderableSurface,\n CapabilityType,\n ImageAdapter,\n ImageAdapterProps,\n SurfaceDataSourceKind,\n SurfaceDataSourceDefinition,\n SurfaceActionType,\n SurfaceAction,\n BlockActionProp,\n DataBoundSurface,\n DataBoundSurfaceRendererProps,\n} from './render/index.js'\n\n// Capability Gate (Entitlement enforcement)\nexport type {\n EntitlementContextValue,\n EntitlementProviderProps,\n GatedBlockPlaceholderProps,\n} from './render/index.js'\nexport { EntitlementProvider, useEntitlements, GatedBlockPlaceholder } from './render/index.js'\n\n// Dynamic Artifact Loading\nexport type {\n DynamicBlockWrapperProps,\n DynamicArtifactContextValue,\n DynamicArtifactProviderProps,\n} from './render/index.js'\nexport {\n BlockModuleLoader,\n DynamicBlockWrapper,\n DynamicArtifactProvider,\n preloadDynamicBlocks,\n useDynamicBlocks,\n useDynamicStarters,\n} from './render/index.js'\n\n// Block Error Boundary (crash isolation)\nexport { BlockErrorBoundary } from './render/index.js'\nexport { dataSourceCacheKey } from './render/index.js'\nexport type { SurfaceDataCache } from './render/index.js'\n\n// Surface event protocol\nexport { createSurfaceEventBus } from './render/index.js'\nexport { SurfaceEventContext } from './render/index.js'\nexport { useSurfaceEvents } from './render/index.js'\n\n// BehaviorSurfaceProvider — runtime surface wiring\nexport type { BehaviorSurfaceProviderProps } from './render/index.js'\nexport { BehaviorSurfaceProvider } from './render/index.js'\nexport { SurfaceIdContext } from './render/index.js'\nexport { useSurfaceId } from './render/index.js'\n\n// Shell × body: SPLIT shell selection (URL-projected), and the shell/body\n// classification the renderer lays out by.\nexport type {\n ShellSelectionStore,\n ShellSelectionOptions,\n ShellSelectionProviderProps,\n} from './render/index.js'\nexport {\n ShellSelectionContext,\n ShellSelectionProvider,\n createShellSelectionStore,\n useShellSelection,\n} from './render/index.js'\n\n// Image Adapters\nexport { DefaultImageAdapter, NextImageAdapter } from './adapters/index.js'\nexport {\n SurfaceRenderer as BlockSurfaceRenderer,\n BlockRenderer,\n getBlockIds,\n findBlockById,\n updateBlockById,\n DataBoundSurfaceRenderer,\n surfaceNeedsDataBinding,\n blockActionsOf,\n resolveEndpoint,\n resolveBlockExpressions,\n resolveString,\n surfaceThemeToCSS,\n} from './render/index.js'\n// legacy first-party `*Block` component re-exports +\n// `defaultBlockComponents` map retired. Production rendering loads\n// components from CDN bundles via `BlockModuleLoader`; the static\n// component registry no longer ships from this package.\n\n// Capability system (definitions, type mapping, validation)\nexport * from './capability/index.js'\n\n// Data, routing, SEO, analytics, i18n capabilities\nexport * from './data/index.js'\nexport * from './routing/index.js'\nexport * from './seo/index.js'\nexport * from './analytics/index.js'\nexport * from './i18n/index.js'\n\n// Performance monitoring module\nexport type {\n WebVitalName,\n WebVitalRating,\n WebVitalMetric,\n WebVitalCallback,\n WebVitalsReport,\n RenderMetrics,\n RenderTimerConfig,\n PerformanceBudget,\n BudgetViolation,\n BudgetCheckResult,\n ReportDestination,\n ReporterConfig,\n PerformanceReport,\n} from './perf/index.js'\nexport {\n WebVitalsCollector,\n createWebVitalsCollector,\n rateMetric,\n RenderTimer,\n createRenderTimer,\n DEFAULT_BUDGET,\n BudgetChecker,\n createBudgetChecker,\n PerformanceReporter,\n createPerformanceReporter,\n} from './perf/index.js'\n\n// Accessibility (a11y) module\nexport type { AnnouncementLevel, LiveRegionConfig } from './a11y/index.js'\nexport { LiveRegionAnnouncer, createAnnouncer } from './a11y/index.js'\nexport type { FocusTrapConfig } from './a11y/index.js'\nexport {\n FocusTrapManager,\n FocusRestorer,\n createSkipLink,\n createFocusTrap,\n createFocusRestorer,\n} from './a11y/index.js'\nexport type { ArrowDirection, KeyboardNavConfig } from './a11y/index.js'\nexport {\n KeyboardNavigationManager,\n RovingTabIndex,\n createKeyboardNav,\n createRovingTabIndex,\n} from './a11y/index.js'\nexport type { ContrastResult } from './a11y/index.js'\nexport {\n hexToRgb,\n relativeLuminance,\n contrastRatio,\n checkContrast,\n meetsWCAG,\n} from './a11y/index.js'\n\n// tenant-scoped pack atom registry hook\nexport {\n useInstalledAtoms,\n type InstalledAtomDescriptor,\n type InstalledAtomKind,\n type InstalledAtomsState,\n type InstalledAtomsFetcher,\n type AtomManifestPayload,\n type AtomBlockDefinitionMetadata,\n} from './hooks/useInstalledAtoms.js'\n\n// The engine names no tenant: a host's tenant model (plan, entitlements,\n// storage, installations) belongs to the host.\n//\n// What the engine offers is the mechanism without the vocabulary: `EntitlementProvider`\n// and `useEntitlements` in ./render/capability-gate.tsx still enforce a claim\n// set, typed structurally as `EntitlementClaims`.\n\n// canonical home for block infrastructure (registry,\n// composition rules, rule engine, contexts, hooks, default block\n// components, schemas, 45 first-party block defs). Subpath import\n// `@pwfabric/runtime/blocks` is the recommended consumer entry; the root\n// re-exports above (SurfaceEventContext / useSurfaceEvents /\n// SurfaceIdContext / useSurfaceId / defaultBlockComponents / 21 block\n// components) now resolve via `runtime/render/*` → `runtime/blocks/*`\n// preserving React-context identity.\n"]}
|
package/dist/kernel.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fabric Kernel
|
|
3
|
+
*
|
|
4
|
+
* Runtime kernel for fabric orchestration
|
|
5
|
+
*
|
|
6
|
+
* The Fabric Kernel is the core runtime that manages capability
|
|
7
|
+
* registration, dependency resolution, and execution lifecycle.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/kernel
|
|
10
|
+
*/
|
|
11
|
+
import type { Fabric, FabricConfig, FabricState, FabricMetadata, FabricSnapshot, FabricId, CapabilityId, Capability, RegistrationResult, Resolution, ExecutionResult, ExecutionOptions, SemanticVersion, Timestamp, EventBus } from '@pwfabric/contracts';
|
|
12
|
+
/**
|
|
13
|
+
* Fabric kernel implementation
|
|
14
|
+
*/
|
|
15
|
+
export declare class FabricKernel implements Fabric {
|
|
16
|
+
readonly id: FabricId;
|
|
17
|
+
readonly version: SemanticVersion;
|
|
18
|
+
readonly metadata: FabricMetadata;
|
|
19
|
+
readonly createdAt: Timestamp;
|
|
20
|
+
private _state;
|
|
21
|
+
private readonly registry;
|
|
22
|
+
private readonly validator;
|
|
23
|
+
private readonly eventBus;
|
|
24
|
+
private readonly config;
|
|
25
|
+
constructor(options?: FabricConfig);
|
|
26
|
+
get state(): FabricState;
|
|
27
|
+
register<C extends Capability>(capability: C): RegistrationResult<C>;
|
|
28
|
+
resolve<C extends Capability>(id: CapabilityId): Resolution<C>;
|
|
29
|
+
has(id: CapabilityId): boolean;
|
|
30
|
+
capabilities(): readonly CapabilityId[];
|
|
31
|
+
execute<TInput, TOutput>(id: CapabilityId, input: TInput, options?: ExecutionOptions): Promise<ExecutionResult<TOutput>>;
|
|
32
|
+
start(): Promise<void>;
|
|
33
|
+
shutdown(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Get a snapshot of the fabric state
|
|
36
|
+
*/
|
|
37
|
+
getSnapshot(): FabricSnapshot;
|
|
38
|
+
/**
|
|
39
|
+
* Get the event bus for subscribing to events
|
|
40
|
+
*/
|
|
41
|
+
getEventBus(): EventBus;
|
|
42
|
+
private transitionState;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a new Fabric instance
|
|
46
|
+
*/
|
|
47
|
+
export declare function createFabric(options?: FabricConfig): FabricKernel;
|
package/dist/kernel.js
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fabric Kernel
|
|
3
|
+
*
|
|
4
|
+
* Runtime kernel for fabric orchestration
|
|
5
|
+
*
|
|
6
|
+
* The Fabric Kernel is the core runtime that manages capability
|
|
7
|
+
* registration, dependency resolution, and execution lifecycle.
|
|
8
|
+
*
|
|
9
|
+
* @module @pwfabric/runtime/kernel
|
|
10
|
+
*/
|
|
11
|
+
import { fabricId, parseVersion, INITIAL_VERSION, VALID_TRANSITIONS, DEFAULT_FABRIC_CONFIG, executionOk, executionErr, } from '@pwfabric/contracts';
|
|
12
|
+
import { createRegistry } from './registry.js';
|
|
13
|
+
import { createValidator, isValidationSuccess } from './validator.js';
|
|
14
|
+
import { createEventBus, createFabricEvent } from './bus.js';
|
|
15
|
+
import { createExecutionContext } from './execution-context.js';
|
|
16
|
+
// ============================================================
|
|
17
|
+
// HELPER FUNCTIONS
|
|
18
|
+
// ============================================================
|
|
19
|
+
/**
|
|
20
|
+
* Build FabricMetadata from partial input
|
|
21
|
+
*/
|
|
22
|
+
function buildFabricMetadata(input) {
|
|
23
|
+
const result = {
|
|
24
|
+
name: input?.name ?? 'PWFabric',
|
|
25
|
+
};
|
|
26
|
+
if (input?.description !== undefined) {
|
|
27
|
+
result.description = input.description;
|
|
28
|
+
}
|
|
29
|
+
if (input?.tags !== undefined) {
|
|
30
|
+
result.tags = input.tags;
|
|
31
|
+
}
|
|
32
|
+
if (input?.environment !== undefined) {
|
|
33
|
+
result.environment = input.environment;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
// ============================================================
|
|
38
|
+
// FABRIC KERNEL IMPLEMENTATION
|
|
39
|
+
// ============================================================
|
|
40
|
+
/**
|
|
41
|
+
* Fabric kernel implementation
|
|
42
|
+
*/
|
|
43
|
+
export class FabricKernel {
|
|
44
|
+
id;
|
|
45
|
+
version;
|
|
46
|
+
metadata;
|
|
47
|
+
createdAt;
|
|
48
|
+
_state = 'initializing';
|
|
49
|
+
registry;
|
|
50
|
+
validator;
|
|
51
|
+
eventBus;
|
|
52
|
+
config;
|
|
53
|
+
constructor(options = {}) {
|
|
54
|
+
this.id = fabricId(options.id ?? `fabric_${Date.now()}`);
|
|
55
|
+
this.version = options.version
|
|
56
|
+
? (parseVersion(options.version) ?? INITIAL_VERSION)
|
|
57
|
+
: INITIAL_VERSION;
|
|
58
|
+
// Build metadata with only defined properties
|
|
59
|
+
this.metadata = buildFabricMetadata(options.metadata);
|
|
60
|
+
this.createdAt = Date.now();
|
|
61
|
+
// Build config
|
|
62
|
+
this.config = {
|
|
63
|
+
...DEFAULT_FABRIC_CONFIG,
|
|
64
|
+
...options,
|
|
65
|
+
};
|
|
66
|
+
this.registry = createRegistry();
|
|
67
|
+
this.validator = createValidator();
|
|
68
|
+
this.eventBus = createEventBus();
|
|
69
|
+
// Transition to ready
|
|
70
|
+
this.transitionState('ready');
|
|
71
|
+
// Emit creation event
|
|
72
|
+
this.eventBus.emit(createFabricEvent('fabric.created', {
|
|
73
|
+
source: { fabricId: this.id },
|
|
74
|
+
fabricId: this.id,
|
|
75
|
+
version: `${this.version.major}.${this.version.minor}.${this.version.patch}`,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
get state() {
|
|
79
|
+
return this._state;
|
|
80
|
+
}
|
|
81
|
+
register(capability) {
|
|
82
|
+
// Validate capability
|
|
83
|
+
const validationResult = this.validator.validateCapability(capability);
|
|
84
|
+
if (!isValidationSuccess(validationResult)) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: {
|
|
88
|
+
type: 'invalid_contract',
|
|
89
|
+
id: capability.id,
|
|
90
|
+
message: 'Capability validation failed',
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Register with registry
|
|
95
|
+
const result = this.registry.register(capability);
|
|
96
|
+
if (result.success) {
|
|
97
|
+
this.eventBus.emit(createFabricEvent('capability.registered', {
|
|
98
|
+
source: { fabricId: this.id, capabilityId: capability.id },
|
|
99
|
+
capabilityId: capability.id,
|
|
100
|
+
version: `${capability.version.major}.${capability.version.minor}.${capability.version.patch}`,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
resolve(id) {
|
|
106
|
+
return this.registry.resolve(id);
|
|
107
|
+
}
|
|
108
|
+
has(id) {
|
|
109
|
+
return this.registry.has(id);
|
|
110
|
+
}
|
|
111
|
+
capabilities() {
|
|
112
|
+
return this.registry.list();
|
|
113
|
+
}
|
|
114
|
+
async execute(id, input, options = {}) {
|
|
115
|
+
// Resolve capability
|
|
116
|
+
const resolution = this.resolve(id);
|
|
117
|
+
if (!resolution.found) {
|
|
118
|
+
const error = {
|
|
119
|
+
type: 'capability_not_found',
|
|
120
|
+
message: `Capability ${id} not found`,
|
|
121
|
+
capabilityId: id,
|
|
122
|
+
};
|
|
123
|
+
return executionErr(error);
|
|
124
|
+
}
|
|
125
|
+
const capability = resolution.capability;
|
|
126
|
+
// Validate input
|
|
127
|
+
const inputValidation = capability.contract.validateInput(input);
|
|
128
|
+
if (!inputValidation.success) {
|
|
129
|
+
const error = {
|
|
130
|
+
type: 'validation_error',
|
|
131
|
+
message: 'Input validation failed',
|
|
132
|
+
capabilityId: id,
|
|
133
|
+
cause: inputValidation.error,
|
|
134
|
+
};
|
|
135
|
+
return executionErr(error);
|
|
136
|
+
}
|
|
137
|
+
// Create execution context
|
|
138
|
+
const timeout = options.timeout ?? this.config.defaultTimeout;
|
|
139
|
+
const contextOptions = {
|
|
140
|
+
fabricId: this.id,
|
|
141
|
+
timeout,
|
|
142
|
+
invoker: async (capId, inp) => {
|
|
143
|
+
return this.execute(capId, inp, { timeout });
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
if (options.contextData) {
|
|
147
|
+
contextOptions.data = options.contextData;
|
|
148
|
+
}
|
|
149
|
+
const context = createExecutionContext(contextOptions);
|
|
150
|
+
// Emit execution started event
|
|
151
|
+
this.eventBus.emit(createFabricEvent('capability.invoked', {
|
|
152
|
+
source: { fabricId: this.id, capabilityId: id },
|
|
153
|
+
capabilityId: id,
|
|
154
|
+
traceId: context.traceId,
|
|
155
|
+
}));
|
|
156
|
+
const startTime = Date.now();
|
|
157
|
+
try {
|
|
158
|
+
// Execute with timeout
|
|
159
|
+
const result = await Promise.race([
|
|
160
|
+
capability.execute(inputValidation.data, context),
|
|
161
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Execution timeout')), timeout)),
|
|
162
|
+
]);
|
|
163
|
+
// Validate output
|
|
164
|
+
const outputValidation = capability.contract.validateOutput(result);
|
|
165
|
+
if (!outputValidation.success) {
|
|
166
|
+
const error = {
|
|
167
|
+
type: 'contract_violation',
|
|
168
|
+
message: 'Output validation failed',
|
|
169
|
+
capabilityId: id,
|
|
170
|
+
cause: outputValidation.error,
|
|
171
|
+
};
|
|
172
|
+
return executionErr(error);
|
|
173
|
+
}
|
|
174
|
+
const duration = Date.now() - startTime;
|
|
175
|
+
// Emit completion event
|
|
176
|
+
this.eventBus.emit(createFabricEvent('capability.completed', {
|
|
177
|
+
source: { fabricId: this.id, capabilityId: id },
|
|
178
|
+
capabilityId: id,
|
|
179
|
+
traceId: context.traceId,
|
|
180
|
+
duration,
|
|
181
|
+
}));
|
|
182
|
+
return executionOk(outputValidation.data);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
186
|
+
const executionError = {
|
|
187
|
+
type: error instanceof Error && error.message === 'Execution timeout'
|
|
188
|
+
? 'timeout'
|
|
189
|
+
: 'execution_error',
|
|
190
|
+
message: errorMessage,
|
|
191
|
+
capabilityId: id,
|
|
192
|
+
cause: error,
|
|
193
|
+
};
|
|
194
|
+
// Emit failure event
|
|
195
|
+
this.eventBus.emit(createFabricEvent('capability.failed', {
|
|
196
|
+
source: { fabricId: this.id, capabilityId: id },
|
|
197
|
+
capabilityId: id,
|
|
198
|
+
traceId: context.traceId,
|
|
199
|
+
error: errorMessage,
|
|
200
|
+
}));
|
|
201
|
+
return executionErr(executionError);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async start() {
|
|
205
|
+
this.transitionState('running');
|
|
206
|
+
this.eventBus.emit(createFabricEvent('fabric.started', {
|
|
207
|
+
source: { fabricId: this.id },
|
|
208
|
+
fabricId: this.id,
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
async shutdown() {
|
|
212
|
+
this.transitionState('stopping');
|
|
213
|
+
// Wait for any pending operations (in a real implementation)
|
|
214
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
215
|
+
this.transitionState('stopped');
|
|
216
|
+
this.eventBus.emit(createFabricEvent('fabric.stopped', {
|
|
217
|
+
source: { fabricId: this.id },
|
|
218
|
+
fabricId: this.id,
|
|
219
|
+
reason: 'graceful_shutdown',
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get a snapshot of the fabric state
|
|
224
|
+
*/
|
|
225
|
+
getSnapshot() {
|
|
226
|
+
return {
|
|
227
|
+
id: this.id,
|
|
228
|
+
version: this.version,
|
|
229
|
+
state: this._state,
|
|
230
|
+
metadata: this.metadata,
|
|
231
|
+
capabilities: this.registry.list(),
|
|
232
|
+
timestamp: Date.now(),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get the event bus for subscribing to events
|
|
237
|
+
*/
|
|
238
|
+
getEventBus() {
|
|
239
|
+
return this.eventBus;
|
|
240
|
+
}
|
|
241
|
+
transitionState(newState) {
|
|
242
|
+
const validTransitions = VALID_TRANSITIONS[this._state];
|
|
243
|
+
if (!validTransitions.includes(newState)) {
|
|
244
|
+
throw new Error(`Invalid state transition from ${this._state} to ${newState}. Valid transitions: ${validTransitions.join(', ')}`);
|
|
245
|
+
}
|
|
246
|
+
this._state = newState;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// ============================================================
|
|
250
|
+
// FACTORY FUNCTION
|
|
251
|
+
// ============================================================
|
|
252
|
+
/**
|
|
253
|
+
* Create a new Fabric instance
|
|
254
|
+
*/
|
|
255
|
+
export function createFabric(options) {
|
|
256
|
+
return new FabricKernel(options);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fabric Kernel\n *\n * Runtime kernel for fabric orchestration\n *\n * The Fabric Kernel is the core runtime that manages capability\n * registration, dependency resolution, and execution lifecycle.\n *\n * @module @pwfabric/runtime/kernel\n */\n\nimport type {\n Fabric,\n FabricConfig,\n FabricState,\n FabricMetadata,\n FabricSnapshot,\n FabricId,\n CapabilityId,\n Capability,\n RegistrationResult,\n Resolution,\n ExecutionResult,\n ExecutionOptions,\n ExecutionError,\n SemanticVersion,\n Timestamp,\n EventBus,\n} from '@pwfabric/contracts'\nimport {\n fabricId,\n parseVersion,\n INITIAL_VERSION,\n VALID_TRANSITIONS,\n DEFAULT_FABRIC_CONFIG,\n executionOk,\n executionErr,\n} from '@pwfabric/contracts'\n\nimport { createRegistry, type CapabilityRegistry } from './registry.js'\nimport { createValidator, type ContractValidator, isValidationSuccess } from './validator.js'\nimport { createEventBus, createFabricEvent } from './bus.js'\nimport { createExecutionContext } from './execution-context.js'\n\n// ============================================================\n// HELPER FUNCTIONS\n// ============================================================\n\n/**\n * Build FabricMetadata from partial input\n */\nfunction buildFabricMetadata(input?: Partial<FabricMetadata>): FabricMetadata {\n const result: {\n name: string\n description?: string\n tags?: readonly string[]\n environment?: string\n } = {\n name: input?.name ?? 'PWFabric',\n }\n if (input?.description !== undefined) {\n result.description = input.description\n }\n if (input?.tags !== undefined) {\n result.tags = input.tags\n }\n if (input?.environment !== undefined) {\n result.environment = input.environment\n }\n return result\n}\n\n// ============================================================\n// FABRIC KERNEL IMPLEMENTATION\n// ============================================================\n\n/**\n * Fabric kernel implementation\n */\nexport class FabricKernel implements Fabric {\n readonly id: FabricId\n readonly version: SemanticVersion\n readonly metadata: FabricMetadata\n readonly createdAt: Timestamp\n\n private _state: FabricState = 'initializing'\n private readonly registry: CapabilityRegistry\n private readonly validator: ContractValidator\n private readonly eventBus: EventBus\n private readonly config: Required<FabricConfig>\n\n constructor(options: FabricConfig = {}) {\n this.id = fabricId(options.id ?? `fabric_${Date.now()}`)\n this.version = options.version\n ? (parseVersion(options.version) ?? INITIAL_VERSION)\n : INITIAL_VERSION\n\n // Build metadata with only defined properties\n this.metadata = buildFabricMetadata(options.metadata)\n\n this.createdAt = Date.now()\n\n // Build config\n this.config = {\n ...DEFAULT_FABRIC_CONFIG,\n ...options,\n } as Required<FabricConfig>\n\n this.registry = createRegistry()\n this.validator = createValidator()\n this.eventBus = createEventBus()\n\n // Transition to ready\n this.transitionState('ready')\n\n // Emit creation event\n this.eventBus.emit(\n createFabricEvent('fabric.created', {\n source: { fabricId: this.id },\n fabricId: this.id,\n version: `${this.version.major}.${this.version.minor}.${this.version.patch}`,\n })\n )\n }\n\n get state(): FabricState {\n return this._state\n }\n\n register<C extends Capability>(capability: C): RegistrationResult<C> {\n // Validate capability\n const validationResult = this.validator.validateCapability(capability)\n if (!isValidationSuccess(validationResult)) {\n return {\n success: false,\n error: {\n type: 'invalid_contract',\n id: capability.id,\n message: 'Capability validation failed',\n },\n }\n }\n\n // Register with registry\n const result = this.registry.register(capability)\n\n if (result.success) {\n this.eventBus.emit(\n createFabricEvent('capability.registered', {\n source: { fabricId: this.id, capabilityId: capability.id },\n capabilityId: capability.id,\n version: `${capability.version.major}.${capability.version.minor}.${capability.version.patch}`,\n })\n )\n }\n\n return result\n }\n\n resolve<C extends Capability>(id: CapabilityId): Resolution<C> {\n return this.registry.resolve<C>(id)\n }\n\n has(id: CapabilityId): boolean {\n return this.registry.has(id)\n }\n\n capabilities(): readonly CapabilityId[] {\n return this.registry.list()\n }\n\n async execute<TInput, TOutput>(\n id: CapabilityId,\n input: TInput,\n options: ExecutionOptions = {}\n ): Promise<ExecutionResult<TOutput>> {\n // Resolve capability\n const resolution = this.resolve(id)\n if (!resolution.found) {\n const error: ExecutionError = {\n type: 'capability_not_found',\n message: `Capability ${id} not found`,\n capabilityId: id,\n }\n return executionErr(error)\n }\n\n const capability = resolution.capability as Capability<CapabilityId, TInput, TOutput>\n\n // Validate input\n const inputValidation = capability.contract.validateInput(input)\n if (!inputValidation.success) {\n const error: ExecutionError = {\n type: 'validation_error',\n message: 'Input validation failed',\n capabilityId: id,\n cause: inputValidation.error,\n }\n return executionErr(error)\n }\n\n // Create execution context\n const timeout = options.timeout ?? this.config.defaultTimeout\n const contextOptions: Parameters<typeof createExecutionContext>[0] = {\n fabricId: this.id,\n timeout,\n invoker: async <I, O>(capId: CapabilityId, inp: I) => {\n return this.execute<I, O>(capId, inp, { timeout })\n },\n }\n if (options.contextData) {\n contextOptions.data = options.contextData\n }\n const context = createExecutionContext(contextOptions)\n\n // Emit execution started event\n this.eventBus.emit(\n createFabricEvent('capability.invoked', {\n source: { fabricId: this.id, capabilityId: id },\n capabilityId: id,\n traceId: context.traceId,\n })\n )\n\n const startTime = Date.now()\n\n try {\n // Execute with timeout\n const result = await Promise.race([\n capability.execute(inputValidation.data, context),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Execution timeout')), timeout)\n ),\n ])\n\n // Validate output\n const outputValidation = capability.contract.validateOutput(result)\n if (!outputValidation.success) {\n const error: ExecutionError = {\n type: 'contract_violation',\n message: 'Output validation failed',\n capabilityId: id,\n cause: outputValidation.error,\n }\n return executionErr(error)\n }\n\n const duration = Date.now() - startTime\n\n // Emit completion event\n this.eventBus.emit(\n createFabricEvent('capability.completed', {\n source: { fabricId: this.id, capabilityId: id },\n capabilityId: id,\n traceId: context.traceId,\n duration,\n })\n )\n\n return executionOk(outputValidation.data as TOutput)\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n const executionError: ExecutionError = {\n type:\n error instanceof Error && error.message === 'Execution timeout'\n ? 'timeout'\n : 'execution_error',\n message: errorMessage,\n capabilityId: id,\n cause: error,\n }\n\n // Emit failure event\n this.eventBus.emit(\n createFabricEvent('capability.failed', {\n source: { fabricId: this.id, capabilityId: id },\n capabilityId: id,\n traceId: context.traceId,\n error: errorMessage,\n })\n )\n\n return executionErr(executionError)\n }\n }\n\n async start(): Promise<void> {\n this.transitionState('running')\n this.eventBus.emit(\n createFabricEvent('fabric.started', {\n source: { fabricId: this.id },\n fabricId: this.id,\n })\n )\n }\n\n async shutdown(): Promise<void> {\n this.transitionState('stopping')\n\n // Wait for any pending operations (in a real implementation)\n await new Promise((resolve) => setTimeout(resolve, 10))\n\n this.transitionState('stopped')\n this.eventBus.emit(\n createFabricEvent('fabric.stopped', {\n source: { fabricId: this.id },\n fabricId: this.id,\n reason: 'graceful_shutdown',\n })\n )\n }\n\n /**\n * Get a snapshot of the fabric state\n */\n getSnapshot(): FabricSnapshot {\n return {\n id: this.id,\n version: this.version,\n state: this._state,\n metadata: this.metadata,\n capabilities: this.registry.list(),\n timestamp: Date.now(),\n }\n }\n\n /**\n * Get the event bus for subscribing to events\n */\n getEventBus(): EventBus {\n return this.eventBus\n }\n\n private transitionState(newState: FabricState): void {\n const validTransitions = VALID_TRANSITIONS[this._state]\n if (!validTransitions.includes(newState)) {\n throw new Error(\n `Invalid state transition from ${this._state} to ${newState}. Valid transitions: ${validTransitions.join(', ')}`\n )\n }\n this._state = newState\n }\n}\n\n// ============================================================\n// FACTORY FUNCTION\n// ============================================================\n\n/**\n * Create a new Fabric instance\n */\nexport function createFabric(options?: FabricConfig): FabricKernel {\n return new FabricKernel(options)\n}\n"]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance Budget Enforcement
|
|
3
|
+
*
|
|
4
|
+
* Defines performance budgets based on web.dev recommendations
|
|
5
|
+
* and checks measured metrics against those budgets. Violations
|
|
6
|
+
* are reported with severity levels.
|
|
7
|
+
*
|
|
8
|
+
* @module @pwfabric/runtime/perf
|
|
9
|
+
*/
|
|
10
|
+
/** Performance budget thresholds */
|
|
11
|
+
export interface PerformanceBudget {
|
|
12
|
+
/** Max Largest Contentful Paint in ms */
|
|
13
|
+
readonly lcp?: number;
|
|
14
|
+
/** Max First Input Delay in ms */
|
|
15
|
+
readonly fid?: number;
|
|
16
|
+
/** Max Cumulative Layout Shift score */
|
|
17
|
+
readonly cls?: number;
|
|
18
|
+
/** Max First Contentful Paint in ms */
|
|
19
|
+
readonly fcp?: number;
|
|
20
|
+
/** Max Time to First Byte in ms */
|
|
21
|
+
readonly ttfb?: number;
|
|
22
|
+
/** Max bundle size in bytes */
|
|
23
|
+
readonly maxBundleSize?: number;
|
|
24
|
+
/** Max render time in ms */
|
|
25
|
+
readonly maxRenderTime?: number;
|
|
26
|
+
}
|
|
27
|
+
/** A single budget violation */
|
|
28
|
+
export interface BudgetViolation {
|
|
29
|
+
/** Metric that violated the budget */
|
|
30
|
+
readonly metric: string;
|
|
31
|
+
/** Budget threshold */
|
|
32
|
+
readonly budget: number;
|
|
33
|
+
/** Actual measured value */
|
|
34
|
+
readonly actual: number;
|
|
35
|
+
/** Severity: warning if within 20% over, error if more */
|
|
36
|
+
readonly severity: 'warning' | 'error';
|
|
37
|
+
}
|
|
38
|
+
/** Result of checking metrics against a budget */
|
|
39
|
+
export interface BudgetCheckResult {
|
|
40
|
+
/** Whether all metrics passed the budget */
|
|
41
|
+
readonly passed: boolean;
|
|
42
|
+
/** List of violations (empty if passed) */
|
|
43
|
+
readonly violations: readonly BudgetViolation[];
|
|
44
|
+
/** Timestamp when the check was performed */
|
|
45
|
+
readonly checkedAt: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Default performance budgets based on web.dev "good" thresholds.
|
|
49
|
+
*/
|
|
50
|
+
export declare const DEFAULT_BUDGET: Readonly<PerformanceBudget>;
|
|
51
|
+
/**
|
|
52
|
+
* Checks measured performance metrics against a budget.
|
|
53
|
+
*
|
|
54
|
+
* Uses default web.dev "good" thresholds unless overridden.
|
|
55
|
+
* Violations are classified as "warning" (within 20% over)
|
|
56
|
+
* or "error" (more than 20% over).
|
|
57
|
+
*/
|
|
58
|
+
export declare class BudgetChecker {
|
|
59
|
+
private budget;
|
|
60
|
+
/**
|
|
61
|
+
* @param budget - Custom budget thresholds (merged with defaults)
|
|
62
|
+
*/
|
|
63
|
+
constructor(budget?: PerformanceBudget);
|
|
64
|
+
/**
|
|
65
|
+
* Check a set of metrics against the current budget.
|
|
66
|
+
*
|
|
67
|
+
* @param metrics - Map of metric name to measured value
|
|
68
|
+
* @returns Check result with pass/fail and any violations
|
|
69
|
+
*/
|
|
70
|
+
check(metrics: Partial<Record<string, number>>): BudgetCheckResult;
|
|
71
|
+
/**
|
|
72
|
+
* Update the performance budget.
|
|
73
|
+
*
|
|
74
|
+
* Merges the provided values with the existing budget.
|
|
75
|
+
*
|
|
76
|
+
* @param budget - Partial budget to merge
|
|
77
|
+
*/
|
|
78
|
+
setBudget(budget: Partial<PerformanceBudget>): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get the current performance budget.
|
|
81
|
+
*
|
|
82
|
+
* @returns Readonly copy of the budget
|
|
83
|
+
*/
|
|
84
|
+
getBudget(): Readonly<PerformanceBudget>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a new BudgetChecker instance.
|
|
88
|
+
*
|
|
89
|
+
* @param budget - Optional custom budget thresholds
|
|
90
|
+
* @returns A new BudgetChecker
|
|
91
|
+
*/
|
|
92
|
+
export declare function createBudgetChecker(budget?: PerformanceBudget): BudgetChecker;
|