@a2ui/web_core 0.8.0 → 0.9.1-alpha.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/.tsbuildinfo +1 -0
- package/LICENSE +203 -0
- package/README.md +50 -4
- package/package.json +42 -72
- package/{dist/src → src}/v0_8/data/guards.js +13 -13
- package/src/v0_8/data/guards.test.d.ts +2 -0
- package/src/v0_8/data/guards.test.d.ts.map +1 -0
- package/src/v0_8/data/guards.test.js +174 -0
- package/src/v0_8/data/guards.test.js.map +1 -0
- package/{dist/src → src}/v0_8/data/model-processor.d.ts +1 -1
- package/{dist/src → src}/v0_8/data/model-processor.d.ts.map +1 -1
- package/{dist/src → src}/v0_8/data/model-processor.js +51 -40
- package/src/v0_8/data/model-processor.js.map +1 -0
- package/src/v0_8/data/model-processor.test.d.ts +2 -0
- package/src/v0_8/data/model-processor.test.d.ts.map +1 -0
- package/src/v0_8/data/model-processor.test.js +712 -0
- package/src/v0_8/data/model-processor.test.js.map +1 -0
- package/src/v0_8/errors.d.ts +35 -0
- package/src/v0_8/errors.d.ts.map +1 -0
- package/src/v0_8/errors.js +65 -0
- package/src/v0_8/errors.js.map +1 -0
- package/src/v0_8/events/validation-event.d.ts.map +1 -0
- package/{dist/src → src}/v0_8/events/validation-event.js.map +1 -1
- package/{dist/src → src}/v0_8/index.d.ts +35 -4
- package/{dist/src → src}/v0_8/index.d.ts.map +1 -1
- package/src/v0_8/index.js +28 -0
- package/src/v0_8/index.js.map +1 -0
- package/src/v0_8/schema/common-types.d.ts +1189 -0
- package/src/v0_8/schema/common-types.d.ts.map +1 -0
- package/src/v0_8/schema/common-types.js +381 -0
- package/src/v0_8/schema/common-types.js.map +1 -0
- package/src/v0_8/schema/server-to-client.d.ts +17949 -0
- package/src/v0_8/schema/server-to-client.d.ts.map +1 -0
- package/src/v0_8/schema/server-to-client.js +228 -0
- package/src/v0_8/schema/server-to-client.js.map +1 -0
- package/src/v0_8/schema/verify-schema.test.d.ts +17 -0
- package/src/v0_8/schema/verify-schema.test.d.ts.map +1 -0
- package/src/v0_8/schema/verify-schema.test.js +167 -0
- package/src/v0_8/schema/verify-schema.test.js.map +1 -0
- package/{dist/src → src}/v0_8/schemas/server_to_client.json +1 -1
- package/src/v0_8/schemas/server_to_client_with_standard_catalog.json +817 -787
- package/{dist/src → src}/v0_8/schemas/standard_catalog_definition.json +26 -0
- package/{dist/src → src}/v0_8/styles/behavior.js +13 -13
- package/{dist/src → src}/v0_8/styles/border.js +13 -13
- package/{dist/src → src}/v0_8/styles/colors.js +13 -13
- package/{dist/src → src}/v0_8/styles/colors.js.map +1 -1
- package/src/v0_8/styles/icons.d.ts +11 -0
- package/{dist/src → src}/v0_8/styles/icons.d.ts.map +1 -1
- package/{dist/src → src}/v0_8/styles/icons.js +17 -14
- package/{dist/src → src}/v0_8/styles/icons.js.map +1 -1
- package/src/v0_8/styles/index.js +35 -0
- package/{dist/src → src}/v0_8/styles/layout.js +13 -13
- package/{dist/src → src}/v0_8/styles/layout.js.map +1 -1
- package/src/v0_8/styles/opacity.js +24 -0
- package/src/v0_8/{events/index.ts → styles/shared.js} +3 -4
- package/src/v0_8/styles/styles.test.d.ts +2 -0
- package/src/v0_8/styles/styles.test.d.ts.map +1 -0
- package/src/v0_8/styles/styles.test.js +86 -0
- package/src/v0_8/styles/styles.test.js.map +1 -0
- package/{dist/src → src}/v0_8/styles/type.js +13 -13
- package/{dist/src → src}/v0_8/styles/utils.js +13 -13
- package/{dist/src → src}/v0_8/types/client-event.d.ts +10 -8
- package/src/v0_8/types/client-event.d.ts.map +1 -0
- package/src/v0_8/types/client-event.js +17 -0
- package/src/v0_8/types/colors.js +19 -0
- package/src/v0_8/types/components.d.ts +41 -0
- package/src/v0_8/types/components.d.ts.map +1 -0
- package/src/v0_8/types/components.js +17 -0
- package/src/v0_8/types/primitives.d.ts +9 -0
- package/src/v0_8/types/primitives.d.ts.map +1 -0
- package/src/v0_8/types/primitives.js +17 -0
- package/{dist/src → src}/v0_8/types/types.d.ts +44 -22
- package/src/v0_8/types/types.d.ts.map +1 -0
- package/src/v0_8/types/types.js +17 -0
- package/src/v0_9/basic_catalog/components/basic_components.d.ts +3359 -0
- package/src/v0_9/basic_catalog/components/basic_components.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.js +448 -0
- package/src/v0_9/basic_catalog/components/basic_components.js.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.js +46 -0
- package/src/v0_9/basic_catalog/components/basic_components.test.js.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts +38 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.js +294 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.js.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.js +126 -0
- package/src/v0_9/basic_catalog/expressions/expression_parser.test.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.d.ts +136 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.js +316 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts +2 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.js +301 -0
- package/src/v0_9/basic_catalog/functions/basic_functions.test.js.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts +930 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.js +466 -0
- package/src/v0_9/basic_catalog/functions/basic_functions_api.js.map +1 -0
- package/src/v0_9/basic_catalog/index.d.ts +5 -0
- package/src/v0_9/basic_catalog/index.d.ts.map +1 -0
- package/src/v0_9/basic_catalog/index.js +20 -0
- package/src/v0_9/basic_catalog/index.js.map +1 -0
- package/src/v0_9/catalog/function_invoker.d.ts +12 -0
- package/src/v0_9/catalog/function_invoker.d.ts.map +1 -0
- package/src/v0_9/catalog/function_invoker.js +17 -0
- package/src/v0_9/catalog/function_invoker.js.map +1 -0
- package/src/v0_9/catalog/types.d.ts +80 -0
- package/src/v0_9/catalog/types.d.ts.map +1 -0
- package/src/v0_9/catalog/types.js +68 -0
- package/src/v0_9/catalog/types.js.map +1 -0
- package/src/v0_9/catalog/types.test.d.ts +2 -0
- package/src/v0_9/catalog/types.test.d.ts.map +1 -0
- package/src/v0_9/catalog/types.test.js +89 -0
- package/src/v0_9/catalog/types.test.js.map +1 -0
- package/src/v0_9/common/events.d.ts +45 -0
- package/src/v0_9/common/events.d.ts.map +1 -0
- package/src/v0_9/common/events.js +58 -0
- package/src/v0_9/common/events.js.map +1 -0
- package/src/v0_9/common/events.test.d.ts +2 -0
- package/src/v0_9/common/events.test.d.ts.map +1 -0
- package/src/v0_9/common/events.test.js +58 -0
- package/src/v0_9/common/events.test.js.map +1 -0
- package/src/v0_9/errors.d.ts +40 -0
- package/src/v0_9/errors.d.ts.map +1 -0
- package/src/v0_9/errors.js +69 -0
- package/src/v0_9/errors.js.map +1 -0
- package/src/v0_9/index.d.ts +152 -0
- package/src/v0_9/index.d.ts.map +1 -0
- package/src/v0_9/index.js +41 -0
- package/src/v0_9/index.js.map +1 -0
- package/src/v0_9/processing/message-processor.d.ts +70 -0
- package/src/v0_9/processing/message-processor.d.ts.map +1 -0
- package/src/v0_9/processing/message-processor.js +289 -0
- package/src/v0_9/processing/message-processor.js.map +1 -0
- package/src/v0_9/processing/message-processor.test.js +547 -0
- package/src/v0_9/processing/message-processor.test.js.map +1 -0
- package/src/v0_9/reactivity/signals.d.ts +51 -0
- package/src/v0_9/reactivity/signals.d.ts.map +1 -0
- package/src/v0_9/reactivity/signals.js +17 -0
- package/src/v0_9/reactivity/signals.js.map +1 -0
- package/src/{v0_8/events/base.ts → v0_9/reactivity/signals.test.d.ts} +14 -10
- package/src/v0_9/reactivity/signals.test.d.ts.map +1 -0
- package/src/v0_9/reactivity/signals.test.js +108 -0
- package/src/v0_9/reactivity/signals.test.js.map +1 -0
- package/src/v0_9/rendering/component-context.d.ts +37 -0
- package/src/v0_9/rendering/component-context.d.ts.map +1 -0
- package/src/v0_9/rendering/component-context.js +50 -0
- package/src/v0_9/rendering/component-context.js.map +1 -0
- package/src/v0_9/rendering/component-context.test.d.ts +2 -0
- package/src/v0_9/rendering/component-context.test.d.ts.map +1 -0
- package/src/v0_9/rendering/component-context.test.js +68 -0
- package/src/v0_9/rendering/component-context.test.js.map +1 -0
- package/src/v0_9/rendering/data-context.d.ts +99 -0
- package/src/v0_9/rendering/data-context.d.ts.map +1 -0
- package/src/v0_9/rendering/data-context.js +311 -0
- package/src/v0_9/rendering/data-context.js.map +1 -0
- package/src/v0_9/rendering/data-context.test.js +379 -0
- package/src/v0_9/rendering/data-context.test.js.map +1 -0
- package/src/v0_9/rendering/generic-binder.d.ts +122 -0
- package/src/v0_9/rendering/generic-binder.d.ts.map +1 -0
- package/src/v0_9/rendering/generic-binder.js +315 -0
- package/src/v0_9/rendering/generic-binder.js.map +1 -0
- package/src/v0_9/rendering/generic-binder.test.d.ts +2 -0
- package/src/v0_9/rendering/generic-binder.test.d.ts.map +1 -0
- package/src/v0_9/rendering/generic-binder.test.js +166 -0
- package/src/v0_9/rendering/generic-binder.test.js.map +1 -0
- package/src/v0_9/schema/client-capabilities.d.ts +34 -0
- package/src/v0_9/schema/client-capabilities.d.ts.map +1 -0
- package/src/v0_9/schema/client-capabilities.js +17 -0
- package/src/v0_9/schema/client-capabilities.js.map +1 -0
- package/src/v0_9/schema/client-to-server.d.ts +208 -0
- package/src/v0_9/schema/client-to-server.d.ts.map +1 -0
- package/src/v0_9/schema/client-to-server.js +104 -0
- package/src/v0_9/schema/client-to-server.js.map +1 -0
- package/src/v0_9/schema/client-to-server.test.d.ts +2 -0
- package/src/v0_9/schema/client-to-server.test.d.ts.map +1 -0
- package/src/v0_9/schema/client-to-server.test.js +85 -0
- package/src/v0_9/schema/client-to-server.test.js.map +1 -0
- package/{dist/src → src}/v0_9/schema/common-types.d.ts +318 -88
- package/src/v0_9/schema/common-types.d.ts.map +1 -0
- package/src/v0_9/schema/common-types.js +141 -0
- package/src/v0_9/schema/common-types.js.map +1 -0
- package/src/v0_9/schema/index.d.ts +5 -0
- package/src/v0_9/schema/index.d.ts.map +1 -0
- package/src/v0_9/schema/index.js +20 -0
- package/src/v0_9/schema/index.js.map +1 -0
- package/src/v0_9/schema/server-to-client.d.ts +307 -0
- package/src/v0_9/schema/server-to-client.d.ts.map +1 -0
- package/src/v0_9/schema/server-to-client.js +92 -0
- package/src/v0_9/schema/server-to-client.js.map +1 -0
- package/src/v0_9/schema/verify-schema.test.d.ts +17 -0
- package/src/v0_9/schema/verify-schema.test.d.ts.map +1 -0
- package/src/v0_9/schema/verify-schema.test.js +174 -0
- package/src/v0_9/schema/verify-schema.test.js.map +1 -0
- package/src/v0_9/schemas/basic_catalog.json +1387 -0
- package/src/v0_9/schemas/client_capabilities.json +97 -0
- package/src/v0_9/schemas/client_data_model.json +22 -0
- package/src/v0_9/schemas/client_to_server.json +104 -0
- package/src/v0_9/schemas/client_to_server_list.json +19 -0
- package/src/v0_9/schemas/common_types.json +315 -0
- package/src/v0_9/schemas/sample.json +22 -0
- package/src/v0_9/schemas/server_capabilities.json +26 -0
- package/src/v0_9/schemas/server_to_client.json +131 -0
- package/src/v0_9/schemas/server_to_client_list.json +19 -0
- package/src/v0_9/state/component-model.d.ts +36 -0
- package/src/v0_9/state/component-model.d.ts.map +1 -0
- package/src/v0_9/state/component-model.js +65 -0
- package/src/v0_9/state/component-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/component-model.test.js +23 -0
- package/src/v0_9/state/component-model.test.js.map +1 -0
- package/src/v0_9/state/data-model.d.ts +75 -0
- package/src/v0_9/state/data-model.d.ts.map +1 -0
- package/src/v0_9/state/data-model.js +235 -0
- package/src/v0_9/state/data-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/data-model.test.js +77 -17
- package/src/v0_9/state/data-model.test.js.map +1 -0
- package/src/v0_9/state/surface-components-model.d.ts +45 -0
- package/src/v0_9/state/surface-components-model.d.ts.map +1 -0
- package/src/v0_9/state/surface-components-model.js +86 -0
- package/src/v0_9/state/surface-components-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-components-model.test.js +44 -2
- package/src/v0_9/state/surface-components-model.test.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.d.ts +28 -1
- package/src/v0_9/state/surface-group-model.d.ts.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.js +44 -1
- package/src/v0_9/state/surface-group-model.js.map +1 -0
- package/{dist/src → src}/v0_9/state/surface-group-model.test.js +47 -6
- package/src/v0_9/state/surface-group-model.test.js.map +1 -0
- package/src/v0_9/state/surface-model.d.ts +62 -0
- package/src/v0_9/state/surface-model.d.ts.map +1 -0
- package/src/v0_9/state/surface-model.js +101 -0
- package/src/v0_9/state/surface-model.js.map +1 -0
- package/src/v0_9/state/surface-model.test.js +93 -0
- package/src/v0_9/state/surface-model.test.js.map +1 -0
- package/src/v0_9/test/function_execution.spec.d.ts +17 -0
- package/src/v0_9/test/function_execution.spec.d.ts.map +1 -0
- package/src/v0_9/test/function_execution.spec.js +127 -0
- package/src/v0_9/test/function_execution.spec.js.map +1 -0
- package/src/v0_9/test/test-utils.d.ts.map +1 -0
- package/{dist/src → src}/v0_9/test/test-utils.js +15 -0
- package/src/v0_9/test/test-utils.js.map +1 -0
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/v0_8/data/model-processor.js.map +0 -1
- package/dist/src/v0_8/events/validation-event.d.ts.map +0 -1
- package/dist/src/v0_8/index.js +0 -12
- package/dist/src/v0_8/index.js.map +0 -1
- package/dist/src/v0_8/schemas/server_to_client_with_standard_catalog.json +0 -823
- package/dist/src/v0_8/styles/icons.d.ts +0 -11
- package/dist/src/v0_8/styles/index.js +0 -35
- package/dist/src/v0_8/styles/opacity.js +0 -24
- package/dist/src/v0_8/styles/shared.js +0 -17
- package/dist/src/v0_8/types/client-event.d.ts.map +0 -1
- package/dist/src/v0_8/types/client-event.js +0 -17
- package/dist/src/v0_8/types/colors.js +0 -19
- package/dist/src/v0_8/types/components.d.ts +0 -176
- package/dist/src/v0_8/types/components.d.ts.map +0 -1
- package/dist/src/v0_8/types/components.js +0 -17
- package/dist/src/v0_8/types/primitives.d.ts +0 -43
- package/dist/src/v0_8/types/primitives.d.ts.map +0 -1
- package/dist/src/v0_8/types/primitives.js +0 -17
- package/dist/src/v0_8/types/types.d.ts.map +0 -1
- package/dist/src/v0_8/types/types.js +0 -17
- package/dist/src/v0_9/catalog/types.d.ts +0 -27
- package/dist/src/v0_9/catalog/types.d.ts.map +0 -1
- package/dist/src/v0_9/catalog/types.js +0 -11
- package/dist/src/v0_9/catalog/types.js.map +0 -1
- package/dist/src/v0_9/common/events.d.ts +0 -24
- package/dist/src/v0_9/common/events.d.ts.map +0 -1
- package/dist/src/v0_9/common/events.js +0 -29
- package/dist/src/v0_9/common/events.js.map +0 -1
- package/dist/src/v0_9/index.d.ts +0 -11
- package/dist/src/v0_9/index.d.ts.map +0 -1
- package/dist/src/v0_9/index.js +0 -11
- package/dist/src/v0_9/index.js.map +0 -1
- package/dist/src/v0_9/processing/message-processor.d.ts +0 -34
- package/dist/src/v0_9/processing/message-processor.d.ts.map +0 -1
- package/dist/src/v0_9/processing/message-processor.js +0 -128
- package/dist/src/v0_9/processing/message-processor.js.map +0 -1
- package/dist/src/v0_9/processing/message-processor.test.js +0 -112
- package/dist/src/v0_9/processing/message-processor.test.js.map +0 -1
- package/dist/src/v0_9/rendering/component-context.d.ts +0 -17
- package/dist/src/v0_9/rendering/component-context.d.ts.map +0 -1
- package/dist/src/v0_9/rendering/component-context.js +0 -21
- package/dist/src/v0_9/rendering/component-context.js.map +0 -1
- package/dist/src/v0_9/rendering/data-context.d.ts +0 -37
- package/dist/src/v0_9/rendering/data-context.d.ts.map +0 -1
- package/dist/src/v0_9/rendering/data-context.js +0 -97
- package/dist/src/v0_9/rendering/data-context.js.map +0 -1
- package/dist/src/v0_9/rendering/data-context.test.js +0 -71
- package/dist/src/v0_9/rendering/data-context.test.js.map +0 -1
- package/dist/src/v0_9/schema/common-types.d.ts.map +0 -1
- package/dist/src/v0_9/schema/common-types.js +0 -92
- package/dist/src/v0_9/schema/common-types.js.map +0 -1
- package/dist/src/v0_9/schema/index.d.ts +0 -3
- package/dist/src/v0_9/schema/index.d.ts.map +0 -1
- package/dist/src/v0_9/schema/index.js +0 -3
- package/dist/src/v0_9/schema/index.js.map +0 -1
- package/dist/src/v0_9/schema/server-to-client.d.ts +0 -84
- package/dist/src/v0_9/schema/server-to-client.d.ts.map +0 -1
- package/dist/src/v0_9/schema/server-to-client.js +0 -21
- package/dist/src/v0_9/schema/server-to-client.js.map +0 -1
- package/dist/src/v0_9/state/component-model.d.ts +0 -16
- package/dist/src/v0_9/state/component-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/component-model.js +0 -24
- package/dist/src/v0_9/state/component-model.js.map +0 -1
- package/dist/src/v0_9/state/component-model.test.js.map +0 -1
- package/dist/src/v0_9/state/data-model.d.ts +0 -47
- package/dist/src/v0_9/state/data-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/data-model.js +0 -191
- package/dist/src/v0_9/state/data-model.js.map +0 -1
- package/dist/src/v0_9/state/data-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.d.ts +0 -19
- package/dist/src/v0_9/state/surface-components-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.js +0 -42
- package/dist/src/v0_9/state/surface-components-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-components-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-group-model.test.js.map +0 -1
- package/dist/src/v0_9/state/surface-model.d.ts +0 -23
- package/dist/src/v0_9/state/surface-model.d.ts.map +0 -1
- package/dist/src/v0_9/state/surface-model.js +0 -28
- package/dist/src/v0_9/state/surface-model.js.map +0 -1
- package/dist/src/v0_9/state/surface-model.test.js +0 -39
- package/dist/src/v0_9/state/surface-model.test.js.map +0 -1
- package/dist/src/v0_9/test/test-utils.d.ts.map +0 -1
- package/dist/src/v0_9/test/test-utils.js.map +0 -1
- package/src/v0_8/data/guards.ts +0 -236
- package/src/v0_8/data/model-processor.ts +0 -855
- package/src/v0_8/events/validation-event.ts +0 -66
- package/src/v0_8/index.ts +0 -12
- package/src/v0_8/styles/behavior.ts +0 -55
- package/src/v0_8/styles/border.ts +0 -42
- package/src/v0_8/styles/colors.ts +0 -100
- package/src/v0_8/styles/icons.ts +0 -60
- package/src/v0_8/styles/index.ts +0 -37
- package/src/v0_8/styles/layout.ts +0 -235
- package/src/v0_8/styles/opacity.ts +0 -24
- package/src/v0_8/styles/shared.ts +0 -17
- package/src/v0_8/styles/type.ts +0 -156
- package/src/v0_8/styles/utils.ts +0 -104
- package/src/v0_8/types/client-event.ts +0 -80
- package/src/v0_8/types/colors.ts +0 -66
- package/src/v0_8/types/components.ts +0 -213
- package/src/v0_8/types/primitives.ts +0 -60
- package/src/v0_8/types/types.ts +0 -557
- package/src/v0_9/catalog/types.ts +0 -38
- package/src/v0_9/common/events.ts +0 -44
- package/src/v0_9/index.ts +0 -12
- package/src/v0_9/processing/message-processor.test.ts +0 -133
- package/src/v0_9/processing/message-processor.ts +0 -150
- package/src/v0_9/rendering/component-context.ts +0 -36
- package/src/v0_9/rendering/data-context.test.ts +0 -85
- package/src/v0_9/rendering/data-context.ts +0 -110
- package/src/v0_9/schema/common-types.ts +0 -125
- package/src/v0_9/schema/index.ts +0 -2
- package/src/v0_9/schema/server-to-client.ts +0 -23
- package/src/v0_9/state/component-model.test.ts +0 -50
- package/src/v0_9/state/component-model.ts +0 -32
- package/src/v0_9/state/data-model.test.ts +0 -257
- package/src/v0_9/state/data-model.ts +0 -239
- package/src/v0_9/state/surface-components-model.test.ts +0 -59
- package/src/v0_9/state/surface-components-model.ts +0 -48
- package/src/v0_9/state/surface-group-model.test.ts +0 -82
- package/src/v0_9/state/surface-group-model.ts +0 -66
- package/src/v0_9/state/surface-model.test.ts +0 -44
- package/src/v0_9/state/surface-model.ts +0 -39
- package/src/v0_9/test/test-utils.ts +0 -22
- /package/{dist/src → src}/v0_8/data/guards.d.ts +0 -0
- /package/{dist/src → src}/v0_8/data/guards.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/data/guards.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/base.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/base.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/events/base.js +0 -0
- /package/{dist/src → src}/v0_8/events/base.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/index.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/index.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/events/index.js +0 -0
- /package/{dist/src → src}/v0_8/events/index.js.map +0 -0
- /package/{dist/src → src}/v0_8/events/validation-event.d.ts +0 -0
- /package/{dist/src → src}/v0_8/events/validation-event.js +0 -0
- /package/{dist/src → src}/v0_8/schemas/a2ui_client_capabilities_schema.json +0 -0
- /package/{dist/src → src}/v0_8/schemas/catalog_description_schema.json +0 -0
- /package/{dist/src → src}/v0_8/schemas/client_to_server.json +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/behavior.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/border.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/border.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/border.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/colors.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/colors.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/index.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/index.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/index.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/layout.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/layout.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/opacity.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/shared.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/type.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/type.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/type.js.map +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.d.ts +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/styles/utils.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/client-event.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/colors.d.ts +0 -0
- /package/{dist/src → src}/v0_8/types/colors.d.ts.map +0 -0
- /package/{dist/src → src}/v0_8/types/colors.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/components.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/primitives.js.map +0 -0
- /package/{dist/src → src}/v0_8/types/types.js.map +0 -0
- /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/component-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/component-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/data-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/data-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts +0 -0
- /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts.map +0 -0
- /package/{dist/src → src}/v0_9/test/test-utils.d.ts +0 -0
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import assert from 'node:assert';
|
|
17
|
+
import { describe, it, beforeEach } from 'node:test';
|
|
18
|
+
import { signal, computed } from '@preact/signals-core';
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
import { DataModel } from '../state/data-model.js';
|
|
21
|
+
import { DataContext } from './data-context.js';
|
|
22
|
+
import { A2uiExpressionError } from '../errors.js';
|
|
23
|
+
const createTestDataContext = (model, path, functionInvoker = () => null, dispatchError = () => { }) => {
|
|
24
|
+
const mockSurface = {
|
|
25
|
+
dataModel: model,
|
|
26
|
+
catalog: { invoker: functionInvoker },
|
|
27
|
+
dispatchError,
|
|
28
|
+
};
|
|
29
|
+
return new DataContext(mockSurface, path);
|
|
30
|
+
};
|
|
31
|
+
describe('DataContext', () => {
|
|
32
|
+
let model;
|
|
33
|
+
let context;
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
model = new DataModel({
|
|
36
|
+
user: {
|
|
37
|
+
name: 'Alice',
|
|
38
|
+
address: {
|
|
39
|
+
city: 'Wonderland',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
list: ['a', 'b'],
|
|
43
|
+
});
|
|
44
|
+
context = createTestDataContext(model, '/user');
|
|
45
|
+
});
|
|
46
|
+
it('resolves relative paths', () => {
|
|
47
|
+
assert.strictEqual(context.resolveDynamicValue({ path: 'name' }), 'Alice');
|
|
48
|
+
});
|
|
49
|
+
it('resolves absolute paths', () => {
|
|
50
|
+
assert.strictEqual(context.resolveDynamicValue({ path: '/list/0' }), 'a');
|
|
51
|
+
});
|
|
52
|
+
it('resolves nested paths', () => {
|
|
53
|
+
assert.strictEqual(context.resolveDynamicValue({ path: 'address/city' }), 'Wonderland');
|
|
54
|
+
});
|
|
55
|
+
it('updates data via relative path', () => {
|
|
56
|
+
context.set('name', 'Bob');
|
|
57
|
+
assert.strictEqual(model.get('/user/name'), 'Bob');
|
|
58
|
+
});
|
|
59
|
+
it('creates nested context', () => {
|
|
60
|
+
const addressContext = context.nested('address');
|
|
61
|
+
assert.strictEqual(addressContext.path, '/user/address');
|
|
62
|
+
assert.strictEqual(addressContext.resolveDynamicValue({ path: 'city' }), 'Wonderland');
|
|
63
|
+
});
|
|
64
|
+
it('handles root context', () => {
|
|
65
|
+
const rootContext = createTestDataContext(model, '/');
|
|
66
|
+
assert.strictEqual(rootContext.resolveDynamicValue({ path: 'user/name' }), 'Alice');
|
|
67
|
+
});
|
|
68
|
+
it('subscribes relative path', () => {
|
|
69
|
+
let called = false;
|
|
70
|
+
context.subscribeDynamicValue({ path: 'name' }, val => {
|
|
71
|
+
assert.strictEqual(val, 'Charlie');
|
|
72
|
+
called = true;
|
|
73
|
+
});
|
|
74
|
+
context.set('name', 'Charlie');
|
|
75
|
+
assert.strictEqual(called, true, 'Callback was never called');
|
|
76
|
+
});
|
|
77
|
+
it('resolves using resolveDynamicValue() method with literals', () => {
|
|
78
|
+
// Literal
|
|
79
|
+
assert.strictEqual(context.resolveDynamicValue('literal'), 'literal');
|
|
80
|
+
// Path
|
|
81
|
+
assert.strictEqual(context.resolveDynamicValue({ path: 'name' }), 'Alice');
|
|
82
|
+
// Absolute Path
|
|
83
|
+
assert.strictEqual(context.resolveDynamicValue({ path: '/list/0' }), 'a');
|
|
84
|
+
});
|
|
85
|
+
it('resolves literal arrays', () => {
|
|
86
|
+
assert.deepStrictEqual(context.resolveDynamicValue(['literal', 'array']), [
|
|
87
|
+
'literal',
|
|
88
|
+
'array',
|
|
89
|
+
]);
|
|
90
|
+
});
|
|
91
|
+
it('subscribes literal arrays as static', () => {
|
|
92
|
+
let called = false;
|
|
93
|
+
const sub = context.subscribeDynamicValue(['literal', 'array'], () => {
|
|
94
|
+
called = true;
|
|
95
|
+
});
|
|
96
|
+
assert.deepStrictEqual(sub.value, ['literal', 'array']);
|
|
97
|
+
// Simulate some generic path update that shouldn't trigger anything for this static sub
|
|
98
|
+
context.set('name', 'Charlie');
|
|
99
|
+
assert.strictEqual(called, false);
|
|
100
|
+
});
|
|
101
|
+
it('resolves function calls synchronously', () => {
|
|
102
|
+
const fnInvoker = (name, args) => {
|
|
103
|
+
if (name === 'add')
|
|
104
|
+
return args.a + args.b;
|
|
105
|
+
return null;
|
|
106
|
+
};
|
|
107
|
+
const ctx = createTestDataContext(model, '/user', fnInvoker);
|
|
108
|
+
const result = ctx.resolveDynamicValue({
|
|
109
|
+
call: 'add',
|
|
110
|
+
args: { a: 1, b: 2 },
|
|
111
|
+
returnType: 'any',
|
|
112
|
+
});
|
|
113
|
+
assert.strictEqual(result, 3);
|
|
114
|
+
});
|
|
115
|
+
it('dispatches generic error on function call without invoker synchronously', () => {
|
|
116
|
+
let dispatchedError = null;
|
|
117
|
+
const ctx = createTestDataContext(model, '/user', () => {
|
|
118
|
+
throw new Error('Function invoker is not configured');
|
|
119
|
+
}, err => {
|
|
120
|
+
dispatchedError = err;
|
|
121
|
+
});
|
|
122
|
+
const result = ctx.resolveDynamicValue({
|
|
123
|
+
call: 'add',
|
|
124
|
+
args: {},
|
|
125
|
+
returnType: 'any',
|
|
126
|
+
});
|
|
127
|
+
assert.strictEqual(result, undefined);
|
|
128
|
+
assert.ok(dispatchedError);
|
|
129
|
+
assert.strictEqual(dispatchedError.code, 'EXPRESSION_ERROR');
|
|
130
|
+
});
|
|
131
|
+
it('does not resolve arbitrary objects recursively', () => {
|
|
132
|
+
const obj = {
|
|
133
|
+
foo: 'bar',
|
|
134
|
+
nested: { path: 'name' },
|
|
135
|
+
list: [{ path: 'address/city' }, 'literal'],
|
|
136
|
+
};
|
|
137
|
+
const resolved = context.resolveDynamicValue(obj);
|
|
138
|
+
assert.deepStrictEqual(resolved, obj);
|
|
139
|
+
});
|
|
140
|
+
it('subscribes to literal objects as signals without resolution', () => {
|
|
141
|
+
const obj = { foo: 'bar', nested: { path: 'name' } };
|
|
142
|
+
const sig = context.resolveSignal(obj);
|
|
143
|
+
// It should be a literal signal containing the object
|
|
144
|
+
assert.deepStrictEqual(sig.peek(), obj);
|
|
145
|
+
// Updating the path should NOT affect it
|
|
146
|
+
context.set('name', 'Bob');
|
|
147
|
+
assert.deepStrictEqual(sig.peek(), obj);
|
|
148
|
+
});
|
|
149
|
+
it('subscribes to function calls with no args', () => {
|
|
150
|
+
const fnInvoker = (name) => (name === 'getPi' ? Math.PI : 0);
|
|
151
|
+
const ctx = createTestDataContext(model, '/', fnInvoker);
|
|
152
|
+
let called = false;
|
|
153
|
+
ctx.subscribeDynamicValue({ call: 'getPi', args: {}, returnType: 'any' }, () => {
|
|
154
|
+
called = true;
|
|
155
|
+
});
|
|
156
|
+
assert.strictEqual(called, false);
|
|
157
|
+
});
|
|
158
|
+
it('returns undefined on function call without invoker reactively', () => {
|
|
159
|
+
const ctx = createTestDataContext(model, '/user', () => {
|
|
160
|
+
throw new Error('Function invoker is not configured');
|
|
161
|
+
});
|
|
162
|
+
const sub = ctx.subscribeDynamicValue({ call: 'add', args: {}, returnType: 'any' }, () => { });
|
|
163
|
+
assert.strictEqual(sub.value, undefined);
|
|
164
|
+
});
|
|
165
|
+
it('subscribes to function call returning a signal', () => {
|
|
166
|
+
const fnInvoker = (name) => {
|
|
167
|
+
if (name === 'obs')
|
|
168
|
+
return signal('hello');
|
|
169
|
+
return null;
|
|
170
|
+
};
|
|
171
|
+
const ctx = createTestDataContext(model, '/', fnInvoker);
|
|
172
|
+
let val;
|
|
173
|
+
ctx.subscribeDynamicValue({ call: 'obs', args: {}, returnType: 'any' }, v => {
|
|
174
|
+
val = v;
|
|
175
|
+
});
|
|
176
|
+
assert.ok(true); // Verification occurs by absence of crash, and coverage hits the switch
|
|
177
|
+
assert.equal(val, undefined);
|
|
178
|
+
});
|
|
179
|
+
it('subscribes to invalid dynamic value reactively (falls back to literal signal)', () => {
|
|
180
|
+
const obj = { unknown: 'thing' };
|
|
181
|
+
const sub = context.subscribeDynamicValue(obj, () => { });
|
|
182
|
+
assert.deepStrictEqual(sub.value, obj);
|
|
183
|
+
});
|
|
184
|
+
it('handles path resolution edge cases', () => {
|
|
185
|
+
assert.strictEqual(context.nested('').path, '/user');
|
|
186
|
+
assert.strictEqual(context.nested('.').path, '/user');
|
|
187
|
+
// Ensure trailing slash removal logic is hit
|
|
188
|
+
const rootCtx = createTestDataContext(model, '/');
|
|
189
|
+
assert.strictEqual(rootCtx.nested('test').path, '/test');
|
|
190
|
+
const trailingCtx = createTestDataContext(model, '/user/');
|
|
191
|
+
assert.strictEqual(trailingCtx.nested('test').path, '/user/test');
|
|
192
|
+
});
|
|
193
|
+
it('subscribes to function call with arguments reactively', () => {
|
|
194
|
+
const fnInvoker = (name, args) => {
|
|
195
|
+
if (name === 'greet')
|
|
196
|
+
return `Hello ${args.name}`;
|
|
197
|
+
return null;
|
|
198
|
+
};
|
|
199
|
+
const ctx = createTestDataContext(model, '/user', fnInvoker);
|
|
200
|
+
const sub = ctx.subscribeDynamicValue({ call: 'greet', args: { name: { path: 'name' } }, returnType: 'any' }, () => { });
|
|
201
|
+
assert.strictEqual(sub.value, 'Hello Alice');
|
|
202
|
+
// Update inner path
|
|
203
|
+
ctx.set('name', 'Bob');
|
|
204
|
+
assert.strictEqual(sub.value, 'Hello Bob');
|
|
205
|
+
sub.unsubscribe();
|
|
206
|
+
});
|
|
207
|
+
describe('resolveAction', () => {
|
|
208
|
+
it('resolves event actions non-recursively', () => {
|
|
209
|
+
const action = {
|
|
210
|
+
event: {
|
|
211
|
+
name: 'save',
|
|
212
|
+
context: {
|
|
213
|
+
id: { path: 'name' },
|
|
214
|
+
metadata: { nested: { path: 'something' } },
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
const resolved = context.resolveAction(action);
|
|
219
|
+
assert.deepStrictEqual(resolved, {
|
|
220
|
+
event: {
|
|
221
|
+
name: 'save',
|
|
222
|
+
context: {
|
|
223
|
+
id: 'Alice',
|
|
224
|
+
metadata: { nested: { path: 'something' } }, // Literal, NOT resolved
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
it('resolves functionCall actions', () => {
|
|
230
|
+
const fnInvoker = (name, args) => {
|
|
231
|
+
if (name === 'greet')
|
|
232
|
+
return `Hello ${args.name}`;
|
|
233
|
+
return null;
|
|
234
|
+
};
|
|
235
|
+
const ctx = createTestDataContext(model, '/user', fnInvoker);
|
|
236
|
+
const action = {
|
|
237
|
+
functionCall: {
|
|
238
|
+
call: 'greet',
|
|
239
|
+
args: { name: { path: 'name' } },
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
const resolved = ctx.resolveAction(action);
|
|
243
|
+
assert.strictEqual(resolved, 'Hello Alice');
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
describe('Error Handling', () => {
|
|
247
|
+
it('translates ZodError into A2uiExpressionError and dispatches error', () => {
|
|
248
|
+
const invokerWithZodError = () => {
|
|
249
|
+
throw new z.ZodError([
|
|
250
|
+
{
|
|
251
|
+
code: 'invalid_type',
|
|
252
|
+
expected: 'string',
|
|
253
|
+
received: 'number',
|
|
254
|
+
path: ['foo'],
|
|
255
|
+
message: 'Expected string, received number',
|
|
256
|
+
},
|
|
257
|
+
]);
|
|
258
|
+
};
|
|
259
|
+
let dispatchedError = null;
|
|
260
|
+
const ctx = createTestDataContext(model, '/', invokerWithZodError, err => {
|
|
261
|
+
dispatchedError = err;
|
|
262
|
+
});
|
|
263
|
+
const result = ctx.resolveDynamicValue({
|
|
264
|
+
call: 'fail',
|
|
265
|
+
args: {},
|
|
266
|
+
returnType: 'any',
|
|
267
|
+
});
|
|
268
|
+
assert.strictEqual(result, undefined);
|
|
269
|
+
assert.ok(dispatchedError);
|
|
270
|
+
assert.strictEqual(dispatchedError.code, 'EXPRESSION_ERROR');
|
|
271
|
+
assert.strictEqual(dispatchedError.expression, 'fail');
|
|
272
|
+
});
|
|
273
|
+
it('dispatches generic Error as EXPRESSION_ERROR to surface', () => {
|
|
274
|
+
const invokerWithRegularError = () => {
|
|
275
|
+
const err = new Error('Generic failure');
|
|
276
|
+
err.stack = 'Mock stack trace';
|
|
277
|
+
throw err;
|
|
278
|
+
};
|
|
279
|
+
let dispatchedError = null;
|
|
280
|
+
const ctx = createTestDataContext(model, '/', invokerWithRegularError, err => {
|
|
281
|
+
dispatchedError = err;
|
|
282
|
+
});
|
|
283
|
+
const result = ctx.resolveDynamicValue({
|
|
284
|
+
call: 'fail',
|
|
285
|
+
args: {},
|
|
286
|
+
returnType: 'any',
|
|
287
|
+
});
|
|
288
|
+
assert.strictEqual(result, undefined);
|
|
289
|
+
assert.ok(dispatchedError);
|
|
290
|
+
assert.strictEqual(dispatchedError.code, 'EXPRESSION_ERROR');
|
|
291
|
+
assert.strictEqual(dispatchedError.expression, 'fail');
|
|
292
|
+
assert.strictEqual(dispatchedError.message, 'Generic failure');
|
|
293
|
+
assert.deepStrictEqual(dispatchedError.details, {
|
|
294
|
+
stack: 'Mock stack trace',
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
it('dispatches A2uiExpressionError to surface', () => {
|
|
298
|
+
const invokerWithExpressionError = () => {
|
|
299
|
+
throw new A2uiExpressionError('Custom expr error', 'custom_func');
|
|
300
|
+
};
|
|
301
|
+
let dispatchedError = null;
|
|
302
|
+
const ctx = createTestDataContext(model, '/', invokerWithExpressionError, err => {
|
|
303
|
+
dispatchedError = err;
|
|
304
|
+
});
|
|
305
|
+
const result = ctx.resolveDynamicValue({
|
|
306
|
+
call: 'fail',
|
|
307
|
+
args: {},
|
|
308
|
+
returnType: 'any',
|
|
309
|
+
});
|
|
310
|
+
assert.strictEqual(result, undefined);
|
|
311
|
+
assert.ok(dispatchedError);
|
|
312
|
+
assert.strictEqual(dispatchedError.code, 'EXPRESSION_ERROR');
|
|
313
|
+
assert.strictEqual(dispatchedError.expression, 'custom_func');
|
|
314
|
+
});
|
|
315
|
+
it('handles errors thrown during reactive argument resolution', () => {
|
|
316
|
+
const trigger = signal(false);
|
|
317
|
+
const fnInvoker = (name) => {
|
|
318
|
+
if (name === 'inner') {
|
|
319
|
+
return computed(() => {
|
|
320
|
+
if (trigger.value)
|
|
321
|
+
throw new A2uiExpressionError('Inner failure', 'inner_func');
|
|
322
|
+
return 'ok';
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
return 'outer-result';
|
|
326
|
+
};
|
|
327
|
+
let dispatchedError = null;
|
|
328
|
+
const ctx = createTestDataContext(model, '/', fnInvoker, err => {
|
|
329
|
+
dispatchedError = err;
|
|
330
|
+
});
|
|
331
|
+
const sub = ctx.subscribeDynamicValue({
|
|
332
|
+
call: 'outer',
|
|
333
|
+
args: {
|
|
334
|
+
arg: { call: 'inner', args: {} },
|
|
335
|
+
},
|
|
336
|
+
returnType: 'any',
|
|
337
|
+
}, () => { });
|
|
338
|
+
assert.strictEqual(sub.value, 'outer-result');
|
|
339
|
+
assert.strictEqual(dispatchedError, null);
|
|
340
|
+
trigger.value = true;
|
|
341
|
+
// Accessing sub.value or the effect running triggers the catch.
|
|
342
|
+
assert.strictEqual(sub.value, undefined);
|
|
343
|
+
assert.ok(dispatchedError);
|
|
344
|
+
assert.strictEqual(dispatchedError.message, 'Inner failure');
|
|
345
|
+
});
|
|
346
|
+
it('handles generic errors thrown during reactive execution', () => {
|
|
347
|
+
const trigger = signal(false);
|
|
348
|
+
const fnInvoker = (name) => {
|
|
349
|
+
if (name === 'inner') {
|
|
350
|
+
return computed(() => {
|
|
351
|
+
if (trigger.value)
|
|
352
|
+
throw new Error('Generic inner failure');
|
|
353
|
+
return 'ok';
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
return 'outer-result';
|
|
357
|
+
};
|
|
358
|
+
let dispatchedError = null;
|
|
359
|
+
const ctx = createTestDataContext(model, '/', fnInvoker, err => {
|
|
360
|
+
dispatchedError = err;
|
|
361
|
+
});
|
|
362
|
+
const sub = ctx.subscribeDynamicValue({
|
|
363
|
+
call: 'outer',
|
|
364
|
+
args: {
|
|
365
|
+
arg: { call: 'inner', args: {} },
|
|
366
|
+
},
|
|
367
|
+
returnType: 'any',
|
|
368
|
+
}, () => { });
|
|
369
|
+
assert.strictEqual(sub.value, 'outer-result');
|
|
370
|
+
assert.strictEqual(dispatchedError, null);
|
|
371
|
+
trigger.value = true;
|
|
372
|
+
assert.strictEqual(sub.value, undefined);
|
|
373
|
+
assert.ok(dispatchedError);
|
|
374
|
+
assert.strictEqual(dispatchedError.code, 'EXPRESSION_ERROR');
|
|
375
|
+
assert.strictEqual(dispatchedError.message, 'Generic inner failure');
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
//# sourceMappingURL=data-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-context.test.js","sourceRoot":"","sources":["../../../../src/v0_9/rendering/data-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2026 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
import { ComponentContext } from './component-context.js';
|
|
18
|
+
import { Action, ChildList, DataBinding, FunctionCall } from '../schema/common-types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Represents the intended runtime behavior of a property parsed from its Zod schema.
|
|
21
|
+
*
|
|
22
|
+
* - `DYNAMIC`: The property can be bound to the `DataModel` (e.g. `DynamicString`).
|
|
23
|
+
* The Binder will automatically subscribe to data changes and emit primitive values.
|
|
24
|
+
* - `ACTION`: The property represents a user interaction (e.g. `Action`).
|
|
25
|
+
* The Binder will resolve deep payload bindings and output a ready-to-call `() => void` closure.
|
|
26
|
+
* - `STRUCTURAL`: The property dictates the rendering of child components (e.g. `ChildList`).
|
|
27
|
+
* The Binder outputs lists of objects containing `{ id, basePath }` for structural layout.
|
|
28
|
+
* - `CHECKABLE`: Special property for handling validation arrays (e.g. `checks`).
|
|
29
|
+
* The Binder will reactively evaluate the rules and inject `isValid` and `validationErrors` booleans into the parent object.
|
|
30
|
+
* - `STATIC`: A primitive value that requires no reactive subscription or resolution.
|
|
31
|
+
* - `OBJECT` / `ARRAY`: Recursive traversal nodes for complex nested schemas.
|
|
32
|
+
*/
|
|
33
|
+
export type BehaviorNode = {
|
|
34
|
+
type: 'DYNAMIC';
|
|
35
|
+
} | {
|
|
36
|
+
type: 'ACTION';
|
|
37
|
+
} | {
|
|
38
|
+
type: 'STRUCTURAL';
|
|
39
|
+
} | {
|
|
40
|
+
type: 'CHECKABLE';
|
|
41
|
+
} | {
|
|
42
|
+
type: 'STATIC';
|
|
43
|
+
} | {
|
|
44
|
+
type: 'OBJECT';
|
|
45
|
+
shape: Record<string, BehaviorNode>;
|
|
46
|
+
} | {
|
|
47
|
+
type: 'ARRAY';
|
|
48
|
+
element: BehaviorNode;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Traverses a Zod schema tree to build a `BehaviorNode` map.
|
|
52
|
+
*
|
|
53
|
+
* This allows the Generic Binder to know *how* to handle a piece of raw JSON
|
|
54
|
+
* data without needing hardcoded logic for every specific component type.
|
|
55
|
+
* It identifies core A2UI primitives (Dynamic values, Actions, ChildLists) by
|
|
56
|
+
* inspecting the shape of ZodUnion objects defined in `common-types.ts`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function scrapeSchemaBehavior(schema: z.ZodTypeAny): BehaviorNode;
|
|
59
|
+
type DynamicTypes = DataBinding | FunctionCall;
|
|
60
|
+
type IsDynamic<T> = DataBinding extends NonNullable<T> ? true : false;
|
|
61
|
+
/**
|
|
62
|
+
* Maps raw Zod inferred types to their resolved runtime equivalents.
|
|
63
|
+
* For example, an `Action` object becomes a callable `() => void` function.
|
|
64
|
+
*/
|
|
65
|
+
export type ResolveA2uiProp<T> = [NonNullable<T>] extends [Action] ? (() => void) | Extract<T, undefined> : [NonNullable<T>] extends [ChildList] ? any | Extract<T, undefined> : Exclude<T, DynamicTypes> extends never ? any : Exclude<T, DynamicTypes>;
|
|
66
|
+
/**
|
|
67
|
+
* Automatically generates two-way binding setters for dynamic properties.
|
|
68
|
+
* If a schema has a `value: DynamicString`, this type generates a `setValue(val: string)` method.
|
|
69
|
+
*/
|
|
70
|
+
export type GenerateSetters<T> = {
|
|
71
|
+
[K in keyof T as IsDynamic<T[K]> extends true ? `set${Capitalize<string & K>}` : never]-?: (value: Exclude<NonNullable<T[K]>, DynamicTypes>) => void;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* The final output type of the Generic Binder, providing fully resolved, ready-to-use props.
|
|
75
|
+
* This is what framework-specific adapters (like `createReactComponent`) pass to the developer's view logic.
|
|
76
|
+
*/
|
|
77
|
+
export type ResolveA2uiProps<T> = (T extends object ? {
|
|
78
|
+
[K in keyof T]: ResolveA2uiProp<T[K]>;
|
|
79
|
+
} : T) & GenerateSetters<T> & {
|
|
80
|
+
isValid?: boolean;
|
|
81
|
+
validationErrors?: string[];
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* The Generic Binder is a framework-agnostic engine that transforms raw A2UI JSON payload
|
|
85
|
+
* configurations into a single, cohesive reactive stream of strongly-typed `ResolvedProps`.
|
|
86
|
+
*
|
|
87
|
+
* It solves the problem of manual state management: developers do not need to write
|
|
88
|
+
* boilerplate code to subscribe to data paths, evaluate logic expressions, or tear down
|
|
89
|
+
* listeners when components unmount.
|
|
90
|
+
*
|
|
91
|
+
* Usage Flow:
|
|
92
|
+
* 1. Takes a `ComponentContext` (the raw JSON config) and a `Zod Schema` (the API definition).
|
|
93
|
+
* 2. Uses `scrapeSchemaBehavior` to analyze the schema.
|
|
94
|
+
* 3. Deeply iterates over the raw JSON properties, applying rules based on the scraped behavior.
|
|
95
|
+
* 4. Subscribes to the `DataContext` for all `DYNAMIC` and `CHECKABLE` paths.
|
|
96
|
+
* 5. Bundles the final resolved primitives, structural arrays, and executable Actions into `currentProps`.
|
|
97
|
+
* 6. Exposes a `subscribe()` interface for framework-specific adapters (React, Angular) to listen to state changes.
|
|
98
|
+
*/
|
|
99
|
+
export declare class GenericBinder<T> {
|
|
100
|
+
private dataListeners;
|
|
101
|
+
private propsListeners;
|
|
102
|
+
currentProps: Partial<T>;
|
|
103
|
+
private compUnsub?;
|
|
104
|
+
private isConnected;
|
|
105
|
+
private context;
|
|
106
|
+
private behaviorTree;
|
|
107
|
+
constructor(context: ComponentContext, schema: z.ZodTypeAny);
|
|
108
|
+
private resolveInitialProps;
|
|
109
|
+
private connect;
|
|
110
|
+
private rebuildAllBindings;
|
|
111
|
+
private resolveAndBind;
|
|
112
|
+
private updateDeepValue;
|
|
113
|
+
private cloneAndUpdate;
|
|
114
|
+
dispose(): void;
|
|
115
|
+
private notify;
|
|
116
|
+
subscribe(listener: (props: T) => void): {
|
|
117
|
+
unsubscribe: () => void;
|
|
118
|
+
};
|
|
119
|
+
get snapshot(): T;
|
|
120
|
+
}
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=generic-binder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-binder.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/rendering/generic-binder.ts"],"names":[],"mappings":"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"}
|