@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,219 @@
|
|
|
1
|
+
import type { EntityQuery } from '../entity/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Data Capability Types
|
|
4
|
+
*
|
|
5
|
+
* Data source resolution, fetch integration, and data binding for surfaces
|
|
6
|
+
*
|
|
7
|
+
* @module @pwfabric/runtime/data/types
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Supported data source kinds
|
|
11
|
+
*/
|
|
12
|
+
export type DataSourceKind = 'rest' | 'graphql' | 'static' | 'state' | 'computed';
|
|
13
|
+
/**
|
|
14
|
+
* Data source definition for capability resolution
|
|
15
|
+
*/
|
|
16
|
+
export interface DataSourceDefinition<T = unknown> {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly kind: DataSourceKind;
|
|
19
|
+
readonly name?: string;
|
|
20
|
+
readonly endpoint?: string;
|
|
21
|
+
readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
22
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
23
|
+
readonly staticData?: T;
|
|
24
|
+
readonly stateKey?: string;
|
|
25
|
+
readonly compute?: (context: DataResolveContext) => T | Promise<T>;
|
|
26
|
+
readonly transform?: (raw: unknown) => T;
|
|
27
|
+
readonly cache?: DataCacheConfig;
|
|
28
|
+
readonly retry?: DataRetryConfig;
|
|
29
|
+
/**
|
|
30
|
+
* the identity this source is called WITH, by name.
|
|
31
|
+
*
|
|
32
|
+
* Without it a `rest` source cannot read authenticated data at all — 403
|
|
33
|
+
* anonymous, 401 without a bearer, CORS-blocked with cookies — so the only
|
|
34
|
+
* answer to "read this API as me" would be to write an engine. Named here,
|
|
35
|
+
* the data path attaches that identity's LIVE token at call time.
|
|
36
|
+
*
|
|
37
|
+
* A NAME, NEVER A VALUE. The ref is resolved per call against the running
|
|
38
|
+
* app's auth bridge; no token is stored on the source and none is serialised
|
|
39
|
+
* into a published bundle.
|
|
40
|
+
*/
|
|
41
|
+
readonly authProviderRef?: string;
|
|
42
|
+
/**
|
|
43
|
+
* The response property holding the list — `data`, `products`, or absent
|
|
44
|
+
* when the body IS the array. Dotted paths allowed for a nested one.
|
|
45
|
+
*/
|
|
46
|
+
readonly returns?: string;
|
|
47
|
+
/**
|
|
48
|
+
* The source's own filter / sort / pagination, applied to the rows AFTER the
|
|
49
|
+
* fetch. A REST endpoint does not speak the platform's query language — a
|
|
50
|
+
* declared engine's foreign API answers 400 to `filter=` — so the query is
|
|
51
|
+
* never sent; it is applied here, once, the same way for every kind.
|
|
52
|
+
*/
|
|
53
|
+
readonly query?: EntityQuery;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Cache configuration for data sources
|
|
57
|
+
*/
|
|
58
|
+
export interface DataCacheConfig {
|
|
59
|
+
readonly enabled: boolean;
|
|
60
|
+
readonly ttl?: number;
|
|
61
|
+
readonly key?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Retry configuration for data sources
|
|
65
|
+
*/
|
|
66
|
+
export interface DataRetryConfig {
|
|
67
|
+
readonly maxAttempts: number;
|
|
68
|
+
readonly baseDelay: number;
|
|
69
|
+
readonly exponentialBackoff?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Context provided during data resolution
|
|
73
|
+
*/
|
|
74
|
+
export interface DataResolveContext {
|
|
75
|
+
readonly params: Readonly<Record<string, unknown>>;
|
|
76
|
+
readonly signal?: AbortSignal;
|
|
77
|
+
readonly getState?: (key: string) => unknown;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Options for fetching data
|
|
81
|
+
*/
|
|
82
|
+
export interface DataFetchOptions {
|
|
83
|
+
readonly params?: Readonly<Record<string, unknown>>;
|
|
84
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
85
|
+
readonly body?: unknown;
|
|
86
|
+
/**
|
|
87
|
+
* Overrides the source's own method for this call — a form writing to a
|
|
88
|
+
* source it also reads from. The source declares how it is READ; a write is
|
|
89
|
+
* a different verb against the same address.
|
|
90
|
+
*/
|
|
91
|
+
readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
92
|
+
/**
|
|
93
|
+
* Address ONE record of the collection the source reads: the request goes
|
|
94
|
+
* to `<endpoint>/<recordId>`. A form updating the row it loaded needs this;
|
|
95
|
+
* a PATCH to the collection path is a request nobody answers.
|
|
96
|
+
*/
|
|
97
|
+
readonly recordId?: string;
|
|
98
|
+
readonly signal?: AbortSignal;
|
|
99
|
+
readonly skipCache?: boolean;
|
|
100
|
+
readonly timeout?: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Result of a data fetch operation
|
|
104
|
+
*/
|
|
105
|
+
export type DataFetchResult<T> = {
|
|
106
|
+
readonly success: true;
|
|
107
|
+
readonly data: T;
|
|
108
|
+
readonly metadata: DataFetchMetadata;
|
|
109
|
+
} | {
|
|
110
|
+
readonly success: false;
|
|
111
|
+
readonly error: DataFetchError;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Metadata about a successful data fetch
|
|
115
|
+
*/
|
|
116
|
+
export interface DataFetchMetadata {
|
|
117
|
+
readonly duration: number;
|
|
118
|
+
readonly fromCache: boolean;
|
|
119
|
+
/** HTTP status of a `rest` / `graphql` answer. */
|
|
120
|
+
readonly status?: number;
|
|
121
|
+
readonly timestamp: number;
|
|
122
|
+
/**
|
|
123
|
+
* The rest of the response body when `returns` plucked the list out of it —
|
|
124
|
+
* DummyJSON's `{ products, total, skip, limit }` gives
|
|
125
|
+
* `{ total, skip, limit }`. Without it a paginated list could not know how
|
|
126
|
+
* many rows exist. Absent when there is no `returns` or the body is not an
|
|
127
|
+
* object.
|
|
128
|
+
*/
|
|
129
|
+
readonly envelope?: Readonly<Record<string, unknown>>;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Error from a data fetch operation
|
|
133
|
+
*/
|
|
134
|
+
export interface DataFetchError {
|
|
135
|
+
readonly type: 'network' | 'timeout' | 'validation' | 'transform' | 'not_found' | 'unknown';
|
|
136
|
+
/**
|
|
137
|
+
* The server's own message when its refusal carried one
|
|
138
|
+
* (`{ error: { code, message } }`), else the HTTP status line.
|
|
139
|
+
*/
|
|
140
|
+
readonly message: string;
|
|
141
|
+
readonly status?: number;
|
|
142
|
+
/** The server's error code (`NOT_FOUND`, `VALIDATION_FAILED`, …) when it sent one. */
|
|
143
|
+
readonly code?: string;
|
|
144
|
+
readonly cause?: unknown;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Binding between a data source and a surface element
|
|
148
|
+
*/
|
|
149
|
+
export interface DataBinding<T = unknown> {
|
|
150
|
+
readonly id: string;
|
|
151
|
+
readonly sourceId: string;
|
|
152
|
+
readonly targetPath: string;
|
|
153
|
+
readonly transform?: (data: T) => unknown;
|
|
154
|
+
readonly autoRefresh?: boolean;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Data binding state
|
|
158
|
+
*/
|
|
159
|
+
export type DataBindingState = 'idle' | 'loading' | 'loaded' | 'error' | 'stale';
|
|
160
|
+
/**
|
|
161
|
+
* Live data binding with current state and subscription
|
|
162
|
+
*/
|
|
163
|
+
export interface LiveDataBinding<T = unknown> {
|
|
164
|
+
readonly binding: DataBinding<T>;
|
|
165
|
+
readonly state: DataBindingState;
|
|
166
|
+
readonly data: T | undefined;
|
|
167
|
+
readonly error: DataFetchError | undefined;
|
|
168
|
+
refresh(): Promise<DataFetchResult<T>>;
|
|
169
|
+
subscribe(listener: DataBindingListener<T>): () => void;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Listener for data binding changes
|
|
173
|
+
*/
|
|
174
|
+
export type DataBindingListener<T> = (data: T | undefined, state: DataBindingState) => void;
|
|
175
|
+
/**
|
|
176
|
+
* Configuration for DataService instances.
|
|
177
|
+
* Can be provided by the capability registry or directly.
|
|
178
|
+
*/
|
|
179
|
+
export interface DataServiceConfig {
|
|
180
|
+
readonly defaultCacheTtl?: number;
|
|
181
|
+
readonly maxRetries?: number;
|
|
182
|
+
readonly timeout?: number;
|
|
183
|
+
/**
|
|
184
|
+
* resolves the live token for a source's
|
|
185
|
+
* `authProviderRef`. Supplied by the host (the runner hands over the same
|
|
186
|
+
* PKCE bridge the engine registry is constructed with). Absent, every
|
|
187
|
+
* request goes out unauthenticated, exactly as before.
|
|
188
|
+
*/
|
|
189
|
+
readonly getAccessToken?: (ref?: string) => Promise<string | null>;
|
|
190
|
+
/**
|
|
191
|
+
* The platform's own API origin — and ONLY requests to it carry credentials.
|
|
192
|
+
*
|
|
193
|
+
* The platform store is a REST resource like any other, so it goes through
|
|
194
|
+
* the same engine; the one thing that differs is that it authenticates by
|
|
195
|
+
* cookie. `credentials` is therefore decided by origin, never by default:
|
|
196
|
+
* `'same-origin'` is what fetch does on its own, and a published app served
|
|
197
|
+
* at `<slug>.apps.example.com` calling `api.example.com` is cross-origin, so
|
|
198
|
+
* the default would silently drop the cookie. Absent, nothing is ever sent
|
|
199
|
+
* anywhere — a cookie must never leak to a third party's endpoint.
|
|
200
|
+
*/
|
|
201
|
+
readonly platformApiOrigin?: string;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Service interface for managing data sources and bindings.
|
|
205
|
+
*
|
|
206
|
+
* Renamed from DataCapability to avoid overloading "capability" —
|
|
207
|
+
* this is a service, not a registry capability declaration.
|
|
208
|
+
*/
|
|
209
|
+
export interface DataServiceInterface {
|
|
210
|
+
registerSource<T>(definition: DataSourceDefinition<T>): void;
|
|
211
|
+
resolveDataSource(sourceId: string): DataSourceDefinition | undefined;
|
|
212
|
+
hasSource(sourceId: string): boolean;
|
|
213
|
+
fetchData<T>(sourceId: string, options?: DataFetchOptions): Promise<DataFetchResult<T>>;
|
|
214
|
+
bindData<T>(binding: DataBinding<T>): LiveDataBinding<T>;
|
|
215
|
+
unregisterSource(sourceId: string): boolean;
|
|
216
|
+
getSourceIds(): readonly string[];
|
|
217
|
+
clear(): void;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConnectorAggregateResult, ConnectorQueryResult } from './connector.js';
|
|
2
|
+
import type { EntityAggregate, EntityQuery, EntityTypeId } from './types.js';
|
|
3
|
+
/** The least a source needs: `query`, and `aggregate` when it has one. */
|
|
4
|
+
export interface AggregateSource {
|
|
5
|
+
query(entityType: EntityTypeId, query: EntityQuery): Promise<ConnectorQueryResult>;
|
|
6
|
+
aggregate?(entityType: EntityTypeId, aggregate: EntityAggregate): Promise<ConnectorAggregateResult>;
|
|
7
|
+
}
|
|
8
|
+
export declare function aggregateThrough(source: AggregateSource, entityType: EntityTypeId, aggregate: EntityAggregate): Promise<ConnectorAggregateResult>;
|
|
9
|
+
//# sourceMappingURL=aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/entity/aggregate.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClF,SAAS,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;CACpG;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,YAAY,EACxB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAKnC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aggregateThrough — one number from whatever can answer.
|
|
3
|
+
*
|
|
4
|
+
* The platform connector asks the server (`HttpEntityConnector.aggregate`).
|
|
5
|
+
* Everything else — the static connector, a declared engine, a host facade
|
|
6
|
+
* that predates `resolveAggregate` — only lists. Rather than make every one
|
|
7
|
+
* of them grow an aggregate, the store and the renderer go through here: a
|
|
8
|
+
* source with `aggregate` is asked, a source without is queried with the
|
|
9
|
+
* aggregate's filter and reduced in memory (`aggregateEntities`). The
|
|
10
|
+
* fallback reduces the rows the query RETURNS — a paginated list connector
|
|
11
|
+
* counts its first page — which is why the platform path is server-side.
|
|
12
|
+
*
|
|
13
|
+
* @module @pwfabric/runtime/entity/aggregate
|
|
14
|
+
*/
|
|
15
|
+
import { aggregateEntities } from './apply-query.js';
|
|
16
|
+
export async function aggregateThrough(source, entityType, aggregate) {
|
|
17
|
+
if (typeof source.aggregate === 'function')
|
|
18
|
+
return source.aggregate(entityType, aggregate);
|
|
19
|
+
const res = await source.query(entityType, aggregate.filter ? { filter: aggregate.filter } : {});
|
|
20
|
+
if (!res.success)
|
|
21
|
+
return res;
|
|
22
|
+
return { success: true, result: aggregateEntities(res.result.items, aggregate) };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=aggregate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../src/entity/aggregate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAUpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EACvB,UAAwB,EACxB,SAA0B;IAE1B,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAC1F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChG,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,GAAG,CAAA;IAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;AAClF,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* applyEntityQuery — the ONE place an `EntityQuery` is actually applied.
|
|
3
|
+
*
|
|
4
|
+
* Engines typically read the filter only as a NAMED-PARAMETER lookup
|
|
5
|
+
* (`ctx.filter('siteId')`) and apply neither `operator` nor sort/pagination,
|
|
6
|
+
* so a pattern that declared
|
|
7
|
+
* `{ filter: { field: 'isRead', operator: 'eq', value: false } }` would be
|
|
8
|
+
* silently ignored. Connectors call this on their result envelope so the
|
|
9
|
+
* declared query is honoured client-side regardless of what the upstream API
|
|
10
|
+
* supports.
|
|
11
|
+
*
|
|
12
|
+
* Semantics:
|
|
13
|
+
* - filter: one node = `field operator value`; `and[]` / `or[]` combine
|
|
14
|
+
* child nodes with the node's own test (a node with no `field` is pure
|
|
15
|
+
* combinator). Missing fields compare as `undefined`.
|
|
16
|
+
* - sort: stable multi-key; numbers/dates/strings compared natively,
|
|
17
|
+
* `null`/`undefined` last in both directions.
|
|
18
|
+
* - pagination: `{ offset, limit }` slice AFTER filter+sort; `total` is the
|
|
19
|
+
* filtered count, `hasMore` is offset+limit < total.
|
|
20
|
+
*
|
|
21
|
+
* @module @pwfabric/runtime/entity/apply-query
|
|
22
|
+
*/
|
|
23
|
+
import type { EntityAggregate, EntityAggregateResult, EntityFilter, EntityQuery, EntityQueryResult, EntitySortField } from './types.js';
|
|
24
|
+
type Row = Record<string, unknown>;
|
|
25
|
+
/** Evaluate one filter node (leaf test + and/or combinators) against a row. */
|
|
26
|
+
export declare function matchesEntityFilter(row: Row, filter: EntityFilter): boolean;
|
|
27
|
+
/** Stable multi-key sort; nullish values sort last in both directions. */
|
|
28
|
+
export declare function sortEntities<T extends Row>(items: readonly T[], sort: readonly EntitySortField[]): T[];
|
|
29
|
+
/**
|
|
30
|
+
* Every shape a sort is written in, as the one the sorter takes.
|
|
31
|
+
*
|
|
32
|
+
* WHY: the contract says `sort: EntitySortField[]`, but pages and models write
|
|
33
|
+
* a single object far more often: `{ field: 'date', direction: 'asc' }`. It
|
|
34
|
+
* has no `length`, so the old `query.sort.length > 0` test read it as "no
|
|
35
|
+
* sort" and the list came back in storage order, silently. Accepted now:
|
|
36
|
+
*
|
|
37
|
+
* [{ field, direction }] the contract shape (invalid entries dropped)
|
|
38
|
+
* { field, direction? } one sort key
|
|
39
|
+
* { date: 'desc', title: 'asc' } a field → direction map, in key order
|
|
40
|
+
* 'date' | '-date' a field name, `-` for descending
|
|
41
|
+
*
|
|
42
|
+
* A missing or unknown direction reads as ascending. Anything else is no sort.
|
|
43
|
+
*/
|
|
44
|
+
export declare function normalizeEntitySort(sort: unknown): EntitySortField[];
|
|
45
|
+
/**
|
|
46
|
+
* Reduce an in-memory list to ONE NUMBER — the client half of what the
|
|
47
|
+
* platform's `/count` and `/aggregate` routes do server-side, for connectors
|
|
48
|
+
* that only list. `filter` narrows first; `count` is the kept rows; the rest
|
|
49
|
+
* read `field` as a number (a numeric string counts, nullish/NaN is skipped)
|
|
50
|
+
* and answer `null` when nothing was numeric.
|
|
51
|
+
*/
|
|
52
|
+
export declare function aggregateEntities(items: readonly Row[], aggregate: EntityAggregate): EntityAggregateResult;
|
|
53
|
+
/**
|
|
54
|
+
* Apply filter → sort → pagination to an in-memory list and return the
|
|
55
|
+
* paginated envelope. An empty/undefined query returns everything.
|
|
56
|
+
*/
|
|
57
|
+
export declare function applyEntityQuery<T extends Row>(items: readonly T[], query: EntityQuery | undefined): EntityQueryResult<T>;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=apply-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-query.d.ts","sourceRoot":"","sources":["../../src/entity/apply-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA+GlC,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAc3E;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,CAAC,EAAE,CAmBtG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAwBpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,GAAG,qBAAqB,CA0B1G;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAC5C,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,WAAW,GAAG,SAAS,GAC7B,iBAAiB,CAAC,CAAC,CAAC,CAatB"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
function readField(row, field) {
|
|
2
|
+
if (field in row)
|
|
3
|
+
return row[field];
|
|
4
|
+
// dotted path (`owner.displayName`)
|
|
5
|
+
let cur = row;
|
|
6
|
+
for (const part of field.split('.')) {
|
|
7
|
+
if (cur === null || cur === undefined || typeof cur !== 'object')
|
|
8
|
+
return undefined;
|
|
9
|
+
cur = cur[part];
|
|
10
|
+
}
|
|
11
|
+
return cur;
|
|
12
|
+
}
|
|
13
|
+
function toComparable(v) {
|
|
14
|
+
if (v === null || v === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (typeof v === 'number' || typeof v === 'string')
|
|
17
|
+
return v;
|
|
18
|
+
if (typeof v === 'boolean')
|
|
19
|
+
return v ? 1 : 0;
|
|
20
|
+
if (v instanceof Date)
|
|
21
|
+
return v.getTime();
|
|
22
|
+
return String(v);
|
|
23
|
+
}
|
|
24
|
+
/** Loose equality for filter values: `'3' eq 3`, `true eq 'true'`, dates by time. */
|
|
25
|
+
function looseEq(a, b) {
|
|
26
|
+
if (a === b)
|
|
27
|
+
return true;
|
|
28
|
+
if (a === null || a === undefined || b === null || b === undefined)
|
|
29
|
+
return false;
|
|
30
|
+
if (a instanceof Date || b instanceof Date) {
|
|
31
|
+
const ta = a instanceof Date ? a.getTime() : new Date(String(a)).getTime();
|
|
32
|
+
const tb = b instanceof Date ? b.getTime() : new Date(String(b)).getTime();
|
|
33
|
+
return Number.isFinite(ta) && ta === tb;
|
|
34
|
+
}
|
|
35
|
+
if (typeof a === 'object' || typeof b === 'object')
|
|
36
|
+
return false;
|
|
37
|
+
return String(a) === String(b);
|
|
38
|
+
}
|
|
39
|
+
/** A string that is a number and nothing else — `"95"`, `"-3.5"`, `"1e3"`; not `""`, not a date. */
|
|
40
|
+
const NUMERIC = /^\s*[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?\s*$/i;
|
|
41
|
+
/** The number a comparable reads as, or undefined when it is not number-looking. */
|
|
42
|
+
function numericValue(v) {
|
|
43
|
+
if (typeof v === 'number')
|
|
44
|
+
return Number.isFinite(v) ? v : undefined;
|
|
45
|
+
if (!NUMERIC.test(v))
|
|
46
|
+
return undefined;
|
|
47
|
+
const n = Number(v);
|
|
48
|
+
return Number.isFinite(n) ? n : undefined;
|
|
49
|
+
}
|
|
50
|
+
function compareOrdered(a, b) {
|
|
51
|
+
const ca = toComparable(a);
|
|
52
|
+
const cb = toComparable(b);
|
|
53
|
+
if (ca === undefined || cb === undefined)
|
|
54
|
+
return undefined;
|
|
55
|
+
if (typeof ca === 'number' && typeof cb === 'number')
|
|
56
|
+
return ca - cb;
|
|
57
|
+
// A number-looking string is a number here. A form saves what was typed, so
|
|
58
|
+
// `price` is "95" on one row and 100 on the next; compared as strings
|
|
59
|
+
// "95" > "100", and `price gt 100` would keep the cheaper item.
|
|
60
|
+
//
|
|
61
|
+
// TOTAL ORDER: number-looking values are one class, compared
|
|
62
|
+
// numerically, and sort BEFORE every other value; the rest (ISO dates,
|
|
63
|
+
// text) compare as strings. Comparing a number with text as text made a
|
|
64
|
+
// cycle on a mixed column ("2" < "10" < "1a" < "2") and the sort order
|
|
65
|
+
// depended on the input. Note: "007" reads as 7 — leading-zero codes sort
|
|
66
|
+
// numerically and tie their unpadded value.
|
|
67
|
+
const na = numericValue(ca);
|
|
68
|
+
const nb = numericValue(cb);
|
|
69
|
+
if (na !== undefined && nb !== undefined)
|
|
70
|
+
return na - nb;
|
|
71
|
+
if (na !== undefined)
|
|
72
|
+
return -1;
|
|
73
|
+
if (nb !== undefined)
|
|
74
|
+
return 1;
|
|
75
|
+
// ISO date strings compare correctly as strings; text compares as text
|
|
76
|
+
const sa = String(ca);
|
|
77
|
+
const sb = String(cb);
|
|
78
|
+
return sa < sb ? -1 : sa > sb ? 1 : 0;
|
|
79
|
+
}
|
|
80
|
+
function testLeaf(actual, operator, expected) {
|
|
81
|
+
switch (operator) {
|
|
82
|
+
case 'eq':
|
|
83
|
+
return looseEq(actual, expected);
|
|
84
|
+
case 'neq':
|
|
85
|
+
return !looseEq(actual, expected);
|
|
86
|
+
case 'gt': {
|
|
87
|
+
const c = compareOrdered(actual, expected);
|
|
88
|
+
return c !== undefined && c > 0;
|
|
89
|
+
}
|
|
90
|
+
case 'gte': {
|
|
91
|
+
const c = compareOrdered(actual, expected);
|
|
92
|
+
return c !== undefined && c >= 0;
|
|
93
|
+
}
|
|
94
|
+
case 'lt': {
|
|
95
|
+
const c = compareOrdered(actual, expected);
|
|
96
|
+
return c !== undefined && c < 0;
|
|
97
|
+
}
|
|
98
|
+
case 'lte': {
|
|
99
|
+
const c = compareOrdered(actual, expected);
|
|
100
|
+
return c !== undefined && c <= 0;
|
|
101
|
+
}
|
|
102
|
+
case 'in': {
|
|
103
|
+
const set = Array.isArray(expected) ? expected : [expected];
|
|
104
|
+
return set.some((e) => looseEq(actual, e));
|
|
105
|
+
}
|
|
106
|
+
case 'contains': {
|
|
107
|
+
if (Array.isArray(actual))
|
|
108
|
+
return actual.some((x) => looseEq(x, expected));
|
|
109
|
+
if (actual === null || actual === undefined)
|
|
110
|
+
return false;
|
|
111
|
+
return String(actual).toLowerCase().includes(String(expected).toLowerCase());
|
|
112
|
+
}
|
|
113
|
+
case 'startsWith': {
|
|
114
|
+
if (actual === null || actual === undefined)
|
|
115
|
+
return false;
|
|
116
|
+
return String(actual).toLowerCase().startsWith(String(expected).toLowerCase());
|
|
117
|
+
}
|
|
118
|
+
default:
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Evaluate one filter node (leaf test + and/or combinators) against a row. */
|
|
123
|
+
export function matchesEntityFilter(row, filter) {
|
|
124
|
+
// A leaf needs something to compare against. Every operator in the union
|
|
125
|
+
// takes a value, so `value: undefined` is not a constraint the author wrote —
|
|
126
|
+
// it is a control with no selection (see resolveQueryState) — and a node
|
|
127
|
+
// without a constraint matches, rather than eliminating every row.
|
|
128
|
+
const hasLeaf = typeof filter.field === 'string' &&
|
|
129
|
+
filter.field !== '' &&
|
|
130
|
+
filter.operator !== undefined &&
|
|
131
|
+
filter.value !== undefined;
|
|
132
|
+
const leaf = hasLeaf ? testLeaf(readField(row, filter.field), filter.operator, filter.value) : true;
|
|
133
|
+
const andOk = filter.and && filter.and.length > 0 ? filter.and.every((f) => matchesEntityFilter(row, f)) : true;
|
|
134
|
+
const orOk = filter.or && filter.or.length > 0 ? filter.or.some((f) => matchesEntityFilter(row, f)) : true;
|
|
135
|
+
return leaf && andOk && orOk;
|
|
136
|
+
}
|
|
137
|
+
/** Stable multi-key sort; nullish values sort last in both directions. */
|
|
138
|
+
export function sortEntities(items, sort) {
|
|
139
|
+
if (sort.length === 0)
|
|
140
|
+
return [...items];
|
|
141
|
+
return items
|
|
142
|
+
.map((item, index) => ({ item, index }))
|
|
143
|
+
.sort((a, b) => {
|
|
144
|
+
for (const s of sort) {
|
|
145
|
+
const va = readField(a.item, s.field);
|
|
146
|
+
const vb = readField(b.item, s.field);
|
|
147
|
+
const na = va === null || va === undefined;
|
|
148
|
+
const nb = vb === null || vb === undefined;
|
|
149
|
+
if (na && nb)
|
|
150
|
+
continue;
|
|
151
|
+
if (na)
|
|
152
|
+
return 1;
|
|
153
|
+
if (nb)
|
|
154
|
+
return -1;
|
|
155
|
+
const c = compareOrdered(va, vb) ?? 0;
|
|
156
|
+
if (c !== 0)
|
|
157
|
+
return s.direction === 'desc' ? -c : c;
|
|
158
|
+
}
|
|
159
|
+
return a.index - b.index;
|
|
160
|
+
})
|
|
161
|
+
.map((x) => x.item);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Every shape a sort is written in, as the one the sorter takes.
|
|
165
|
+
*
|
|
166
|
+
* WHY: the contract says `sort: EntitySortField[]`, but pages and models write
|
|
167
|
+
* a single object far more often: `{ field: 'date', direction: 'asc' }`. It
|
|
168
|
+
* has no `length`, so the old `query.sort.length > 0` test read it as "no
|
|
169
|
+
* sort" and the list came back in storage order, silently. Accepted now:
|
|
170
|
+
*
|
|
171
|
+
* [{ field, direction }] the contract shape (invalid entries dropped)
|
|
172
|
+
* { field, direction? } one sort key
|
|
173
|
+
* { date: 'desc', title: 'asc' } a field → direction map, in key order
|
|
174
|
+
* 'date' | '-date' a field name, `-` for descending
|
|
175
|
+
*
|
|
176
|
+
* A missing or unknown direction reads as ascending. Anything else is no sort.
|
|
177
|
+
*/
|
|
178
|
+
export function normalizeEntitySort(sort) {
|
|
179
|
+
const dir = (d) => typeof d === 'string' && d.toLowerCase() === 'desc' ? 'desc' : 'asc';
|
|
180
|
+
const one = (s) => {
|
|
181
|
+
if (typeof s === 'string') {
|
|
182
|
+
const t = s.trim();
|
|
183
|
+
if (!t || t === '-')
|
|
184
|
+
return null;
|
|
185
|
+
return t.startsWith('-') ? { field: t.slice(1), direction: 'desc' } : { field: t, direction: 'asc' };
|
|
186
|
+
}
|
|
187
|
+
if (s && typeof s === 'object' && !Array.isArray(s)) {
|
|
188
|
+
const o = s;
|
|
189
|
+
if (typeof o['field'] === 'string' && o['field'])
|
|
190
|
+
return { field: o['field'], direction: dir(o['direction']) };
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
};
|
|
194
|
+
if (Array.isArray(sort))
|
|
195
|
+
return sort.map(one).filter((s) => s !== null);
|
|
196
|
+
const single = one(sort);
|
|
197
|
+
if (single)
|
|
198
|
+
return [single];
|
|
199
|
+
if (sort && typeof sort === 'object') {
|
|
200
|
+
return Object.entries(sort)
|
|
201
|
+
.filter(([field, d]) => field.length > 0 && typeof d === 'string')
|
|
202
|
+
.map(([field, d]) => ({ field, direction: dir(d) }));
|
|
203
|
+
}
|
|
204
|
+
return [];
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Reduce an in-memory list to ONE NUMBER — the client half of what the
|
|
208
|
+
* platform's `/count` and `/aggregate` routes do server-side, for connectors
|
|
209
|
+
* that only list. `filter` narrows first; `count` is the kept rows; the rest
|
|
210
|
+
* read `field` as a number (a numeric string counts, nullish/NaN is skipped)
|
|
211
|
+
* and answer `null` when nothing was numeric.
|
|
212
|
+
*/
|
|
213
|
+
export function aggregateEntities(items, aggregate) {
|
|
214
|
+
const filter = aggregate.filter;
|
|
215
|
+
const rows = filter ? items.filter((r) => matchesEntityFilter(r, filter)) : items;
|
|
216
|
+
const base = { fn: aggregate.fn, ...(aggregate.field ? { field: aggregate.field } : {}), count: rows.length };
|
|
217
|
+
if (aggregate.fn === 'count')
|
|
218
|
+
return { ...base, value: rows.length };
|
|
219
|
+
if (!aggregate.field)
|
|
220
|
+
return { ...base, value: null };
|
|
221
|
+
const field = aggregate.field;
|
|
222
|
+
const nums = [];
|
|
223
|
+
for (const r of rows) {
|
|
224
|
+
const v = readField(r, field);
|
|
225
|
+
if (v === null || v === undefined || v === '')
|
|
226
|
+
continue;
|
|
227
|
+
const n = typeof v === 'number' ? v : Number(v);
|
|
228
|
+
if (Number.isFinite(n))
|
|
229
|
+
nums.push(n);
|
|
230
|
+
}
|
|
231
|
+
if (nums.length === 0)
|
|
232
|
+
return { ...base, value: null };
|
|
233
|
+
// A loop, never a spread: `Math.x(...nums)` overflows the argument limit
|
|
234
|
+
// on the large in-memory lists this path exists for.
|
|
235
|
+
const sum = nums.reduce((a, b) => a + b, 0);
|
|
236
|
+
switch (aggregate.fn) {
|
|
237
|
+
case 'sum':
|
|
238
|
+
return { ...base, value: sum };
|
|
239
|
+
case 'avg':
|
|
240
|
+
return { ...base, value: sum / nums.length };
|
|
241
|
+
default:
|
|
242
|
+
return { ...base, value: null };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Apply filter → sort → pagination to an in-memory list and return the
|
|
247
|
+
* paginated envelope. An empty/undefined query returns everything.
|
|
248
|
+
*/
|
|
249
|
+
export function applyEntityQuery(items, query) {
|
|
250
|
+
let out = [...items];
|
|
251
|
+
if (query?.filter) {
|
|
252
|
+
const f = query.filter;
|
|
253
|
+
out = out.filter((row) => matchesEntityFilter(row, f));
|
|
254
|
+
}
|
|
255
|
+
const sort = normalizeEntitySort(query?.sort);
|
|
256
|
+
if (sort.length > 0)
|
|
257
|
+
out = sortEntities(out, sort);
|
|
258
|
+
const total = out.length;
|
|
259
|
+
const offset = Math.max(0, query?.pagination?.offset ?? 0);
|
|
260
|
+
const limit = query?.pagination?.limit !== undefined ? Math.max(0, query.pagination.limit) : total;
|
|
261
|
+
const page = query?.pagination ? out.slice(offset, offset + limit) : out;
|
|
262
|
+
return { items: page, total, offset, limit, hasMore: offset + page.length < total };
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=apply-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-query.js","sourceRoot":"","sources":["../../src/entity/apply-query.ts"],"names":[],"mappings":"AAiCA,SAAS,SAAS,CAAC,GAAQ,EAAE,KAAa;IACxC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;IACnC,oCAAoC;IACpC,IAAI,GAAG,GAAY,GAAG,CAAA;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAA;QAClF,GAAG,GAAI,GAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAA;IAC5D,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC;AAED,qFAAqF;AACrF,SAAS,OAAO,CAAC,CAAU,EAAE,CAAU;IACrC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAChF,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAC1E,MAAM,EAAE,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAC1E,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;IACzC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAChE,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,oGAAoG;AACpG,MAAM,OAAO,GAAG,6CAA6C,CAAA;AAE7D,oFAAoF;AACpF,SAAS,YAAY,CAAC,CAAkB;IACtC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,CAAU,EAAE,CAAU;IAC5C,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;IAC1B,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1D,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,CAAA;IACpE,4EAA4E;IAC5E,sEAAsE;IACtE,gEAAgE;IAChE,EAAE;IACF,6DAA6D;IAC7D,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;IAC3B,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,CAAA;IACxD,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,CAAA;IAC/B,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC9B,uEAAuE;IACvE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IACrB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,QAAQ,CAAC,MAAe,EAAE,QAAkC,EAAE,QAAiB;IACtF,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClC,KAAK,KAAK;YACR,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACnC,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YAC3D,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;YAC1E,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAA;YACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;QAC9E,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAA;YACzD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;QAChF,CAAC;QACD;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,GAAQ,EAAE,MAAoB;IAChE,yEAAyE;IACzE,8EAA8E;IAC9E,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAChC,MAAM,CAAC,KAAK,KAAK,EAAE;QACnB,MAAM,CAAC,QAAQ,KAAK,SAAS;QAC7B,MAAM,CAAC,KAAK,KAAK,SAAS,CAAA;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACnG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/G,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1G,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAgB,KAAmB,EAAE,IAAgC;IAC/F,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;IACxC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,CAAA;YAC1C,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,CAAA;YAC1C,IAAI,EAAE,IAAI,EAAE;gBAAE,SAAQ;YACtB,IAAI,EAAE;gBAAE,OAAO,CAAC,CAAA;YAChB,IAAI,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAA;YACjB,MAAM,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;IAC1B,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,MAAM,GAAG,GAAG,CAAC,CAAU,EAAkB,EAAE,CACzC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IACtE,MAAM,GAAG,GAAG,CAAC,CAAU,EAA0B,EAAE;QACjD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;YAClB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAA;YAChC,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QACtG,CAAC;QACD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,CAA4B,CAAA;YACtC,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAA;QAChH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IAC7F,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;IACxB,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC;aACnD,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;aACjE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAqB,EAAE,SAA0B;IACjF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACjF,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IAC7G,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACpE,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;YAAE,SAAQ;QACvD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACtD,yEAAyE;IACzE,qDAAqD;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,QAAQ,SAAS,CAAC,EAAE,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;QAChC,KAAK,KAAK;YACR,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC9C;YACE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACnC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAmB,EACnB,KAA8B;IAE9B,IAAI,GAAG,GAAQ,CAAC,GAAG,KAAK,CAAC,CAAA;IACzB,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;QACtB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAA;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;IAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,UAAU,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAClG,MAAM,IAAI,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACxE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAA;AACrF,CAAC"}
|