@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,294 @@
|
|
|
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 { A2uiExpressionError } from '../../errors.js';
|
|
17
|
+
/**
|
|
18
|
+
* A parser for A2UI expressions, supporting string interpolation and functional calls.
|
|
19
|
+
*
|
|
20
|
+
* The parser converts strings with `${...}` placeholders into arrays of `DynamicValue`s.
|
|
21
|
+
* It supports literals (strings, numbers, booleans), path-based data bindings, and
|
|
22
|
+
* nested function calls with named arguments.
|
|
23
|
+
*/
|
|
24
|
+
export class ExpressionParser {
|
|
25
|
+
/** The maximum allowed recursion depth for nested expressions to prevent stack overflows. */
|
|
26
|
+
static { this.MAX_DEPTH = 10; }
|
|
27
|
+
/**
|
|
28
|
+
* Parses an input string into an array of DynamicValues.
|
|
29
|
+
* If the input contains no interpolation, it returns the raw string as a single literal.
|
|
30
|
+
*/
|
|
31
|
+
parse(input, depth = 0) {
|
|
32
|
+
if (depth > ExpressionParser.MAX_DEPTH) {
|
|
33
|
+
throw new A2uiExpressionError('Max recursion depth reached in parse');
|
|
34
|
+
}
|
|
35
|
+
if (!input || !input.includes('${')) {
|
|
36
|
+
return [input];
|
|
37
|
+
}
|
|
38
|
+
const parts = [];
|
|
39
|
+
const scanner = new Scanner(input);
|
|
40
|
+
while (!scanner.isAtEnd()) {
|
|
41
|
+
if (scanner.matches('${')) {
|
|
42
|
+
scanner.advance(2);
|
|
43
|
+
const content = this.extractInterpolationContent(scanner);
|
|
44
|
+
const parsed = this.parseExpression(content, depth + 1);
|
|
45
|
+
if (parsed !== null) {
|
|
46
|
+
parts.push(parsed);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (scanner.peek() === '\\' &&
|
|
50
|
+
scanner.peek(1) === '$' &&
|
|
51
|
+
scanner.peek(2) === '{') {
|
|
52
|
+
scanner.advance();
|
|
53
|
+
parts.push('${');
|
|
54
|
+
scanner.advance(2);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
const start = scanner.pos;
|
|
58
|
+
while (!scanner.isAtEnd()) {
|
|
59
|
+
if (scanner.matches('${')) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
if (scanner.peek() === '\\' &&
|
|
63
|
+
scanner.peek(1) === '$' &&
|
|
64
|
+
scanner.peek(2) === '{') {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
scanner.advance();
|
|
68
|
+
}
|
|
69
|
+
parts.push(scanner.input.substring(start, scanner.pos));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return parts.filter(p => p !== null && p !== '');
|
|
73
|
+
}
|
|
74
|
+
extractInterpolationContent(scanner) {
|
|
75
|
+
const start = scanner.pos;
|
|
76
|
+
let braceBalance = 1;
|
|
77
|
+
while (!scanner.isAtEnd() && braceBalance > 0) {
|
|
78
|
+
const char = scanner.advance();
|
|
79
|
+
if (char === '{') {
|
|
80
|
+
braceBalance++;
|
|
81
|
+
}
|
|
82
|
+
else if (char === '}') {
|
|
83
|
+
braceBalance--;
|
|
84
|
+
}
|
|
85
|
+
else if (char === "'" || char === '"') {
|
|
86
|
+
const quote = char;
|
|
87
|
+
while (!scanner.isAtEnd()) {
|
|
88
|
+
const c = scanner.advance();
|
|
89
|
+
if (c === '\\') {
|
|
90
|
+
scanner.advance();
|
|
91
|
+
}
|
|
92
|
+
else if (c === quote) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (braceBalance > 0) {
|
|
99
|
+
throw new A2uiExpressionError("Unclosed interpolation: missing '}'");
|
|
100
|
+
}
|
|
101
|
+
return scanner.input.substring(start, scanner.pos - 1);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Parses a single expression string into a DynamicValue.
|
|
105
|
+
*
|
|
106
|
+
* Unlike `parse()`, which handles mixed literal text and interpolations,
|
|
107
|
+
* this assumes the entire string is a single expression (e.g., as found inside `${...}`).
|
|
108
|
+
*
|
|
109
|
+
* @param expr The expression string to parse.
|
|
110
|
+
* @param depth The current recursion depth.
|
|
111
|
+
* @returns The resolved DynamicValue.
|
|
112
|
+
*/
|
|
113
|
+
parseExpression(expr, depth = 0) {
|
|
114
|
+
expr = expr.trim();
|
|
115
|
+
if (!expr)
|
|
116
|
+
return '';
|
|
117
|
+
const scanner = new Scanner(expr);
|
|
118
|
+
const result = this.parseExpressionInternal(scanner, depth);
|
|
119
|
+
if (!scanner.isAtEnd()) {
|
|
120
|
+
throw new A2uiExpressionError(`Unexpected characters at end of expression: '${scanner.input.substring(scanner.pos)}'`);
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
parseExpressionInternal(scanner, depth) {
|
|
125
|
+
scanner.skipWhitespace();
|
|
126
|
+
if (scanner.isAtEnd())
|
|
127
|
+
return '';
|
|
128
|
+
// 0. Nested Interpolation (Block)
|
|
129
|
+
if (scanner.matches('${')) {
|
|
130
|
+
scanner.advance(2);
|
|
131
|
+
const content = this.extractInterpolationContent(scanner);
|
|
132
|
+
return this.parseExpression(content, depth + 1);
|
|
133
|
+
}
|
|
134
|
+
// 1. Literals
|
|
135
|
+
if (scanner.matchesString("'") || scanner.matchesString('"')) {
|
|
136
|
+
return this.parseStringLiteral(scanner);
|
|
137
|
+
}
|
|
138
|
+
if (this.isDigit(scanner.peek())) {
|
|
139
|
+
return this.parseNumberLiteral(scanner);
|
|
140
|
+
}
|
|
141
|
+
if (scanner.matchesKeyword('true'))
|
|
142
|
+
return true;
|
|
143
|
+
if (scanner.matchesKeyword('false'))
|
|
144
|
+
return false;
|
|
145
|
+
if (scanner.matchesKeyword('null'))
|
|
146
|
+
return '';
|
|
147
|
+
// 2. Identifiers (Function calls or Path starts)
|
|
148
|
+
const token = this.scanPathOrIdentifier(scanner);
|
|
149
|
+
scanner.skipWhitespace();
|
|
150
|
+
if (scanner.peek() === '(') {
|
|
151
|
+
return this.parseFunctionCall(token, scanner, depth);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
if (!token) {
|
|
155
|
+
return '';
|
|
156
|
+
}
|
|
157
|
+
return { path: token };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
scanPathOrIdentifier(scanner) {
|
|
161
|
+
const start = scanner.pos;
|
|
162
|
+
while (!scanner.isAtEnd()) {
|
|
163
|
+
const c = scanner.peek();
|
|
164
|
+
if (this.isAlnum(c) || c === '/' || c === '.' || c === '_' || c === '-') {
|
|
165
|
+
scanner.advance();
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return scanner.input.substring(start, scanner.pos);
|
|
172
|
+
}
|
|
173
|
+
parseFunctionCall(funcName, scanner, depth) {
|
|
174
|
+
scanner.match('(');
|
|
175
|
+
scanner.skipWhitespace();
|
|
176
|
+
const args = {};
|
|
177
|
+
while (!scanner.isAtEnd() && scanner.peek() !== ')') {
|
|
178
|
+
const argName = this.scanIdentifier(scanner);
|
|
179
|
+
scanner.skipWhitespace();
|
|
180
|
+
if (!scanner.match(':')) {
|
|
181
|
+
throw new A2uiExpressionError(`Expected ':' after argument name '${argName}' in function '${funcName}'`);
|
|
182
|
+
}
|
|
183
|
+
scanner.skipWhitespace();
|
|
184
|
+
args[argName] = this.parseExpressionInternal(scanner, depth);
|
|
185
|
+
scanner.skipWhitespace();
|
|
186
|
+
if (scanner.peek() === ',') {
|
|
187
|
+
scanner.advance();
|
|
188
|
+
scanner.skipWhitespace();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (!scanner.match(')')) {
|
|
192
|
+
throw new A2uiExpressionError(`Expected ')' after function arguments for '${funcName}'`);
|
|
193
|
+
}
|
|
194
|
+
return { call: funcName, args, returnType: 'any' };
|
|
195
|
+
}
|
|
196
|
+
scanIdentifier(scanner) {
|
|
197
|
+
const start = scanner.pos;
|
|
198
|
+
while (!scanner.isAtEnd() &&
|
|
199
|
+
(this.isAlnum(scanner.peek()) || scanner.peek() === '_')) {
|
|
200
|
+
scanner.advance();
|
|
201
|
+
}
|
|
202
|
+
return scanner.input.substring(start, scanner.pos);
|
|
203
|
+
}
|
|
204
|
+
parseStringLiteral(scanner) {
|
|
205
|
+
const quote = scanner.advance();
|
|
206
|
+
let result = '';
|
|
207
|
+
while (!scanner.isAtEnd()) {
|
|
208
|
+
const c = scanner.advance();
|
|
209
|
+
if (c === '\\') {
|
|
210
|
+
const next = scanner.advance();
|
|
211
|
+
if (next === 'n')
|
|
212
|
+
result += '\n';
|
|
213
|
+
else if (next === 't')
|
|
214
|
+
result += '\t';
|
|
215
|
+
else if (next === 'r')
|
|
216
|
+
result += '\r';
|
|
217
|
+
else
|
|
218
|
+
result += next;
|
|
219
|
+
}
|
|
220
|
+
else if (c === quote) {
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
result += c;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
parseNumberLiteral(scanner) {
|
|
230
|
+
const start = scanner.pos;
|
|
231
|
+
while (!scanner.isAtEnd() &&
|
|
232
|
+
(this.isDigit(scanner.peek()) || scanner.peek() === '.')) {
|
|
233
|
+
scanner.advance();
|
|
234
|
+
}
|
|
235
|
+
return Number(scanner.input.substring(start, scanner.pos));
|
|
236
|
+
}
|
|
237
|
+
isAlnum(c) {
|
|
238
|
+
return ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'));
|
|
239
|
+
}
|
|
240
|
+
isDigit(c) {
|
|
241
|
+
return c >= '0' && c <= '9';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
class Scanner {
|
|
245
|
+
constructor(input) {
|
|
246
|
+
this.input = input;
|
|
247
|
+
this.pos = 0;
|
|
248
|
+
}
|
|
249
|
+
isAtEnd() {
|
|
250
|
+
return this.pos >= this.input.length;
|
|
251
|
+
}
|
|
252
|
+
peek(offset = 0) {
|
|
253
|
+
if (this.pos + offset >= this.input.length)
|
|
254
|
+
return '\0';
|
|
255
|
+
return this.input[this.pos + offset];
|
|
256
|
+
}
|
|
257
|
+
advance(count = 1) {
|
|
258
|
+
const char = this.input.substring(this.pos, this.pos + count);
|
|
259
|
+
this.pos += count;
|
|
260
|
+
return char;
|
|
261
|
+
}
|
|
262
|
+
match(expected) {
|
|
263
|
+
if (this.peek() === expected) {
|
|
264
|
+
this.advance();
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
matches(expected) {
|
|
270
|
+
if (this.input.startsWith(expected, this.pos)) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
matchesString(expected) {
|
|
276
|
+
return this.peek() === expected;
|
|
277
|
+
}
|
|
278
|
+
matchesKeyword(keyword) {
|
|
279
|
+
if (this.input.startsWith(keyword, this.pos)) {
|
|
280
|
+
const next = this.peek(keyword.length);
|
|
281
|
+
if (!/[a-zA-Z0-9_]/.test(next)) {
|
|
282
|
+
this.advance(keyword.length);
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
skipWhitespace() {
|
|
289
|
+
while (!this.isAtEnd() && /\s/.test(this.peek())) {
|
|
290
|
+
this.advance();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=expression_parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression_parser.js","sourceRoot":"","sources":["../../../../../src/v0_9/basic_catalog/expressions/expression_parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression_parser.test.d.ts","sourceRoot":"","sources":["../../../../../src/v0_9/basic_catalog/expressions/expression_parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,126 @@
|
|
|
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 { describe, it, beforeEach } from 'node:test';
|
|
17
|
+
import * as assert from 'node:assert';
|
|
18
|
+
import { ExpressionParser } from './expression_parser.js';
|
|
19
|
+
describe('ExpressionParser', () => {
|
|
20
|
+
let parser;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
parser = new ExpressionParser();
|
|
23
|
+
});
|
|
24
|
+
it('parses literal strings unchanged', () => {
|
|
25
|
+
assert.deepStrictEqual(parser.parse('hello world'), ['hello world']);
|
|
26
|
+
});
|
|
27
|
+
it('parses simple interpolation', () => {
|
|
28
|
+
assert.deepStrictEqual(parser.parse('hello ${foo}'), [
|
|
29
|
+
'hello ',
|
|
30
|
+
{ path: 'foo' },
|
|
31
|
+
]);
|
|
32
|
+
});
|
|
33
|
+
it('parses number interpolation', () => {
|
|
34
|
+
assert.deepStrictEqual(parser.parse('number is ${num}'), [
|
|
35
|
+
'number is ',
|
|
36
|
+
{ path: 'num' },
|
|
37
|
+
]);
|
|
38
|
+
});
|
|
39
|
+
it('parses nested interpolation', () => {
|
|
40
|
+
// Nested interpolations don't evaluate immediately, they parse into paths of paths, but currently parser doesn't do deep AST for 'val is ${${nested}}' properly if it's not a function.
|
|
41
|
+
// Wait, the parser extracts content. Let's see what `val is ${${nested}}` parses to:
|
|
42
|
+
// It extracts `${nested}` and parses it. That evaluates to `{ path: "${nested}" }` or something.
|
|
43
|
+
// Actually, `parseExpression("${nested}")` will recursively call `parseExpression("nested")` and return `{ path: "nested" }`.
|
|
44
|
+
assert.deepStrictEqual(parser.parse('val is ${${nested}}'), [
|
|
45
|
+
'val is ',
|
|
46
|
+
{ path: 'nested' },
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
it('handles escaped interpolation', () => {
|
|
50
|
+
assert.deepStrictEqual(parser.parse('escaped \\${foo}'), [
|
|
51
|
+
'escaped ',
|
|
52
|
+
'${',
|
|
53
|
+
'foo}',
|
|
54
|
+
]);
|
|
55
|
+
});
|
|
56
|
+
it('parses function calls', () => {
|
|
57
|
+
assert.deepStrictEqual(parser.parse('sum is ${add(a: 10, b: 20)}'), [
|
|
58
|
+
'sum is ',
|
|
59
|
+
{ call: 'add', args: { a: 10, b: 20 }, returnType: 'any' },
|
|
60
|
+
]);
|
|
61
|
+
});
|
|
62
|
+
it('parses function calls with string literals', () => {
|
|
63
|
+
assert.deepStrictEqual(parser.parse('case is ${upper(text: "hello")}'), [
|
|
64
|
+
'case is ',
|
|
65
|
+
{ call: 'upper', args: { text: 'hello' }, returnType: 'any' },
|
|
66
|
+
]);
|
|
67
|
+
});
|
|
68
|
+
it('parses keywords', () => {
|
|
69
|
+
assert.deepStrictEqual(parser.parse('${true} ${false} ${null}'), [
|
|
70
|
+
true,
|
|
71
|
+
' ',
|
|
72
|
+
false,
|
|
73
|
+
' ',
|
|
74
|
+
]);
|
|
75
|
+
});
|
|
76
|
+
it('returns error on max depth exceeded', () => {
|
|
77
|
+
assert.throws(() => {
|
|
78
|
+
parser.parse('depth', 11);
|
|
79
|
+
}, /Max recursion depth reached/);
|
|
80
|
+
});
|
|
81
|
+
it('handles deep recursion gracefully', () => {
|
|
82
|
+
assert.deepStrictEqual(parser.parse('${${"hello"}}'), ['hello']);
|
|
83
|
+
});
|
|
84
|
+
it('returns error on unclosed interpolation', () => {
|
|
85
|
+
assert.throws(() => {
|
|
86
|
+
parser.parse('hello ${world');
|
|
87
|
+
}, /Unclosed interpolation/);
|
|
88
|
+
});
|
|
89
|
+
it('returns error on invalid function syntax', () => {
|
|
90
|
+
// Missing closing parenthesis
|
|
91
|
+
assert.throws(() => {
|
|
92
|
+
parser.parse('${add(a: 1, b: 2}');
|
|
93
|
+
}, /Expected '\)'/);
|
|
94
|
+
});
|
|
95
|
+
it('returns error on unexpected characters at end', () => {
|
|
96
|
+
// Extra garbage after valid expression inside interpolation
|
|
97
|
+
assert.throws(() => {
|
|
98
|
+
parser.parse('${true false}');
|
|
99
|
+
}, /Unexpected characters/);
|
|
100
|
+
});
|
|
101
|
+
it('handles empty identifiers', () => {
|
|
102
|
+
assert.deepStrictEqual(parser.parse('${()}'), [
|
|
103
|
+
{ call: '', args: {}, returnType: 'any' },
|
|
104
|
+
]);
|
|
105
|
+
assert.deepStrictEqual(parser.parseExpression(''), '');
|
|
106
|
+
assert.deepStrictEqual(parser.parseExpression('()'), {
|
|
107
|
+
call: '',
|
|
108
|
+
args: {},
|
|
109
|
+
returnType: 'any',
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
it('handles string literals with escaped characters', () => {
|
|
113
|
+
assert.deepStrictEqual(parser.parseExpression("'line1\\nline2\\t\\r\\'\\\\x'"), "line1\nline2\t\r'\\x");
|
|
114
|
+
});
|
|
115
|
+
it('handles parsing paths with special characters', () => {
|
|
116
|
+
assert.deepStrictEqual(parser.parseExpression('my-path.with_underscores'), {
|
|
117
|
+
path: 'my-path.with_underscores',
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
it('returns error on missing colon in function args', () => {
|
|
121
|
+
assert.throws(() => {
|
|
122
|
+
parser.parseExpression('add(a 10, b: 20)');
|
|
123
|
+
}, /Expected ':'/);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=expression_parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression_parser.test.js","sourceRoot":"","sources":["../../../../../src/v0_9/basic_catalog/expressions/expression_parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { FunctionImplementation } from '../../catalog/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of the addition function.
|
|
4
|
+
* Adds two numbers 'a' and 'b'.
|
|
5
|
+
*/
|
|
6
|
+
export declare const AddImplementation: FunctionImplementation;
|
|
7
|
+
/**
|
|
8
|
+
* Implementation of the subtraction function.
|
|
9
|
+
* Subtracts 'b' from 'a'.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SubtractImplementation: FunctionImplementation;
|
|
12
|
+
/**
|
|
13
|
+
* Implementation of the multiplication function.
|
|
14
|
+
* Multiplies 'a' and 'b'.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MultiplyImplementation: FunctionImplementation;
|
|
17
|
+
/**
|
|
18
|
+
* Implementation of the division function.
|
|
19
|
+
* Divides 'a' by 'b'. Returns NaN if inputs are invalid, and Infinity if dividing by zero.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DivideImplementation: FunctionImplementation;
|
|
22
|
+
/**
|
|
23
|
+
* Implementation of the equality comparison.
|
|
24
|
+
* Checks if 'a' is strictly equal to 'b'.
|
|
25
|
+
*/
|
|
26
|
+
export declare const EqualsImplementation: FunctionImplementation;
|
|
27
|
+
/**
|
|
28
|
+
* Implementation of the inequality comparison.
|
|
29
|
+
* Checks if 'a' is not strictly equal to 'b'.
|
|
30
|
+
*/
|
|
31
|
+
export declare const NotEqualsImplementation: FunctionImplementation;
|
|
32
|
+
/**
|
|
33
|
+
* Implementation of the greater-than comparison.
|
|
34
|
+
* Checks if 'a' is greater than 'b'.
|
|
35
|
+
*/
|
|
36
|
+
export declare const GreaterThanImplementation: FunctionImplementation;
|
|
37
|
+
/**
|
|
38
|
+
* Implementation of the less-than comparison.
|
|
39
|
+
* Checks if 'a' is less than 'b'.
|
|
40
|
+
*/
|
|
41
|
+
export declare const LessThanImplementation: FunctionImplementation;
|
|
42
|
+
/**
|
|
43
|
+
* Implementation of the logical AND function.
|
|
44
|
+
* Returns true if all values in the array are truthy.
|
|
45
|
+
*/
|
|
46
|
+
export declare const AndImplementation: FunctionImplementation;
|
|
47
|
+
/**
|
|
48
|
+
* Implementation of the logical OR function.
|
|
49
|
+
* Returns true if at least one value in the array is truthy.
|
|
50
|
+
*/
|
|
51
|
+
export declare const OrImplementation: FunctionImplementation;
|
|
52
|
+
/**
|
|
53
|
+
* Implementation of the logical NOT function.
|
|
54
|
+
* Returns the negation of the value.
|
|
55
|
+
*/
|
|
56
|
+
export declare const NotImplementation: FunctionImplementation;
|
|
57
|
+
/**
|
|
58
|
+
* Implementation of the string contains function.
|
|
59
|
+
* Checks if 'string' contains 'substring'.
|
|
60
|
+
*/
|
|
61
|
+
export declare const ContainsImplementation: FunctionImplementation;
|
|
62
|
+
/**
|
|
63
|
+
* Implementation of the string starts-with function.
|
|
64
|
+
* Checks if 'string' starts with 'prefix'.
|
|
65
|
+
*/
|
|
66
|
+
export declare const StartsWithImplementation: FunctionImplementation;
|
|
67
|
+
/**
|
|
68
|
+
* Implementation of the string ends-with function.
|
|
69
|
+
* Checks if 'string' ends with 'suffix'.
|
|
70
|
+
*/
|
|
71
|
+
export declare const EndsWithImplementation: FunctionImplementation;
|
|
72
|
+
/**
|
|
73
|
+
* Implementation of the required validation function.
|
|
74
|
+
* Checks if the value is not null, undefined, empty string, or empty array.
|
|
75
|
+
*/
|
|
76
|
+
export declare const RequiredImplementation: FunctionImplementation;
|
|
77
|
+
/**
|
|
78
|
+
* Implementation of the regex validation function.
|
|
79
|
+
* Checks if the value matches the regular expression pattern.
|
|
80
|
+
* Throws A2uiExpressionError if the pattern is invalid.
|
|
81
|
+
*/
|
|
82
|
+
export declare const RegexImplementation: FunctionImplementation;
|
|
83
|
+
/**
|
|
84
|
+
* Implementation of the length validation function.
|
|
85
|
+
* Checks if the length of the string or array is within [min, max] range.
|
|
86
|
+
*/
|
|
87
|
+
export declare const LengthImplementation: FunctionImplementation;
|
|
88
|
+
/**
|
|
89
|
+
* Implementation of the numeric validation function.
|
|
90
|
+
* Checks if the value is a number and within [min, max] range.
|
|
91
|
+
*/
|
|
92
|
+
export declare const NumericImplementation: FunctionImplementation;
|
|
93
|
+
/**
|
|
94
|
+
* Implementation of the email validation function.
|
|
95
|
+
* Uses a simple regex to check if the value looks like an email address.
|
|
96
|
+
* Note: This is a basic check and not fully compliant with all email standards.
|
|
97
|
+
*/
|
|
98
|
+
export declare const EmailImplementation: FunctionImplementation;
|
|
99
|
+
/**
|
|
100
|
+
* Implementation of the string formatting function.
|
|
101
|
+
* Parses a template string and resolves any embedded expressions using the provided context.
|
|
102
|
+
* Returns a computed signal that updates when referenced signals change.
|
|
103
|
+
*/
|
|
104
|
+
export declare const FormatStringImplementation: FunctionImplementation;
|
|
105
|
+
/**
|
|
106
|
+
* Implementation of the number formatting function.
|
|
107
|
+
* Formats a number using Intl.NumberFormat with specified decimals and grouping.
|
|
108
|
+
*/
|
|
109
|
+
export declare const FormatNumberImplementation: FunctionImplementation;
|
|
110
|
+
/**
|
|
111
|
+
* Implementation of the currency formatting function.
|
|
112
|
+
* Formats a number as currency using Intl.NumberFormat.
|
|
113
|
+
* Falls back to toFixed if formatting fails.
|
|
114
|
+
*/
|
|
115
|
+
export declare const FormatCurrencyImplementation: FunctionImplementation;
|
|
116
|
+
/**
|
|
117
|
+
* Implementation of the date formatting function.
|
|
118
|
+
* Formats a date using date-fns or returns ISO string.
|
|
119
|
+
*/
|
|
120
|
+
export declare const FormatDateImplementation: FunctionImplementation;
|
|
121
|
+
/**
|
|
122
|
+
* Implementation of the pluralization function.
|
|
123
|
+
* Selects the appropriate plural form based on the value using Intl.PluralRules.
|
|
124
|
+
*/
|
|
125
|
+
export declare const PluralizeImplementation: FunctionImplementation;
|
|
126
|
+
/**
|
|
127
|
+
* Implementation of the open URL action.
|
|
128
|
+
* Opens the specified URL in a new window/tab.
|
|
129
|
+
*/
|
|
130
|
+
export declare const OpenUrlImplementation: FunctionImplementation;
|
|
131
|
+
/**
|
|
132
|
+
* Standard function implementations for the Basic Catalog.
|
|
133
|
+
* These functions cover arithmetic, comparison, logic, string manipulation, validation, and formatting.
|
|
134
|
+
*/
|
|
135
|
+
export declare const BASIC_FUNCTIONS: FunctionImplementation[];
|
|
136
|
+
//# sourceMappingURL=basic_functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic_functions.d.ts","sourceRoot":"","sources":["../../../../../src/v0_9/basic_catalog/functions/basic_functions.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAgChC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,wBAG7B,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBAGlC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBAGlC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wBAkBhC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wBAGhC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wBAGnC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,wBAGrC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBAGlC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,wBAE5B,CAAC;AACH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,wBAE3B,CAAC;AACH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,wBAG7B,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBAGlC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wBAGpC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBAGlC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,wBASlC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,wBAa/B,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wBAchC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wBAUjC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,wBAQ/B,CAAC;AAGF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,wBA4BtC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,wBAUtC,CAAC;AACF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,wBAgBxC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wBAepC,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,wBAMnC,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,wBAOjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,sBAAsB,EA0BnD,CAAC"}
|