@supersoniks/concorde 4.9.93 → 4.9.95
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/README.md +16 -30
- package/build-infos.json +1 -1
- package/concorde-3d.bundle.js +3911 -0
- package/concorde-3d.es.js +32635 -0
- package/concorde-core.bundle.js +299 -292
- package/concorde-core.es.js +10104 -6071
- package/concorde-hugging-face-infer.bundle.js +32 -0
- package/concorde-hugging-face-infer.es.js +2952 -0
- package/concorde-shader.bundle.js +105 -0
- package/concorde-shader.es.js +7982 -0
- package/concorde-webgpu.bundle.js +296 -0
- package/concorde-webgpu.es.js +8268 -0
- package/dist/concorde-core.bundle.js +299 -292
- package/dist/concorde-core.es.js +10104 -6071
- package/dist/docs-mock-api-sw.js +110 -0
- package/dist/docs-mock-api-sw.js.map +3 -3
- package/docs/assets/{index-D2Q3JyQ6.css → index-BZiZXMU-.css} +1 -1
- package/docs/assets/index-FmK4JaIM.js +11992 -0
- package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
- package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +1 -1
- package/docs/crawl/docs/_core-concept/dataFlow.html +12 -1
- package/docs/crawl/docs/_decorators/get.html +27 -6
- package/docs/crawl/docs/_decorators/patch.html +6 -0
- package/docs/crawl/docs/_decorators/post.html +8 -0
- package/docs/crawl/docs/_decorators/put.html +6 -0
- package/docs/crawl/docs/_misc/docs-mock-api.html +12 -0
- package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
- package/docs/crawl/docs/_misc/html-integration.html +3 -2
- package/docs/crawl/hubs/decorators.html +36 -31
- package/docs/crawl/hubs/remote-data.html +39 -36
- package/docs/crawl/index.html +2 -0
- package/docs/docs-mock-api-sw.js +110 -0
- package/docs/docs-mock-api-sw.js.map +3 -3
- package/docs/index.html +2 -2
- package/docs/llms-full.txt +240 -5
- package/docs/llms.txt +2 -0
- package/docs/sitemap.xml +6 -0
- package/docs/src/core/components/functional/jsonata/jsonata.md +56 -0
- package/docs/src/core/components/ui/form/checkbox/checkbox.md +1 -1
- package/docs/src/docs/_core-concept/dataFlow.md +10 -1
- package/docs/src/docs/_decorators/get.md +31 -0
- package/docs/src/docs/_decorators/patch.md +9 -0
- package/docs/src/docs/_decorators/post.md +11 -0
- package/docs/src/docs/_decorators/put.md +9 -0
- package/docs/src/docs/_misc/docs-mock-api.md +3 -0
- package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
- package/docs/src/docs/_misc/html-integration.md +2 -0
- package/docs/src/docs/search/docs-search.json +300 -5
- package/docs/src/tsconfig.json +286 -268
- package/package.json +382 -1080
- package/public/docs-mock-api-sw.js +110 -0
- package/public/docs-mock-api-sw.js.map +3 -3
- package/scripts/post-build.mjs +0 -43
- package/scripts/pre-build.mjs +4 -33
- package/scripts/pre-publish.mjs +0 -2
- package/src/core/components/functional/functional.ts +1 -0
- package/src/core/components/functional/jsonata/jsonata.md +56 -0
- package/src/core/components/functional/jsonata/jsonata.spec.ts +202 -0
- package/src/core/components/functional/jsonata/jsonata.ts +116 -0
- package/src/core/components/functional/sdui/sdui.md +0 -0
- package/src/core/components/ui/button/button.ts +2 -2
- package/src/core/components/ui/form/checkbox/checkbox.md +0 -0
- package/src/core/components/ui/form/input/input.ts +0 -0
- package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -0
- package/src/core/components/ui/form/select/select.ts +0 -0
- package/src/core/components/ui/form/textarea/textarea.ts +0 -0
- package/src/core/decorators/Subscriber.ts +2 -0
- package/src/core/decorators/subscriber/derive.ts +95 -0
- package/src/core/utils/derive.spec.ts +190 -0
- package/src/core/utils/derive.ts +357 -0
- package/src/core/utils/jsonataHelpers.ts +100 -0
- package/src/core/utils/jsonataRuntime.ts +88 -0
- package/src/docs/_core-concept/dataFlow.md +9 -0
- package/src/docs/_getting-started/create-a-component.md +0 -0
- package/src/docs/_misc/docs-mock-api.md +3 -0
- package/src/docs/components/docs-demo-sources.ts +26 -0
- package/src/docs/docs.ts +1 -0
- package/src/docs/example/docs-jsonata-demos.ts +128 -0
- package/src/docs/mock-api/fixtures-jsonata.ts +131 -0
- package/src/docs/mock-api/router.ts +26 -0
- package/src/docs/navigation/navigation.ts +4 -0
- package/src/docs/search/docs-search.json +2210 -615
- package/src/tsconfig.json +327 -0
- package/src/tsconfig.tsbuildinfo +1 -1
- package/src/utils.ts +13 -0
- package/vite/config.js +23 -35
- package/dist/js/components.js +0 -12
- package/dist/js/components.js.map +0 -1
- package/dist/js/concorde-loaded.js +0 -5
- package/dist/js/concorde-loaded.js.map +0 -1
- package/dist/js/core/_types/endpoint.js +0 -5
- package/dist/js/core/_types/endpoint.js.map +0 -1
- package/dist/js/core/_types/key.js +0 -2
- package/dist/js/core/_types/key.js.map +0 -1
- package/dist/js/core/_types/types.js +0 -3
- package/dist/js/core/_types/types.js.map +0 -1
- package/dist/js/core/components/functional/date/date.js +0 -272
- package/dist/js/core/components/functional/date/date.js.map +0 -1
- package/dist/js/core/components/functional/example/example.js +0 -44
- package/dist/js/core/components/functional/example/example.js.map +0 -1
- package/dist/js/core/components/functional/fetch/fetch.js +0 -79
- package/dist/js/core/components/functional/fetch/fetch.js.map +0 -1
- package/dist/js/core/components/functional/functional.js +0 -17
- package/dist/js/core/components/functional/functional.js.map +0 -1
- package/dist/js/core/components/functional/if/if.js +0 -39
- package/dist/js/core/components/functional/if/if.js.map +0 -1
- package/dist/js/core/components/functional/list/list.js +0 -341
- package/dist/js/core/components/functional/list/list.js.map +0 -1
- package/dist/js/core/components/functional/mix/mix.js +0 -103
- package/dist/js/core/components/functional/mix/mix.js.map +0 -1
- package/dist/js/core/components/functional/queue/queue.js +0 -450
- package/dist/js/core/components/functional/queue/queue.js.map +0 -1
- package/dist/js/core/components/functional/router/redirect.js +0 -54
- package/dist/js/core/components/functional/router/redirect.js.map +0 -1
- package/dist/js/core/components/functional/router/router.js +0 -179
- package/dist/js/core/components/functional/router/router.js.map +0 -1
- package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js +0 -216
- package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js.map +0 -1
- package/dist/js/core/components/functional/sdui/default-library.json +0 -108
- package/dist/js/core/components/functional/sdui/sdui-utils.js +0 -64
- package/dist/js/core/components/functional/sdui/sdui-utils.js.map +0 -1
- package/dist/js/core/components/functional/sdui/sdui.js +0 -266
- package/dist/js/core/components/functional/sdui/sdui.js.map +0 -1
- package/dist/js/core/components/functional/sdui/types.js +0 -2
- package/dist/js/core/components/functional/sdui/types.js.map +0 -1
- package/dist/js/core/components/functional/sonic-scope/sonic-scope.js +0 -22
- package/dist/js/core/components/functional/sonic-scope/sonic-scope.js.map +0 -1
- package/dist/js/core/components/functional/states/states.js +0 -172
- package/dist/js/core/components/functional/states/states.js.map +0 -1
- package/dist/js/core/components/functional/submit/submit.js +0 -284
- package/dist/js/core/components/functional/submit/submit.js.map +0 -1
- package/dist/js/core/components/functional/subscriber/subscriber.js +0 -39
- package/dist/js/core/components/functional/subscriber/subscriber.js.map +0 -1
- package/dist/js/core/components/functional/translation/translation.js +0 -28
- package/dist/js/core/components/functional/translation/translation.js.map +0 -1
- package/dist/js/core/components/functional/value/value.js +0 -28
- package/dist/js/core/components/functional/value/value.js.map +0 -1
- package/dist/js/core/components/ui/_css/scroll.js +0 -27
- package/dist/js/core/components/ui/_css/scroll.js.map +0 -1
- package/dist/js/core/components/ui/_css/shadow.js +0 -22
- package/dist/js/core/components/ui/_css/shadow.js.map +0 -1
- package/dist/js/core/components/ui/_css/size.js +0 -36
- package/dist/js/core/components/ui/_css/size.js.map +0 -1
- package/dist/js/core/components/ui/_css/type.js +0 -92
- package/dist/js/core/components/ui/_css/type.js.map +0 -1
- package/dist/js/core/components/ui/alert/alert.js +0 -213
- package/dist/js/core/components/ui/alert/alert.js.map +0 -1
- package/dist/js/core/components/ui/alert-messages/alert-messages.js +0 -68
- package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +0 -1
- package/dist/js/core/components/ui/badge/badge.js +0 -199
- package/dist/js/core/components/ui/badge/badge.js.map +0 -1
- package/dist/js/core/components/ui/button/button.js +0 -697
- package/dist/js/core/components/ui/button/button.js.map +0 -1
- package/dist/js/core/components/ui/captcha/altchaStyles.js +0 -226
- package/dist/js/core/components/ui/captcha/altchaStyles.js.map +0 -1
- package/dist/js/core/components/ui/captcha/captcha.js +0 -167
- package/dist/js/core/components/ui/captcha/captcha.js.map +0 -1
- package/dist/js/core/components/ui/card/card-footer.js +0 -26
- package/dist/js/core/components/ui/card/card-footer.js.map +0 -1
- package/dist/js/core/components/ui/card/card-header-descripton.js +0 -30
- package/dist/js/core/components/ui/card/card-header-descripton.js.map +0 -1
- package/dist/js/core/components/ui/card/card-header.js +0 -79
- package/dist/js/core/components/ui/card/card-header.js.map +0 -1
- package/dist/js/core/components/ui/card/card-main.js +0 -26
- package/dist/js/core/components/ui/card/card-main.js.map +0 -1
- package/dist/js/core/components/ui/card/card.js +0 -67
- package/dist/js/core/components/ui/card/card.js.map +0 -1
- package/dist/js/core/components/ui/divider/divider.js +0 -200
- package/dist/js/core/components/ui/divider/divider.js.map +0 -1
- package/dist/js/core/components/ui/form/checkbox/checkbox.js +0 -257
- package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +0 -1
- package/dist/js/core/components/ui/form/css/form-control.js +0 -393
- package/dist/js/core/components/ui/form/css/form-control.js.map +0 -1
- package/dist/js/core/components/ui/form/fieldset/fieldset.js +0 -124
- package/dist/js/core/components/ui/form/fieldset/fieldset.js.map +0 -1
- package/dist/js/core/components/ui/form/fieldset/legend-description.js +0 -38
- package/dist/js/core/components/ui/form/fieldset/legend-description.js.map +0 -1
- package/dist/js/core/components/ui/form/fieldset/legend.js +0 -130
- package/dist/js/core/components/ui/form/fieldset/legend.js.map +0 -1
- package/dist/js/core/components/ui/form/form-actions/form-actions.js +0 -47
- package/dist/js/core/components/ui/form/form-actions/form-actions.js.map +0 -1
- package/dist/js/core/components/ui/form/form-layout/form-layout.js +0 -84
- package/dist/js/core/components/ui/form/form-layout/form-layout.js.map +0 -1
- package/dist/js/core/components/ui/form/input/input.js +0 -316
- package/dist/js/core/components/ui/form/input/input.js.map +0 -1
- package/dist/js/core/components/ui/form/input/password-helper.js +0 -134
- package/dist/js/core/components/ui/form/input/password-helper.js.map +0 -1
- package/dist/js/core/components/ui/form/input/same-value-helper.js +0 -85
- package/dist/js/core/components/ui/form/input/same-value-helper.js.map +0 -1
- package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +0 -405
- package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +0 -1
- package/dist/js/core/components/ui/form/radio/radio.js +0 -63
- package/dist/js/core/components/ui/form/radio/radio.js.map +0 -1
- package/dist/js/core/components/ui/form/select/select.js +0 -323
- package/dist/js/core/components/ui/form/select/select.js.map +0 -1
- package/dist/js/core/components/ui/form/switch/switch.js +0 -90
- package/dist/js/core/components/ui/form/switch/switch.js.map +0 -1
- package/dist/js/core/components/ui/form/textarea/textarea.js +0 -162
- package/dist/js/core/components/ui/form/textarea/textarea.js.map +0 -1
- package/dist/js/core/components/ui/group/group.js +0 -128
- package/dist/js/core/components/ui/group/group.js.map +0 -1
- package/dist/js/core/components/ui/icon/icon.js +0 -145
- package/dist/js/core/components/ui/icon/icon.js.map +0 -1
- package/dist/js/core/components/ui/icon/icons.js +0 -184
- package/dist/js/core/components/ui/icon/icons.js.map +0 -1
- package/dist/js/core/components/ui/icon/icons.json +0 -1
- package/dist/js/core/components/ui/image/image.js +0 -160
- package/dist/js/core/components/ui/image/image.js.map +0 -1
- package/dist/js/core/components/ui/link/link.js +0 -125
- package/dist/js/core/components/ui/link/link.js.map +0 -1
- package/dist/js/core/components/ui/loader/loader.js +0 -106
- package/dist/js/core/components/ui/loader/loader.js.map +0 -1
- package/dist/js/core/components/ui/loader/styles/fixed.js +0 -56
- package/dist/js/core/components/ui/loader/styles/fixed.js.map +0 -1
- package/dist/js/core/components/ui/loader/styles/inline.js +0 -70
- package/dist/js/core/components/ui/loader/styles/inline.js.map +0 -1
- package/dist/js/core/components/ui/menu/menu-item.js +0 -35
- package/dist/js/core/components/ui/menu/menu-item.js.map +0 -1
- package/dist/js/core/components/ui/menu/menu.js +0 -436
- package/dist/js/core/components/ui/menu/menu.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-actions.js +0 -44
- package/dist/js/core/components/ui/modal/modal-actions.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-close.js +0 -56
- package/dist/js/core/components/ui/modal/modal-close.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-content.js +0 -27
- package/dist/js/core/components/ui/modal/modal-content.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-subtitle.js +0 -34
- package/dist/js/core/components/ui/modal/modal-subtitle.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-title.js +0 -35
- package/dist/js/core/components/ui/modal/modal-title.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal-utils.js +0 -32
- package/dist/js/core/components/ui/modal/modal-utils.js.map +0 -1
- package/dist/js/core/components/ui/modal/modal.js +0 -568
- package/dist/js/core/components/ui/modal/modal.js.map +0 -1
- package/dist/js/core/components/ui/pop/pop.js +0 -337
- package/dist/js/core/components/ui/pop/pop.js.map +0 -1
- package/dist/js/core/components/ui/progress/progress.js +0 -164
- package/dist/js/core/components/ui/progress/progress.js.map +0 -1
- package/dist/js/core/components/ui/table/table-caption.js +0 -29
- package/dist/js/core/components/ui/table/table-caption.js.map +0 -1
- package/dist/js/core/components/ui/table/table-tbody.js +0 -41
- package/dist/js/core/components/ui/table/table-tbody.js.map +0 -1
- package/dist/js/core/components/ui/table/table-td.js +0 -69
- package/dist/js/core/components/ui/table/table-td.js.map +0 -1
- package/dist/js/core/components/ui/table/table-tfoot.js +0 -28
- package/dist/js/core/components/ui/table/table-tfoot.js.map +0 -1
- package/dist/js/core/components/ui/table/table-th.js +0 -80
- package/dist/js/core/components/ui/table/table-th.js.map +0 -1
- package/dist/js/core/components/ui/table/table-thead.js +0 -26
- package/dist/js/core/components/ui/table/table-thead.js.map +0 -1
- package/dist/js/core/components/ui/table/table-tr.js +0 -67
- package/dist/js/core/components/ui/table/table-tr.js.map +0 -1
- package/dist/js/core/components/ui/table/table.js +0 -106
- package/dist/js/core/components/ui/table/table.js.map +0 -1
- package/dist/js/core/components/ui/theme/theme-collection/core-variables.js +0 -74
- package/dist/js/core/components/ui/theme/theme-collection/core-variables.js.map +0 -1
- package/dist/js/core/components/ui/theme/theme-collection/dark.js +0 -39
- package/dist/js/core/components/ui/theme/theme-collection/dark.js.map +0 -1
- package/dist/js/core/components/ui/theme/theme-collection/light.js +0 -32
- package/dist/js/core/components/ui/theme/theme-collection/light.js.map +0 -1
- package/dist/js/core/components/ui/theme/theme.js +0 -150
- package/dist/js/core/components/ui/theme/theme.js.map +0 -1
- package/dist/js/core/components/ui/toast/message-subscriber.js +0 -41
- package/dist/js/core/components/ui/toast/message-subscriber.js.map +0 -1
- package/dist/js/core/components/ui/toast/toast-item.js +0 -379
- package/dist/js/core/components/ui/toast/toast-item.js.map +0 -1
- package/dist/js/core/components/ui/toast/toast.js +0 -269
- package/dist/js/core/components/ui/toast/toast.js.map +0 -1
- package/dist/js/core/components/ui/toast/types.js +0 -2
- package/dist/js/core/components/ui/toast/types.js.map +0 -1
- package/dist/js/core/components/ui/tooltip/tooltip.js +0 -219
- package/dist/js/core/components/ui/tooltip/tooltip.js.map +0 -1
- package/dist/js/core/components/ui/ui.js +0 -41
- package/dist/js/core/components/ui/ui.js.map +0 -1
- package/dist/js/core/core.js +0 -14
- package/dist/js/core/core.js.map +0 -1
- package/dist/js/core/decorators/Subscriber.js +0 -9
- package/dist/js/core/decorators/Subscriber.js.map +0 -1
- package/dist/js/core/decorators/api.js +0 -806
- package/dist/js/core/decorators/api.js.map +0 -1
- package/dist/js/core/decorators/lifecycle.js +0 -67
- package/dist/js/core/decorators/lifecycle.js.map +0 -1
- package/dist/js/core/decorators/subscriber/ancestorAttribute.js +0 -27
- package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +0 -1
- package/dist/js/core/decorators/subscriber/autoFill.js +0 -26
- package/dist/js/core/decorators/subscriber/autoFill.js.map +0 -1
- package/dist/js/core/decorators/subscriber/autoSubscribe.js +0 -46
- package/dist/js/core/decorators/subscriber/autoSubscribe.js.map +0 -1
- package/dist/js/core/decorators/subscriber/bind.js +0 -150
- package/dist/js/core/decorators/subscriber/bind.js.map +0 -1
- package/dist/js/core/decorators/subscriber/common.js +0 -44
- package/dist/js/core/decorators/subscriber/common.js.map +0 -1
- package/dist/js/core/decorators/subscriber/dynamicPath.js +0 -75
- package/dist/js/core/decorators/subscriber/dynamicPath.js.map +0 -1
- package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js +0 -138
- package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js.map +0 -1
- package/dist/js/core/decorators/subscriber/handle.js +0 -22
- package/dist/js/core/decorators/subscriber/handle.js.map +0 -1
- package/dist/js/core/decorators/subscriber/onAssign.js +0 -199
- package/dist/js/core/decorators/subscriber/onAssign.js.map +0 -1
- package/dist/js/core/decorators/subscriber/publish.js +0 -108
- package/dist/js/core/decorators/subscriber/publish.js.map +0 -1
- package/dist/js/core/decorators/subscriber/publisherPath.js +0 -16
- package/dist/js/core/decorators/subscriber/publisherPath.js.map +0 -1
- package/dist/js/core/decorators/subscriber/subscribe.js +0 -20
- package/dist/js/core/decorators/subscriber/subscribe.js.map +0 -1
- package/dist/js/core/directives/DataProvider.js +0 -127
- package/dist/js/core/directives/DataProvider.js.map +0 -1
- package/dist/js/core/directives/Wording.js +0 -221
- package/dist/js/core/directives/Wording.js.map +0 -1
- package/dist/js/core/mixins/Fetcher.js +0 -325
- package/dist/js/core/mixins/Fetcher.js.map +0 -1
- package/dist/js/core/mixins/FormCheckable.js +0 -313
- package/dist/js/core/mixins/FormCheckable.js.map +0 -1
- package/dist/js/core/mixins/FormElement.js +0 -304
- package/dist/js/core/mixins/FormElement.js.map +0 -1
- package/dist/js/core/mixins/FormInput.js +0 -82
- package/dist/js/core/mixins/FormInput.js.map +0 -1
- package/dist/js/core/mixins/Subscriber.js +0 -354
- package/dist/js/core/mixins/Subscriber.js.map +0 -1
- package/dist/js/core/mixins/TemplatesContainer.js +0 -70
- package/dist/js/core/mixins/TemplatesContainer.js.map +0 -1
- package/dist/js/core/mixins/mixins.js +0 -7
- package/dist/js/core/mixins/mixins.js.map +0 -1
- package/dist/js/core/utils/AncestorAttributeObserver.js +0 -140
- package/dist/js/core/utils/AncestorAttributeObserver.js.map +0 -1
- package/dist/js/core/utils/Arrays.js +0 -141
- package/dist/js/core/utils/Arrays.js.map +0 -1
- package/dist/js/core/utils/DataBindObserver.js +0 -265
- package/dist/js/core/utils/DataBindObserver.js.map +0 -1
- package/dist/js/core/utils/Electron.js +0 -14
- package/dist/js/core/utils/Electron.js.map +0 -1
- package/dist/js/core/utils/Format.js +0 -43
- package/dist/js/core/utils/Format.js.map +0 -1
- package/dist/js/core/utils/HTML.js +0 -272
- package/dist/js/core/utils/HTML.js.map +0 -1
- package/dist/js/core/utils/LocationHandler.js +0 -143
- package/dist/js/core/utils/LocationHandler.js.map +0 -1
- package/dist/js/core/utils/Objects.js +0 -111
- package/dist/js/core/utils/Objects.js.map +0 -1
- package/dist/js/core/utils/PublisherProxy.js +0 -946
- package/dist/js/core/utils/PublisherProxy.js.map +0 -1
- package/dist/js/core/utils/SafariScrollGuard.js +0 -384
- package/dist/js/core/utils/SafariScrollGuard.js.map +0 -1
- package/dist/js/core/utils/Utils.js +0 -19
- package/dist/js/core/utils/Utils.js.map +0 -1
- package/dist/js/core/utils/aesCrypto.js +0 -98
- package/dist/js/core/utils/aesCrypto.js.map +0 -1
- package/dist/js/core/utils/api.js +0 -595
- package/dist/js/core/utils/api.js.map +0 -1
- package/dist/js/core/utils/dataProviderKey.js +0 -64
- package/dist/js/core/utils/dataProviderKey.js.map +0 -1
- package/dist/js/core/utils/endpoint.js +0 -74
- package/dist/js/core/utils/endpoint.js.map +0 -1
- package/dist/js/core/utils/route.js +0 -149
- package/dist/js/core/utils/route.js.map +0 -1
- package/dist/js/core/utils/url-pattern.js +0 -3
- package/dist/js/core/utils/url-pattern.js.map +0 -1
- package/dist/js/dataprovider.js +0 -2
- package/dist/js/dataprovider.js.map +0 -1
- package/dist/js/decorators.js +0 -43
- package/dist/js/decorators.js.map +0 -1
- package/dist/js/directives.js +0 -30
- package/dist/js/directives.js.map +0 -1
- package/dist/js/index.js +0 -8
- package/dist/js/index.js.map +0 -1
- package/dist/js/mixins.js +0 -23
- package/dist/js/mixins.js.map +0 -1
- package/dist/js/test-utils/TestUtils.js +0 -10
- package/dist/js/test-utils/TestUtils.js.map +0 -1
- package/dist/js/utils.js +0 -44
- package/dist/js/utils.js.map +0 -1
- package/dist/types/components.d.ts +0 -5
- package/dist/types/components.d.ts.map +0 -1
- package/dist/types/concorde-loaded.d.ts +0 -2
- package/dist/types/concorde-loaded.d.ts.map +0 -1
- package/dist/types/core/_types/endpoint.d.ts +0 -5
- package/dist/types/core/_types/endpoint.d.ts.map +0 -1
- package/dist/types/core/_types/key.d.ts +0 -2
- package/dist/types/core/_types/key.d.ts.map +0 -1
- package/dist/types/core/_types/types.d.ts +0 -28
- package/dist/types/core/_types/types.d.ts.map +0 -1
- package/dist/types/core/components/functional/date/date.d.ts +0 -52
- package/dist/types/core/components/functional/date/date.d.ts.map +0 -1
- package/dist/types/core/components/functional/example/example.d.ts +0 -15
- package/dist/types/core/components/functional/example/example.d.ts.map +0 -1
- package/dist/types/core/components/functional/fetch/fetch.d.ts +0 -102
- package/dist/types/core/components/functional/fetch/fetch.d.ts.map +0 -1
- package/dist/types/core/components/functional/functional.d.ts +0 -17
- package/dist/types/core/components/functional/functional.d.ts.map +0 -1
- package/dist/types/core/components/functional/if/if.d.ts +0 -13
- package/dist/types/core/components/functional/if/if.d.ts.map +0 -1
- package/dist/types/core/components/functional/list/list.d.ts +0 -149
- package/dist/types/core/components/functional/list/list.d.ts.map +0 -1
- package/dist/types/core/components/functional/mix/mix.d.ts +0 -23
- package/dist/types/core/components/functional/mix/mix.d.ts.map +0 -1
- package/dist/types/core/components/functional/queue/queue.d.ts +0 -93
- package/dist/types/core/components/functional/queue/queue.d.ts.map +0 -1
- package/dist/types/core/components/functional/router/redirect.d.ts +0 -19
- package/dist/types/core/components/functional/router/redirect.d.ts.map +0 -1
- package/dist/types/core/components/functional/router/router.d.ts +0 -46
- package/dist/types/core/components/functional/router/router.d.ts.map +0 -1
- package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts +0 -59
- package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts.map +0 -1
- package/dist/types/core/components/functional/sdui/sdui-utils.d.ts +0 -6
- package/dist/types/core/components/functional/sdui/sdui-utils.d.ts.map +0 -1
- package/dist/types/core/components/functional/sdui/sdui.d.ts +0 -145
- package/dist/types/core/components/functional/sdui/sdui.d.ts.map +0 -1
- package/dist/types/core/components/functional/sdui/types.d.ts +0 -38
- package/dist/types/core/components/functional/sdui/types.d.ts.map +0 -1
- package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts +0 -6
- package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts.map +0 -1
- package/dist/types/core/components/functional/states/states.d.ts +0 -42
- package/dist/types/core/components/functional/states/states.d.ts.map +0 -1
- package/dist/types/core/components/functional/submit/submit.d.ts +0 -37
- package/dist/types/core/components/functional/submit/submit.d.ts.map +0 -1
- package/dist/types/core/components/functional/subscriber/subscriber.d.ts +0 -13
- package/dist/types/core/components/functional/subscriber/subscriber.d.ts.map +0 -1
- package/dist/types/core/components/functional/translation/translation.d.ts +0 -7
- package/dist/types/core/components/functional/translation/translation.d.ts.map +0 -1
- package/dist/types/core/components/functional/value/value.d.ts +0 -8
- package/dist/types/core/components/functional/value/value.d.ts.map +0 -1
- package/dist/types/core/components/ui/_css/scroll.d.ts +0 -2
- package/dist/types/core/components/ui/_css/scroll.d.ts.map +0 -1
- package/dist/types/core/components/ui/_css/shadow.d.ts +0 -3
- package/dist/types/core/components/ui/_css/shadow.d.ts.map +0 -1
- package/dist/types/core/components/ui/_css/size.d.ts +0 -3
- package/dist/types/core/components/ui/_css/size.d.ts.map +0 -1
- package/dist/types/core/components/ui/_css/type.d.ts +0 -3
- package/dist/types/core/components/ui/_css/type.d.ts.map +0 -1
- package/dist/types/core/components/ui/alert/alert.d.ts +0 -37
- package/dist/types/core/components/ui/alert/alert.d.ts.map +0 -1
- package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts +0 -15
- package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +0 -1
- package/dist/types/core/components/ui/badge/badge.d.ts +0 -27
- package/dist/types/core/components/ui/badge/badge.d.ts.map +0 -1
- package/dist/types/core/components/ui/button/button.d.ts +0 -180
- package/dist/types/core/components/ui/button/button.d.ts.map +0 -1
- package/dist/types/core/components/ui/captcha/altchaStyles.d.ts +0 -2
- package/dist/types/core/components/ui/captcha/altchaStyles.d.ts.map +0 -1
- package/dist/types/core/components/ui/captcha/captcha.d.ts +0 -30
- package/dist/types/core/components/ui/captcha/captcha.d.ts.map +0 -1
- package/dist/types/core/components/ui/card/card-footer.d.ts +0 -6
- package/dist/types/core/components/ui/card/card-footer.d.ts.map +0 -1
- package/dist/types/core/components/ui/card/card-header-descripton.d.ts +0 -6
- package/dist/types/core/components/ui/card/card-header-descripton.d.ts.map +0 -1
- package/dist/types/core/components/ui/card/card-header.d.ts +0 -9
- package/dist/types/core/components/ui/card/card-header.d.ts.map +0 -1
- package/dist/types/core/components/ui/card/card-main.d.ts +0 -6
- package/dist/types/core/components/ui/card/card-main.d.ts.map +0 -1
- package/dist/types/core/components/ui/card/card.d.ts +0 -13
- package/dist/types/core/components/ui/card/card.d.ts.map +0 -1
- package/dist/types/core/components/ui/divider/divider.d.ts +0 -16
- package/dist/types/core/components/ui/divider/divider.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +0 -176
- package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/css/form-control.d.ts +0 -5
- package/dist/types/core/components/ui/form/css/form-control.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts +0 -24
- package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts +0 -6
- package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/fieldset/legend.d.ts +0 -17
- package/dist/types/core/components/ui/form/fieldset/legend.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts +0 -8
- package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts +0 -13
- package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/input/input.d.ts +0 -123
- package/dist/types/core/components/ui/form/input/input.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/input/password-helper.d.ts +0 -26
- package/dist/types/core/components/ui/form/input/password-helper.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/input/same-value-helper.d.ts +0 -17
- package/dist/types/core/components/ui/form/input/same-value-helper.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +0 -155
- package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/radio/radio.d.ts +0 -15
- package/dist/types/core/components/ui/form/radio/radio.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/select/select.d.ts +0 -59
- package/dist/types/core/components/ui/form/select/select.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/switch/switch.d.ts +0 -6
- package/dist/types/core/components/ui/form/switch/switch.d.ts.map +0 -1
- package/dist/types/core/components/ui/form/textarea/textarea.d.ts +0 -94
- package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +0 -1
- package/dist/types/core/components/ui/group/group.d.ts +0 -17
- package/dist/types/core/components/ui/group/group.d.ts.map +0 -1
- package/dist/types/core/components/ui/icon/icon.d.ts +0 -30
- package/dist/types/core/components/ui/icon/icon.d.ts.map +0 -1
- package/dist/types/core/components/ui/icon/icons.d.ts +0 -13
- package/dist/types/core/components/ui/icon/icons.d.ts.map +0 -1
- package/dist/types/core/components/ui/image/image.d.ts +0 -16
- package/dist/types/core/components/ui/image/image.d.ts.map +0 -1
- package/dist/types/core/components/ui/link/link.d.ts +0 -30
- package/dist/types/core/components/ui/link/link.d.ts.map +0 -1
- package/dist/types/core/components/ui/loader/loader.d.ts +0 -24
- package/dist/types/core/components/ui/loader/loader.d.ts.map +0 -1
- package/dist/types/core/components/ui/loader/styles/fixed.d.ts +0 -2
- package/dist/types/core/components/ui/loader/styles/fixed.d.ts.map +0 -1
- package/dist/types/core/components/ui/loader/styles/inline.d.ts +0 -2
- package/dist/types/core/components/ui/loader/styles/inline.d.ts.map +0 -1
- package/dist/types/core/components/ui/menu/menu-item.d.ts +0 -6
- package/dist/types/core/components/ui/menu/menu-item.d.ts.map +0 -1
- package/dist/types/core/components/ui/menu/menu.d.ts +0 -52
- package/dist/types/core/components/ui/menu/menu.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-actions.d.ts +0 -9
- package/dist/types/core/components/ui/modal/modal-actions.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-close.d.ts +0 -11
- package/dist/types/core/components/ui/modal/modal-close.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-content.d.ts +0 -6
- package/dist/types/core/components/ui/modal/modal-content.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-subtitle.d.ts +0 -6
- package/dist/types/core/components/ui/modal/modal-subtitle.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-title.d.ts +0 -6
- package/dist/types/core/components/ui/modal/modal-title.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal-utils.d.ts +0 -4
- package/dist/types/core/components/ui/modal/modal-utils.d.ts.map +0 -1
- package/dist/types/core/components/ui/modal/modal.d.ts +0 -79
- package/dist/types/core/components/ui/modal/modal.d.ts.map +0 -1
- package/dist/types/core/components/ui/pop/pop.d.ts +0 -42
- package/dist/types/core/components/ui/pop/pop.d.ts.map +0 -1
- package/dist/types/core/components/ui/progress/progress.d.ts +0 -12
- package/dist/types/core/components/ui/progress/progress.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-caption.d.ts +0 -6
- package/dist/types/core/components/ui/table/table-caption.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-tbody.d.ts +0 -6
- package/dist/types/core/components/ui/table/table-tbody.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-td.d.ts +0 -13
- package/dist/types/core/components/ui/table/table-td.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-tfoot.d.ts +0 -6
- package/dist/types/core/components/ui/table/table-tfoot.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-th.d.ts +0 -12
- package/dist/types/core/components/ui/table/table-th.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-thead.d.ts +0 -6
- package/dist/types/core/components/ui/table/table-thead.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table-tr.d.ts +0 -14
- package/dist/types/core/components/ui/table/table-tr.d.ts.map +0 -1
- package/dist/types/core/components/ui/table/table.d.ts +0 -18
- package/dist/types/core/components/ui/table/table.d.ts.map +0 -1
- package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts +0 -2
- package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts.map +0 -1
- package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts +0 -2
- package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts.map +0 -1
- package/dist/types/core/components/ui/theme/theme-collection/light.d.ts +0 -2
- package/dist/types/core/components/ui/theme/theme-collection/light.d.ts.map +0 -1
- package/dist/types/core/components/ui/theme/theme.d.ts +0 -20
- package/dist/types/core/components/ui/theme/theme.d.ts.map +0 -1
- package/dist/types/core/components/ui/toast/message-subscriber.d.ts +0 -19
- package/dist/types/core/components/ui/toast/message-subscriber.d.ts.map +0 -1
- package/dist/types/core/components/ui/toast/toast-item.d.ts +0 -41
- package/dist/types/core/components/ui/toast/toast-item.d.ts.map +0 -1
- package/dist/types/core/components/ui/toast/toast.d.ts +0 -28
- package/dist/types/core/components/ui/toast/toast.d.ts.map +0 -1
- package/dist/types/core/components/ui/toast/types.d.ts +0 -12
- package/dist/types/core/components/ui/toast/types.d.ts.map +0 -1
- package/dist/types/core/components/ui/tooltip/tooltip.d.ts +0 -21
- package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +0 -1
- package/dist/types/core/components/ui/ui.d.ts +0 -35
- package/dist/types/core/components/ui/ui.d.ts.map +0 -1
- package/dist/types/core/core.d.ts +0 -5
- package/dist/types/core/core.d.ts.map +0 -1
- package/dist/types/core/decorators/Subscriber.d.ts +0 -11
- package/dist/types/core/decorators/Subscriber.d.ts.map +0 -1
- package/dist/types/core/decorators/api.d.ts +0 -155
- package/dist/types/core/decorators/api.d.ts.map +0 -1
- package/dist/types/core/decorators/lifecycle.d.ts +0 -19
- package/dist/types/core/decorators/lifecycle.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +0 -11
- package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/autoFill.d.ts +0 -2
- package/dist/types/core/decorators/subscriber/autoFill.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts +0 -2
- package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/bind.d.ts +0 -28
- package/dist/types/core/decorators/subscriber/bind.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/common.d.ts +0 -14
- package/dist/types/core/decorators/subscriber/common.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/dynamicPath.d.ts +0 -23
- package/dist/types/core/decorators/subscriber/dynamicPath.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts +0 -42
- package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/handle.d.ts +0 -74
- package/dist/types/core/decorators/subscriber/handle.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/onAssign.d.ts +0 -53
- package/dist/types/core/decorators/subscriber/onAssign.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/publish.d.ts +0 -23
- package/dist/types/core/decorators/subscriber/publish.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/publisherPath.d.ts +0 -3
- package/dist/types/core/decorators/subscriber/publisherPath.d.ts.map +0 -1
- package/dist/types/core/decorators/subscriber/subscribe.d.ts +0 -20
- package/dist/types/core/decorators/subscriber/subscribe.d.ts.map +0 -1
- package/dist/types/core/directives/DataProvider.d.ts +0 -45
- package/dist/types/core/directives/DataProvider.d.ts.map +0 -1
- package/dist/types/core/directives/Wording.d.ts +0 -44
- package/dist/types/core/directives/Wording.d.ts.map +0 -1
- package/dist/types/core/mixins/Fetcher.d.ts +0 -108
- package/dist/types/core/mixins/Fetcher.d.ts.map +0 -1
- package/dist/types/core/mixins/FormCheckable.d.ts +0 -95
- package/dist/types/core/mixins/FormCheckable.d.ts.map +0 -1
- package/dist/types/core/mixins/FormElement.d.ts +0 -37
- package/dist/types/core/mixins/FormElement.d.ts.map +0 -1
- package/dist/types/core/mixins/FormInput.d.ts +0 -79
- package/dist/types/core/mixins/FormInput.d.ts.map +0 -1
- package/dist/types/core/mixins/Subscriber.d.ts +0 -38
- package/dist/types/core/mixins/Subscriber.d.ts.map +0 -1
- package/dist/types/core/mixins/TemplatesContainer.d.ts +0 -14
- package/dist/types/core/mixins/TemplatesContainer.d.ts.map +0 -1
- package/dist/types/core/mixins/mixins.d.ts +0 -7
- package/dist/types/core/mixins/mixins.d.ts.map +0 -1
- package/dist/types/core/utils/AncestorAttributeObserver.d.ts +0 -38
- package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +0 -1
- package/dist/types/core/utils/Arrays.d.ts +0 -98
- package/dist/types/core/utils/Arrays.d.ts.map +0 -1
- package/dist/types/core/utils/DataBindObserver.d.ts +0 -84
- package/dist/types/core/utils/DataBindObserver.d.ts.map +0 -1
- package/dist/types/core/utils/Electron.d.ts +0 -8
- package/dist/types/core/utils/Electron.d.ts.map +0 -1
- package/dist/types/core/utils/Format.d.ts +0 -13
- package/dist/types/core/utils/Format.d.ts.map +0 -1
- package/dist/types/core/utils/HTML.d.ts +0 -79
- package/dist/types/core/utils/HTML.d.ts.map +0 -1
- package/dist/types/core/utils/LocationHandler.d.ts +0 -48
- package/dist/types/core/utils/LocationHandler.d.ts.map +0 -1
- package/dist/types/core/utils/Objects.d.ts +0 -31
- package/dist/types/core/utils/Objects.d.ts.map +0 -1
- package/dist/types/core/utils/PublisherProxy.d.ts +0 -230
- package/dist/types/core/utils/PublisherProxy.d.ts.map +0 -1
- package/dist/types/core/utils/SafariScrollGuard.d.ts +0 -36
- package/dist/types/core/utils/SafariScrollGuard.d.ts.map +0 -1
- package/dist/types/core/utils/Utils.d.ts +0 -6
- package/dist/types/core/utils/Utils.d.ts.map +0 -1
- package/dist/types/core/utils/aesCrypto.d.ts +0 -53
- package/dist/types/core/utils/aesCrypto.d.ts.map +0 -1
- package/dist/types/core/utils/api.d.ts +0 -173
- package/dist/types/core/utils/api.d.ts.map +0 -1
- package/dist/types/core/utils/dataProviderKey.d.ts +0 -56
- package/dist/types/core/utils/dataProviderKey.d.ts.map +0 -1
- package/dist/types/core/utils/endpoint.d.ts +0 -37
- package/dist/types/core/utils/endpoint.d.ts.map +0 -1
- package/dist/types/core/utils/route.d.ts +0 -41
- package/dist/types/core/utils/route.d.ts.map +0 -1
- package/dist/types/core/utils/url-pattern.d.ts +0 -3
- package/dist/types/core/utils/url-pattern.d.ts.map +0 -1
- package/dist/types/dataprovider.d.ts +0 -2
- package/dist/types/dataprovider.d.ts.map +0 -1
- package/dist/types/decorators.d.ts +0 -30
- package/dist/types/decorators.d.ts.map +0 -1
- package/dist/types/directives.d.ts +0 -21
- package/dist/types/directives.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/mixins.d.ts +0 -204
- package/dist/types/mixins.d.ts.map +0 -1
- package/dist/types/test-utils/TestUtils.d.ts +0 -4
- package/dist/types/test-utils/TestUtils.d.ts.map +0 -1
- package/dist/types/utils.d.ts +0 -18
- package/dist/types/utils.d.ts.map +0 -1
- package/docs/assets/index-DURr6O71.js +0 -11453
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import TestUtils from "@supersoniks/concorde/test-utils/TestUtils";
|
|
3
|
+
import { DataProviderKey } from "@supersoniks/concorde/core/utils/dataProviderKey";
|
|
4
|
+
import { deriveStateKey } from "@supersoniks/concorde/core/utils/derive";
|
|
5
|
+
import { clearJsonataCache } from "@supersoniks/concorde/core/utils/jsonataRuntime";
|
|
6
|
+
import { dp, set } from "@supersoniks/concorde/utils";
|
|
7
|
+
import "./jsonata";
|
|
8
|
+
import "../states/states";
|
|
9
|
+
import {
|
|
10
|
+
DOCS_COFFEE_BAGS,
|
|
11
|
+
DOCS_SPACE_CAT_MISSIONS,
|
|
12
|
+
} from "../../../../docs/mock-api/fixtures-jsonata";
|
|
13
|
+
|
|
14
|
+
const missionsKey = new DataProviderKey<typeof DOCS_SPACE_CAT_MISSIONS>(
|
|
15
|
+
"jsonata-test-missions",
|
|
16
|
+
);
|
|
17
|
+
const formKey = new DataProviderKey<{ top: number | string }>(
|
|
18
|
+
"jsonata-test-form",
|
|
19
|
+
);
|
|
20
|
+
const boardKey = new DataProviderKey<
|
|
21
|
+
Array<{ name: string; points: number }>
|
|
22
|
+
>("jsonata-test-board");
|
|
23
|
+
|
|
24
|
+
function wait(ms: number) {
|
|
25
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
clearJsonataCache();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe("sonic-jsonata", () => {
|
|
33
|
+
it("calcule un leaderboard (groupby + top N) en live", async () => {
|
|
34
|
+
set(missionsKey, DOCS_SPACE_CAT_MISSIONS);
|
|
35
|
+
set(formKey, { top: 2 });
|
|
36
|
+
|
|
37
|
+
const [elt] = TestUtils.bootstrap(`
|
|
38
|
+
<sonic-jsonata
|
|
39
|
+
inputProvider="jsonata-test-missions"
|
|
40
|
+
outputProvider="jsonata-test-board"
|
|
41
|
+
formDataProvider="jsonata-test-form"
|
|
42
|
+
expression='$input{name: $sum(points)} ~> $each(function($v, $k) {{"name": $k, "points": $v}}) ^(>points)[[0..$number($top)-1]]'
|
|
43
|
+
></sonic-jsonata>
|
|
44
|
+
`);
|
|
45
|
+
|
|
46
|
+
await wait(80);
|
|
47
|
+
const result = dp(boardKey).get();
|
|
48
|
+
expect(result).toHaveLength(2);
|
|
49
|
+
expect(result[0].name).toBe("Nebula Paws");
|
|
50
|
+
expect(result[0].points).toBe(75);
|
|
51
|
+
expect(result[1].name).toBe("Captain Whiskers");
|
|
52
|
+
expect(dp(deriveStateKey(boardKey)).get().status).toBe("ready");
|
|
53
|
+
|
|
54
|
+
// Comme sonic-input / sonic-select : mutation profonde sur le form DP
|
|
55
|
+
dp(formKey).top.set(1);
|
|
56
|
+
await wait(80);
|
|
57
|
+
const top1 = dp(boardKey).get();
|
|
58
|
+
const rows = Array.isArray(top1) ? top1 : [top1];
|
|
59
|
+
expect(rows).toHaveLength(1);
|
|
60
|
+
expect(rows[0].name).toBe("Nebula Paws");
|
|
61
|
+
|
|
62
|
+
(elt as HTMLElement).remove();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("agrège le stock café par origine avec filtre roast", async () => {
|
|
66
|
+
const bagsKey = new DataProviderKey<typeof DOCS_COFFEE_BAGS>(
|
|
67
|
+
"jsonata-test-bags",
|
|
68
|
+
);
|
|
69
|
+
const coffeeForm = new DataProviderKey<{ roast: string }>(
|
|
70
|
+
"jsonata-test-coffee-form",
|
|
71
|
+
);
|
|
72
|
+
const stockKey = new DataProviderKey<Array<{ origin: string; kg: number }>>(
|
|
73
|
+
"jsonata-test-stock",
|
|
74
|
+
);
|
|
75
|
+
set(bagsKey, DOCS_COFFEE_BAGS);
|
|
76
|
+
set(coffeeForm, { roast: "light" });
|
|
77
|
+
|
|
78
|
+
const [elt] = TestUtils.bootstrap(`
|
|
79
|
+
<sonic-jsonata
|
|
80
|
+
inputProvider="jsonata-test-bags"
|
|
81
|
+
outputProvider="jsonata-test-stock"
|
|
82
|
+
formDataProvider="jsonata-test-coffee-form"
|
|
83
|
+
expression='($roast = "all" ? $input : $input[roast=$roast]){origin: $sum(kg)} ~> $each(function($v, $k) {{"origin": $k, "kg": $v}}) ^(>kg)'
|
|
84
|
+
></sonic-jsonata>
|
|
85
|
+
`);
|
|
86
|
+
|
|
87
|
+
await wait(80);
|
|
88
|
+
const stock = dp(stockKey).get();
|
|
89
|
+
expect(stock.length).toBeGreaterThan(0);
|
|
90
|
+
expect(stock[0].origin).toBe("Ethiopia");
|
|
91
|
+
expect(stock[0].kg).toBe(16);
|
|
92
|
+
expect(stock.map((r) => r.origin)).not.toContain("Brazil");
|
|
93
|
+
|
|
94
|
+
dp(coffeeForm).roast.set("all");
|
|
95
|
+
await wait(80);
|
|
96
|
+
const all = dp(stockKey).get();
|
|
97
|
+
expect(all.map((r) => r.origin)).toContain("Brazil");
|
|
98
|
+
|
|
99
|
+
(elt as HTMLElement).remove();
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it("expose status error sur expression invalide", async () => {
|
|
103
|
+
const err = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
104
|
+
set(missionsKey, DOCS_SPACE_CAT_MISSIONS);
|
|
105
|
+
|
|
106
|
+
const [elt] = TestUtils.bootstrap(`
|
|
107
|
+
<sonic-jsonata
|
|
108
|
+
inputProvider="jsonata-test-missions"
|
|
109
|
+
outputProvider="jsonata-test-board"
|
|
110
|
+
expression='$input ~> $$$$invalid'
|
|
111
|
+
></sonic-jsonata>
|
|
112
|
+
`);
|
|
113
|
+
|
|
114
|
+
await wait(80);
|
|
115
|
+
const state = dp(deriveStateKey(boardKey)).get();
|
|
116
|
+
expect(state.status).toBe("error");
|
|
117
|
+
expect(state.error).toBeTruthy();
|
|
118
|
+
err.mockRestore();
|
|
119
|
+
(elt as HTMLElement).remove();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("branche sonic-states sur le DP /_state_", async () => {
|
|
123
|
+
set(missionsKey, DOCS_SPACE_CAT_MISSIONS);
|
|
124
|
+
set(formKey, { top: 3 });
|
|
125
|
+
|
|
126
|
+
const [wrap] = TestUtils.bootstrap(`
|
|
127
|
+
<div>
|
|
128
|
+
<sonic-jsonata
|
|
129
|
+
inputProvider="jsonata-test-missions"
|
|
130
|
+
outputProvider="jsonata-test-board"
|
|
131
|
+
formDataProvider="jsonata-test-form"
|
|
132
|
+
expression='$input[0].name'
|
|
133
|
+
></sonic-jsonata>
|
|
134
|
+
<sonic-states dataProvider="jsonata-test-board/_state_" data-path="status">
|
|
135
|
+
<template data-value="ready"><span id="ok">prêt</span></template>
|
|
136
|
+
<template data-value="error"><span id="ko">erreur</span></template>
|
|
137
|
+
</sonic-states>
|
|
138
|
+
</div>
|
|
139
|
+
`);
|
|
140
|
+
|
|
141
|
+
await wait(80);
|
|
142
|
+
expect(wrap.querySelector("#ok")?.textContent).toBe("prêt");
|
|
143
|
+
(wrap as HTMLElement).remove();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it("calcule total + moyenne par ligne d’un tableau", async () => {
|
|
147
|
+
const linesKey = new DataProviderKey<
|
|
148
|
+
Array<{ qty: number; unitPrice: number }>
|
|
149
|
+
>("jsonata-test-lines");
|
|
150
|
+
const taxForm = new DataProviderKey<{ taxPercent: number | string }>(
|
|
151
|
+
"jsonata-test-tax-form",
|
|
152
|
+
);
|
|
153
|
+
const totalsKey = new DataProviderKey<{
|
|
154
|
+
count: number;
|
|
155
|
+
subtotal: number;
|
|
156
|
+
average: number;
|
|
157
|
+
tax: number;
|
|
158
|
+
grandTotal: number;
|
|
159
|
+
}>("jsonata-test-totals");
|
|
160
|
+
|
|
161
|
+
set(linesKey, [
|
|
162
|
+
{ qty: 4, unitPrice: 3.5 },
|
|
163
|
+
{ qty: 2, unitPrice: 6 },
|
|
164
|
+
{ qty: 1, unitPrice: 8.5 },
|
|
165
|
+
]);
|
|
166
|
+
set(taxForm, { taxPercent: 10 });
|
|
167
|
+
|
|
168
|
+
const [elt] = TestUtils.bootstrap(`
|
|
169
|
+
<sonic-jsonata
|
|
170
|
+
inputProvider="jsonata-test-lines"
|
|
171
|
+
outputProvider="jsonata-test-totals"
|
|
172
|
+
formDataProvider="jsonata-test-tax-form"
|
|
173
|
+
expression='(
|
|
174
|
+
$lines := $input.(qty * unitPrice);
|
|
175
|
+
{
|
|
176
|
+
"count": $count($input),
|
|
177
|
+
"subtotal": $round($sum($lines), 2),
|
|
178
|
+
"average": $round($average($lines), 2),
|
|
179
|
+
"tax": $round($sum($lines) * $number($taxPercent) / 100, 2),
|
|
180
|
+
"grandTotal": $round($sum($lines) * (1 + $number($taxPercent) / 100), 2)
|
|
181
|
+
}
|
|
182
|
+
)'
|
|
183
|
+
></sonic-jsonata>
|
|
184
|
+
`);
|
|
185
|
+
|
|
186
|
+
await wait(80);
|
|
187
|
+
expect(dp(totalsKey).get()).toMatchObject({
|
|
188
|
+
count: 3,
|
|
189
|
+
subtotal: 34.5,
|
|
190
|
+
average: 11.5,
|
|
191
|
+
tax: 3.45,
|
|
192
|
+
grandTotal: 37.95,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
dp(taxForm).taxPercent.set(20);
|
|
196
|
+
await wait(80);
|
|
197
|
+
expect(dp(totalsKey).get().tax).toBe(6.9);
|
|
198
|
+
expect(dp(totalsKey).get().grandTotal).toBe(41.4);
|
|
199
|
+
|
|
200
|
+
(elt as HTMLElement).remove();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { customElement, property } from "lit/decorators.js";
|
|
3
|
+
import {
|
|
4
|
+
derive,
|
|
5
|
+
type DeriveHandle,
|
|
6
|
+
} from "@supersoniks/concorde/core/utils/derive";
|
|
7
|
+
import {
|
|
8
|
+
compileJsonata,
|
|
9
|
+
validateOutputSchema,
|
|
10
|
+
} from "@supersoniks/concorde/core/utils/jsonataRuntime";
|
|
11
|
+
import { DataProviderKey } from "@supersoniks/concorde/core/utils/dataProviderKey";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Adaptateur JSONata de `derive` : 1 entrée → expression → 1 sortie (readonly).
|
|
15
|
+
*
|
|
16
|
+
* Contexte d’évaluation :
|
|
17
|
+
* - `$input` = contenu de `inputProvider`
|
|
18
|
+
* - champs du `formDataProvider` optionnel = `$top`, `$roast`, …
|
|
19
|
+
*/
|
|
20
|
+
@customElement("sonic-jsonata")
|
|
21
|
+
export default class SonicJsonata extends LitElement {
|
|
22
|
+
static styles = [
|
|
23
|
+
css`
|
|
24
|
+
:host {
|
|
25
|
+
display: contents;
|
|
26
|
+
}
|
|
27
|
+
`,
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
/** DataProvider d’entrée (source). */
|
|
31
|
+
@property({ type: String })
|
|
32
|
+
inputProvider = "";
|
|
33
|
+
|
|
34
|
+
/** DataProvider de sortie (agrégat, readonly). */
|
|
35
|
+
@property({ type: String })
|
|
36
|
+
outputProvider = "";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Form / variables optionnelles (`$top`, `$roast`, …).
|
|
40
|
+
* Même id que le `formDataProvider` du formulaire — recalcule sans refetch.
|
|
41
|
+
*/
|
|
42
|
+
@property({ type: String })
|
|
43
|
+
formDataProvider = "";
|
|
44
|
+
|
|
45
|
+
@property({ type: String })
|
|
46
|
+
expression = "";
|
|
47
|
+
|
|
48
|
+
@property({ type: Object })
|
|
49
|
+
outputSchema: Record<string, unknown> | null = null;
|
|
50
|
+
|
|
51
|
+
private handle: DeriveHandle | null = null;
|
|
52
|
+
|
|
53
|
+
connectedCallback(): void {
|
|
54
|
+
super.connectedCallback();
|
|
55
|
+
this.restart();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
disconnectedCallback(): void {
|
|
59
|
+
this.handle?.stop();
|
|
60
|
+
this.handle = null;
|
|
61
|
+
super.disconnectedCallback();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
protected updated(
|
|
65
|
+
changed: Map<string | number | symbol, unknown>,
|
|
66
|
+
): void {
|
|
67
|
+
if (
|
|
68
|
+
changed.has("expression") ||
|
|
69
|
+
changed.has("inputProvider") ||
|
|
70
|
+
changed.has("outputProvider") ||
|
|
71
|
+
changed.has("formDataProvider") ||
|
|
72
|
+
changed.has("outputSchema")
|
|
73
|
+
) {
|
|
74
|
+
this.restart();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private restart(): void {
|
|
79
|
+
this.handle?.stop();
|
|
80
|
+
this.handle = null;
|
|
81
|
+
if (!this.isConnected) return;
|
|
82
|
+
if (!this.inputProvider || !this.outputProvider) return;
|
|
83
|
+
if (!this.expression?.trim()) return;
|
|
84
|
+
|
|
85
|
+
const expressionSource = this.expression;
|
|
86
|
+
const schema = this.outputSchema;
|
|
87
|
+
|
|
88
|
+
this.handle = derive({
|
|
89
|
+
inputs: { input: new DataProviderKey(this.inputProvider) },
|
|
90
|
+
output: new DataProviderKey(this.outputProvider),
|
|
91
|
+
variables: this.formDataProvider
|
|
92
|
+
? new DataProviderKey(this.formDataProvider)
|
|
93
|
+
: undefined,
|
|
94
|
+
compute: async ({ input }, vars) => {
|
|
95
|
+
const expr = compileJsonata(expressionSource);
|
|
96
|
+
const bindings: Record<string, unknown> = {
|
|
97
|
+
...((vars ?? {}) as Record<string, unknown>),
|
|
98
|
+
input,
|
|
99
|
+
};
|
|
100
|
+
let result: unknown;
|
|
101
|
+
try {
|
|
102
|
+
result = await expr.evaluate({}, bindings);
|
|
103
|
+
} catch (err) {
|
|
104
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
105
|
+
throw new Error(`[sonic-jsonata] Évaluation : ${message}`);
|
|
106
|
+
}
|
|
107
|
+
validateOutputSchema(result, schema);
|
|
108
|
+
return result;
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
render() {
|
|
114
|
+
return html`<slot></slot>`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
File without changes
|
|
@@ -506,8 +506,8 @@ export class Button extends FormCheckable(FormElement(Subscriber(LitElement))) {
|
|
|
506
506
|
* L'url
|
|
507
507
|
*/
|
|
508
508
|
private _href: Route | string = "";
|
|
509
|
-
@property({ type: String }) set href(value: Route | string) {
|
|
510
|
-
this._href = value;
|
|
509
|
+
@property({ type: String }) set href(value: Route | string | null) {
|
|
510
|
+
this._href = value ?? "";
|
|
511
511
|
const str = this._href.toString();
|
|
512
512
|
if (str && str.indexOf("http") != 0) {
|
|
513
513
|
LocationHandler.onChange(this);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -4,6 +4,8 @@ export { subscribe } from "./subscriber/subscribe";
|
|
|
4
4
|
export { onAssign } from "./subscriber/onAssign";
|
|
5
5
|
export { handle, Skip } from "./subscriber/handle";
|
|
6
6
|
export type { HandleOptions } from "./subscriber/handle";
|
|
7
|
+
export { derive } from "./subscriber/derive";
|
|
8
|
+
export type { DeriveDecoratorOptions } from "./subscriber/derive";
|
|
7
9
|
export { autoSubscribe } from "./subscriber/autoSubscribe";
|
|
8
10
|
export { autoFill } from "./subscriber/autoFill";
|
|
9
11
|
export { ancestorAttribute } from "./subscriber/ancestorAttribute";
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DataProviderKey,
|
|
3
|
+
DataProviderKeyHost,
|
|
4
|
+
} from "../../utils/dataProviderKey";
|
|
5
|
+
import {
|
|
6
|
+
derive as deriveFn,
|
|
7
|
+
type DeriveHandle,
|
|
8
|
+
} from "../../utils/derive";
|
|
9
|
+
|
|
10
|
+
export type DeriveDecoratorOptions<
|
|
11
|
+
I extends Record<string, unknown>,
|
|
12
|
+
O,
|
|
13
|
+
V = Record<string, unknown>,
|
|
14
|
+
> = {
|
|
15
|
+
from: { [K in keyof I]: DataProviderKey<I[K]> };
|
|
16
|
+
to: DataProviderKey<O>;
|
|
17
|
+
/** Expression JSONata (string) ou fonction TS. */
|
|
18
|
+
expr?: string;
|
|
19
|
+
fn?: (inputs: I, vars: V) => O | Promise<O>;
|
|
20
|
+
variables?: DataProviderKey<V>;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const HANDLES = new WeakMap<object, DeriveHandle[]>();
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Décorateur optionnel aligné `@handle` : lance un `derive` au `connectedCallback`
|
|
27
|
+
* et l’arrête au `disconnectedCallback`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* @derive({
|
|
32
|
+
* from: { s: sessionsKey },
|
|
33
|
+
* to: palmaresKey,
|
|
34
|
+
* variables: formKey,
|
|
35
|
+
* fn: (i, v) => i.s.slice(0, Number(v.top) || 5),
|
|
36
|
+
* })
|
|
37
|
+
* class MyWidget extends LitElement {}
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function deriveDecorator<
|
|
41
|
+
I extends Record<string, unknown>,
|
|
42
|
+
O,
|
|
43
|
+
V = Record<string, unknown>,
|
|
44
|
+
>(options: DeriveDecoratorOptions<I, O, V>) {
|
|
45
|
+
return function <T extends DataProviderKeyHost<object>>(
|
|
46
|
+
ctor: new (...args: any[]) => T,
|
|
47
|
+
): void {
|
|
48
|
+
const proto = ctor.prototype as T & {
|
|
49
|
+
connectedCallback?: () => void;
|
|
50
|
+
disconnectedCallback?: () => void;
|
|
51
|
+
};
|
|
52
|
+
const connected = proto.connectedCallback;
|
|
53
|
+
const disconnected = proto.disconnectedCallback;
|
|
54
|
+
|
|
55
|
+
proto.connectedCallback = function (this: T) {
|
|
56
|
+
connected?.call(this);
|
|
57
|
+
const compute =
|
|
58
|
+
options.fn ??
|
|
59
|
+
(async (inputs: I, vars: V) => {
|
|
60
|
+
if (!options.expr) {
|
|
61
|
+
throw new Error("@derive : fournir `expr` ou `fn`.");
|
|
62
|
+
}
|
|
63
|
+
const { compileJsonata } = await import(
|
|
64
|
+
"../../utils/jsonataRuntime"
|
|
65
|
+
);
|
|
66
|
+
const expr = compileJsonata(options.expr);
|
|
67
|
+
return expr.evaluate({}, {
|
|
68
|
+
...(vars as Record<string, unknown>),
|
|
69
|
+
...inputs,
|
|
70
|
+
}) as O;
|
|
71
|
+
});
|
|
72
|
+
const handle = deriveFn({
|
|
73
|
+
inputs: options.from,
|
|
74
|
+
output: options.to,
|
|
75
|
+
variables: options.variables,
|
|
76
|
+
compute,
|
|
77
|
+
});
|
|
78
|
+
const list = HANDLES.get(this) ?? [];
|
|
79
|
+
list.push(handle);
|
|
80
|
+
HANDLES.set(this, list);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
proto.disconnectedCallback = function (this: T) {
|
|
84
|
+
const list = HANDLES.get(this);
|
|
85
|
+
if (list) {
|
|
86
|
+
for (const h of list) h.stop();
|
|
87
|
+
HANDLES.delete(this);
|
|
88
|
+
}
|
|
89
|
+
disconnected?.call(this);
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Alias public — éviter le conflit de nom avec la primitive `derive`. */
|
|
95
|
+
export { deriveDecorator as derive };
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { DataProviderKey } from "@supersoniks/concorde/core/utils/dataProviderKey";
|
|
3
|
+
import {
|
|
4
|
+
derive,
|
|
5
|
+
deriveStateKey,
|
|
6
|
+
} from "@supersoniks/concorde/core/utils/derive";
|
|
7
|
+
import { dp, set } from "@supersoniks/concorde/utils";
|
|
8
|
+
|
|
9
|
+
const sessionsKey = new DataProviderKey<
|
|
10
|
+
Array<{ title: string; revenue: number }>
|
|
11
|
+
>("derive-sessions");
|
|
12
|
+
const formKey = new DataProviderKey<{ top: number }>("derive-form");
|
|
13
|
+
const outKey = new DataProviderKey<Array<{ title: string; ca: number }>>(
|
|
14
|
+
"derive-out",
|
|
15
|
+
);
|
|
16
|
+
const outBKey = new DataProviderKey<unknown>("derive-out-b");
|
|
17
|
+
|
|
18
|
+
function wait(ms: number) {
|
|
19
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
// Nettoyage des DPs de test
|
|
24
|
+
set(sessionsKey, []);
|
|
25
|
+
set(formKey, { top: 5 });
|
|
26
|
+
set(outKey, []);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe("derive", () => {
|
|
30
|
+
it("publie un résultat calculé à partir des entrées", async () => {
|
|
31
|
+
set(sessionsKey, [
|
|
32
|
+
{ title: "A", revenue: 10 },
|
|
33
|
+
{ title: "B", revenue: 30 },
|
|
34
|
+
]);
|
|
35
|
+
set(formKey, { top: 1 });
|
|
36
|
+
|
|
37
|
+
const handle = derive({
|
|
38
|
+
inputs: { s: sessionsKey },
|
|
39
|
+
variables: formKey,
|
|
40
|
+
output: outKey,
|
|
41
|
+
debounceMs: 10,
|
|
42
|
+
compute: (i, v) =>
|
|
43
|
+
[...i.s]
|
|
44
|
+
.sort((a, b) => b.revenue - a.revenue)
|
|
45
|
+
.slice(0, v.top)
|
|
46
|
+
.map((x) => ({ title: x.title, ca: x.revenue })),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
await wait(40);
|
|
50
|
+
expect(dp(outKey).get()).toEqual([{ title: "B", ca: 30 }]);
|
|
51
|
+
expect(dp(deriveStateKey(outKey)).get().status).toBe("ready");
|
|
52
|
+
handle.stop();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("recalcule quand les variables changent (sans toucher aux entrées)", async () => {
|
|
56
|
+
set(sessionsKey, [
|
|
57
|
+
{ title: "A", revenue: 10 },
|
|
58
|
+
{ title: "B", revenue: 30 },
|
|
59
|
+
{ title: "C", revenue: 20 },
|
|
60
|
+
]);
|
|
61
|
+
set(formKey, { top: 2 });
|
|
62
|
+
|
|
63
|
+
const handle = derive({
|
|
64
|
+
inputs: { s: sessionsKey },
|
|
65
|
+
variables: formKey,
|
|
66
|
+
output: outKey,
|
|
67
|
+
debounceMs: 10,
|
|
68
|
+
compute: (i, v) =>
|
|
69
|
+
[...i.s]
|
|
70
|
+
.sort((a, b) => b.revenue - a.revenue)
|
|
71
|
+
.slice(0, Number(v.top))
|
|
72
|
+
.map((x) => ({ title: x.title, ca: x.revenue })),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
await wait(40);
|
|
76
|
+
expect(dp(outKey).get()).toHaveLength(2);
|
|
77
|
+
|
|
78
|
+
// Comme sonic-input : écriture sur la sous-clé, pas set() racine
|
|
79
|
+
dp(formKey).top.set(1);
|
|
80
|
+
await wait(40);
|
|
81
|
+
expect(dp(outKey).get()).toEqual([{ title: "B", ca: 30 }]);
|
|
82
|
+
handle.stop();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it("debounce + génération : seul le dernier calcul compte", async () => {
|
|
86
|
+
set(sessionsKey, [{ title: "A", revenue: 1 }]);
|
|
87
|
+
let calls = 0;
|
|
88
|
+
|
|
89
|
+
const handle = derive({
|
|
90
|
+
inputs: { s: sessionsKey },
|
|
91
|
+
output: outKey,
|
|
92
|
+
debounceMs: 30,
|
|
93
|
+
compute: async (i) => {
|
|
94
|
+
calls += 1;
|
|
95
|
+
const n = calls;
|
|
96
|
+
await wait(40);
|
|
97
|
+
return i.s.map((x) => ({ title: x.title + n, ca: x.revenue }));
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
await wait(5);
|
|
102
|
+
set(sessionsKey, [{ title: "B", revenue: 2 }]);
|
|
103
|
+
await wait(5);
|
|
104
|
+
set(sessionsKey, [{ title: "C", revenue: 3 }]);
|
|
105
|
+
await wait(120);
|
|
106
|
+
|
|
107
|
+
const result = dp(outKey).get();
|
|
108
|
+
expect(result?.[0]?.title).toMatch(/^C/);
|
|
109
|
+
handle.stop();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("refuse un cycle direct sortie ∈ entrées", () => {
|
|
113
|
+
expect(() =>
|
|
114
|
+
derive({
|
|
115
|
+
inputs: { o: outKey },
|
|
116
|
+
output: outKey,
|
|
117
|
+
compute: (i) => i.o,
|
|
118
|
+
}),
|
|
119
|
+
).toThrow(/Cycle/);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("refuse un cycle en chaîne", () => {
|
|
123
|
+
const a = new DataProviderKey<number>("derive-cycle-a");
|
|
124
|
+
const b = new DataProviderKey<number>("derive-cycle-b");
|
|
125
|
+
const h1 = derive({
|
|
126
|
+
inputs: { a },
|
|
127
|
+
output: b,
|
|
128
|
+
debounceMs: 5,
|
|
129
|
+
compute: (i) => i.a + 1,
|
|
130
|
+
});
|
|
131
|
+
expect(() =>
|
|
132
|
+
derive({
|
|
133
|
+
inputs: { b },
|
|
134
|
+
output: a,
|
|
135
|
+
compute: (i) => (i.b as number) + 1,
|
|
136
|
+
}),
|
|
137
|
+
).toThrow(/Cycle/);
|
|
138
|
+
h1.stop();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("sortie readonly : écriture externe ignorée + warning", async () => {
|
|
142
|
+
const warn = vi.spyOn(console, "warn").mockImplementation(() => {});
|
|
143
|
+
set(sessionsKey, [{ title: "A", revenue: 5 }]);
|
|
144
|
+
const handle = derive({
|
|
145
|
+
inputs: { s: sessionsKey },
|
|
146
|
+
output: outKey,
|
|
147
|
+
debounceMs: 10,
|
|
148
|
+
compute: (i) => i.s.map((x) => ({ title: x.title, ca: x.revenue })),
|
|
149
|
+
});
|
|
150
|
+
await wait(40);
|
|
151
|
+
expect(dp(outKey).get()).toEqual([{ title: "A", ca: 5 }]);
|
|
152
|
+
|
|
153
|
+
set(outKey, [{ title: "HACK", ca: 0 }]);
|
|
154
|
+
await wait(10);
|
|
155
|
+
expect(dp(outKey).get()).toEqual([{ title: "A", ca: 5 }]);
|
|
156
|
+
expect(warn).toHaveBeenCalled();
|
|
157
|
+
warn.mockRestore();
|
|
158
|
+
handle.stop();
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("publie status error puis empty", async () => {
|
|
162
|
+
const errSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
|
163
|
+
set(sessionsKey, [{ title: "A", revenue: 1 }]);
|
|
164
|
+
const handle = derive({
|
|
165
|
+
inputs: { s: sessionsKey },
|
|
166
|
+
output: outBKey,
|
|
167
|
+
debounceMs: 10,
|
|
168
|
+
compute: () => {
|
|
169
|
+
throw new Error("boom-jsonata");
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
await wait(40);
|
|
173
|
+
expect(dp(deriveStateKey(outBKey)).get()).toMatchObject({
|
|
174
|
+
status: "error",
|
|
175
|
+
error: expect.stringContaining("boom-jsonata"),
|
|
176
|
+
});
|
|
177
|
+
handle.stop();
|
|
178
|
+
errSpy.mockRestore();
|
|
179
|
+
|
|
180
|
+
const handle2 = derive({
|
|
181
|
+
inputs: { s: sessionsKey },
|
|
182
|
+
output: outKey,
|
|
183
|
+
debounceMs: 10,
|
|
184
|
+
compute: () => [],
|
|
185
|
+
});
|
|
186
|
+
await wait(40);
|
|
187
|
+
expect(dp(deriveStateKey(outKey)).get().status).toBe("empty");
|
|
188
|
+
handle2.stop();
|
|
189
|
+
});
|
|
190
|
+
});
|