@miragon/pulse-widget-shell 0.0.0-stage → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +164 -2
- package/dist/adapt-data-widget.d.ts +7 -0
- package/dist/adapt-data-widget.d.ts.map +1 -0
- package/dist/adapt-data-widget.js +7 -0
- package/dist/adapt-data-widget.js.map +1 -0
- package/dist/bpmn-names.d.ts +42 -0
- package/dist/bpmn-names.d.ts.map +1 -0
- package/dist/bpmn-names.js +151 -0
- package/dist/bpmn-names.js.map +1 -0
- package/dist/bpmn-names.test.d.ts +2 -0
- package/dist/bpmn-names.test.d.ts.map +1 -0
- package/dist/bpmn-names.test.js +143 -0
- package/dist/bpmn-names.test.js.map +1 -0
- package/dist/build-data-feed-result.test.d.ts +2 -0
- package/dist/build-data-feed-result.test.d.ts.map +1 -0
- package/dist/build-data-feed-result.test.js +28 -0
- package/dist/build-data-feed-result.test.js.map +1 -0
- package/dist/build-single-widget-view.test.d.ts +2 -0
- package/dist/build-single-widget-view.test.d.ts.map +1 -0
- package/dist/build-single-widget-view.test.js +136 -0
- package/dist/build-single-widget-view.test.js.map +1 -0
- package/dist/builder-texts.d.ts +27 -0
- package/dist/builder-texts.d.ts.map +1 -0
- package/dist/builder-texts.js +32 -0
- package/dist/builder-texts.js.map +1 -0
- package/dist/builder-texts.test.d.ts +2 -0
- package/dist/builder-texts.test.d.ts.map +1 -0
- package/dist/builder-texts.test.js +54 -0
- package/dist/builder-texts.test.js.map +1 -0
- package/dist/catalogue-sync.d.ts +18 -0
- package/dist/catalogue-sync.d.ts.map +1 -0
- package/dist/catalogue-sync.js +31 -0
- package/dist/catalogue-sync.js.map +1 -0
- package/dist/catalogue-sync.test.d.ts +2 -0
- package/dist/catalogue-sync.test.d.ts.map +1 -0
- package/dist/catalogue-sync.test.js +22 -0
- package/dist/catalogue-sync.test.js.map +1 -0
- package/dist/composed-server.d.ts +110 -0
- package/dist/composed-server.d.ts.map +1 -0
- package/dist/composed-server.edge.test.d.ts +2 -0
- package/dist/composed-server.edge.test.d.ts.map +1 -0
- package/dist/composed-server.edge.test.js +184 -0
- package/dist/composed-server.edge.test.js.map +1 -0
- package/dist/composed-server.fonts.test.d.ts +2 -0
- package/dist/composed-server.fonts.test.d.ts.map +1 -0
- package/dist/composed-server.fonts.test.js +186 -0
- package/dist/composed-server.fonts.test.js.map +1 -0
- package/dist/composed-server.js +260 -0
- package/dist/composed-server.js.map +1 -0
- package/dist/composed-server.test.d.ts +2 -0
- package/dist/composed-server.test.d.ts.map +1 -0
- package/dist/composed-server.test.js +332 -0
- package/dist/composed-server.test.js.map +1 -0
- package/dist/composition.d.ts +155 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +163 -0
- package/dist/composition.js.map +1 -0
- package/dist/composition.test.d.ts +2 -0
- package/dist/composition.test.d.ts.map +1 -0
- package/dist/composition.test.js +275 -0
- package/dist/composition.test.js.map +1 -0
- package/dist/dashboard-store-postgres.d.ts +43 -0
- package/dist/dashboard-store-postgres.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.js +225 -0
- package/dist/dashboard-store-postgres.js.map +1 -0
- package/dist/dashboard-store-postgres.test.d.ts +2 -0
- package/dist/dashboard-store-postgres.test.d.ts.map +1 -0
- package/dist/dashboard-store-postgres.test.js +272 -0
- package/dist/dashboard-store-postgres.test.js.map +1 -0
- package/dist/font-assets.d.ts +47 -0
- package/dist/font-assets.d.ts.map +1 -0
- package/dist/font-assets.js +93 -0
- package/dist/font-assets.js.map +1 -0
- package/dist/font-assets.test.d.ts +2 -0
- package/dist/font-assets.test.d.ts.map +1 -0
- package/dist/font-assets.test.js +123 -0
- package/dist/font-assets.test.js.map +1 -0
- package/dist/health.d.ts +59 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +74 -0
- package/dist/health.js.map +1 -0
- package/dist/health.test.d.ts +2 -0
- package/dist/health.test.d.ts.map +1 -0
- package/dist/health.test.js +140 -0
- package/dist/health.test.js.map +1 -0
- package/dist/host-boot.d.ts +56 -0
- package/dist/host-boot.d.ts.map +1 -0
- package/dist/host-boot.js +64 -0
- package/dist/host-boot.js.map +1 -0
- package/dist/host-boot.test.d.ts +2 -0
- package/dist/host-boot.test.d.ts.map +1 -0
- package/dist/host-boot.test.js +59 -0
- package/dist/host-boot.test.js.map +1 -0
- package/dist/http-edge.d.ts +117 -0
- package/dist/http-edge.d.ts.map +1 -0
- package/dist/http-edge.js +219 -0
- package/dist/http-edge.js.map +1 -0
- package/dist/http-edge.test.d.ts +2 -0
- package/dist/http-edge.test.d.ts.map +1 -0
- package/dist/http-edge.test.js +255 -0
- package/dist/http-edge.test.js.map +1 -0
- package/dist/metrics.d.ts +48 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +124 -0
- package/dist/metrics.js.map +1 -0
- package/dist/metrics.test.d.ts +2 -0
- package/dist/metrics.test.d.ts.map +1 -0
- package/dist/metrics.test.js +154 -0
- package/dist/metrics.test.js.map +1 -0
- package/dist/node-listener.d.ts +61 -0
- package/dist/node-listener.d.ts.map +1 -0
- package/dist/node-listener.js +165 -0
- package/dist/node-listener.js.map +1 -0
- package/dist/node-listener.test.d.ts +2 -0
- package/dist/node-listener.test.d.ts.map +1 -0
- package/dist/node-listener.test.js +331 -0
- package/dist/node-listener.test.js.map +1 -0
- package/dist/oauth-env.d.ts +42 -0
- package/dist/oauth-env.d.ts.map +1 -0
- package/dist/oauth-env.js +78 -0
- package/dist/oauth-env.js.map +1 -0
- package/dist/oauth-env.test.d.ts +2 -0
- package/dist/oauth-env.test.d.ts.map +1 -0
- package/dist/oauth-env.test.js +76 -0
- package/dist/oauth-env.test.js.map +1 -0
- package/dist/postgres.d.ts +59 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +80 -0
- package/dist/postgres.js.map +1 -0
- package/dist/profile-advisory.d.ts +19 -0
- package/dist/profile-advisory.d.ts.map +1 -0
- package/dist/profile-advisory.js +48 -0
- package/dist/profile-advisory.js.map +1 -0
- package/dist/profile-advisory.test.d.ts +2 -0
- package/dist/profile-advisory.test.d.ts.map +1 -0
- package/dist/profile-advisory.test.js +53 -0
- package/dist/profile-advisory.test.js.map +1 -0
- package/dist/profile-constants.d.ts +37 -0
- package/dist/profile-constants.d.ts.map +1 -0
- package/dist/profile-constants.js +37 -0
- package/dist/profile-constants.js.map +1 -0
- package/dist/profile-migrations.d.ts +71 -0
- package/dist/profile-migrations.d.ts.map +1 -0
- package/dist/profile-migrations.js +88 -0
- package/dist/profile-migrations.js.map +1 -0
- package/dist/profile-migrations.test.d.ts +2 -0
- package/dist/profile-migrations.test.d.ts.map +1 -0
- package/dist/profile-migrations.test.js +200 -0
- package/dist/profile-migrations.test.js.map +1 -0
- package/dist/profile-record.d.ts +60 -0
- package/dist/profile-record.d.ts.map +1 -0
- package/dist/profile-record.js +78 -0
- package/dist/profile-record.js.map +1 -0
- package/dist/profile-slice.d.ts +53 -0
- package/dist/profile-slice.d.ts.map +1 -0
- package/dist/profile-slice.js +73 -0
- package/dist/profile-slice.js.map +1 -0
- package/dist/profile-slice.test.d.ts +2 -0
- package/dist/profile-slice.test.d.ts.map +1 -0
- package/dist/profile-slice.test.js +73 -0
- package/dist/profile-slice.test.js.map +1 -0
- package/dist/profile-store-env.d.ts +34 -0
- package/dist/profile-store-env.d.ts.map +1 -0
- package/dist/profile-store-env.js +44 -0
- package/dist/profile-store-env.js.map +1 -0
- package/dist/profile-store-env.test.d.ts +2 -0
- package/dist/profile-store-env.test.d.ts.map +1 -0
- package/dist/profile-store-env.test.js +69 -0
- package/dist/profile-store-env.test.js.map +1 -0
- package/dist/profile-store-postgres.d.ts +33 -0
- package/dist/profile-store-postgres.d.ts.map +1 -0
- package/dist/profile-store-postgres.js +87 -0
- package/dist/profile-store-postgres.js.map +1 -0
- package/dist/profile-store-raw.test.d.ts +2 -0
- package/dist/profile-store-raw.test.d.ts.map +1 -0
- package/dist/profile-store-raw.test.js +185 -0
- package/dist/profile-store-raw.test.js.map +1 -0
- package/dist/profile-store.d.ts +85 -0
- package/dist/profile-store.d.ts.map +1 -0
- package/dist/profile-store.js +182 -0
- package/dist/profile-store.js.map +1 -0
- package/dist/profile-store.test.d.ts +2 -0
- package/dist/profile-store.test.d.ts.map +1 -0
- package/dist/profile-store.test.js +353 -0
- package/dist/profile-store.test.js.map +1 -0
- package/dist/profile.d.ts +75 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +85 -0
- package/dist/profile.js.map +1 -0
- package/dist/profile.test.d.ts +2 -0
- package/dist/profile.test.d.ts.map +1 -0
- package/dist/profile.test.js +71 -0
- package/dist/profile.test.js.map +1 -0
- package/dist/request-context.d.ts +47 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +85 -0
- package/dist/request-context.js.map +1 -0
- package/dist/request-context.test.d.ts +2 -0
- package/dist/request-context.test.d.ts.map +1 -0
- package/dist/request-context.test.js +107 -0
- package/dist/request-context.test.js.map +1 -0
- package/dist/served-fonts.d.ts +38 -0
- package/dist/served-fonts.d.ts.map +1 -0
- package/dist/served-fonts.js +51 -0
- package/dist/served-fonts.js.map +1 -0
- package/dist/served-fonts.test.d.ts +2 -0
- package/dist/served-fonts.test.d.ts.map +1 -0
- package/dist/served-fonts.test.js +30 -0
- package/dist/served-fonts.test.js.map +1 -0
- package/dist/server-locale.d.ts +58 -0
- package/dist/server-locale.d.ts.map +1 -0
- package/dist/server-locale.js +64 -0
- package/dist/server-locale.js.map +1 -0
- package/dist/server-locale.test.d.ts +2 -0
- package/dist/server-locale.test.d.ts.map +1 -0
- package/dist/server-locale.test.js +90 -0
- package/dist/server-locale.test.js.map +1 -0
- package/dist/server.d.ts +43 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/shell-catalogue.d.ts +12 -0
- package/dist/shell-catalogue.d.ts.map +1 -0
- package/dist/shell-catalogue.js +142 -0
- package/dist/shell-catalogue.js.map +1 -0
- package/dist/shell-settings-contract.d.ts +34 -0
- package/dist/shell-settings-contract.d.ts.map +1 -0
- package/dist/shell-settings-contract.js +21 -0
- package/dist/shell-settings-contract.js.map +1 -0
- package/dist/shell-settings.d.ts +24 -0
- package/dist/shell-settings.d.ts.map +1 -0
- package/dist/shell-settings.js +148 -0
- package/dist/shell-settings.js.map +1 -0
- package/dist/shell-settings.test.d.ts +2 -0
- package/dist/shell-settings.test.d.ts.map +1 -0
- package/dist/shell-settings.test.js +115 -0
- package/dist/shell-settings.test.js.map +1 -0
- package/dist/testing/catalog-text.d.ts +53 -0
- package/dist/testing/catalog-text.d.ts.map +1 -0
- package/dist/testing/catalog-text.js +146 -0
- package/dist/testing/catalog-text.js.map +1 -0
- package/dist/testing/catalog-text.test.d.ts +2 -0
- package/dist/testing/catalog-text.test.d.ts.map +1 -0
- package/dist/testing/catalog-text.test.js +137 -0
- package/dist/testing/catalog-text.test.js.map +1 -0
- package/dist/testing/colors.d.ts +34 -0
- package/dist/testing/colors.d.ts.map +1 -0
- package/dist/testing/colors.js +124 -0
- package/dist/testing/colors.js.map +1 -0
- package/dist/testing/colors.test.d.ts +2 -0
- package/dist/testing/colors.test.d.ts.map +1 -0
- package/dist/testing/colors.test.js +166 -0
- package/dist/testing/colors.test.js.map +1 -0
- package/dist/testing/contrast.d.ts +77 -0
- package/dist/testing/contrast.d.ts.map +1 -0
- package/dist/testing/contrast.js +382 -0
- package/dist/testing/contrast.js.map +1 -0
- package/dist/testing/contrast.test.d.ts +2 -0
- package/dist/testing/contrast.test.d.ts.map +1 -0
- package/dist/testing/contrast.test.js +230 -0
- package/dist/testing/contrast.test.js.map +1 -0
- package/dist/testing/display-texts.d.ts +23 -0
- package/dist/testing/display-texts.d.ts.map +1 -0
- package/dist/testing/display-texts.js +88 -0
- package/dist/testing/display-texts.js.map +1 -0
- package/dist/testing/display-texts.test.d.ts +2 -0
- package/dist/testing/display-texts.test.d.ts.map +1 -0
- package/dist/testing/display-texts.test.js +169 -0
- package/dist/testing/display-texts.test.js.map +1 -0
- package/dist/testing/glossary.d.ts +52 -0
- package/dist/testing/glossary.d.ts.map +1 -0
- package/dist/testing/glossary.js +135 -0
- package/dist/testing/glossary.js.map +1 -0
- package/dist/testing/glossary.test.d.ts +2 -0
- package/dist/testing/glossary.test.d.ts.map +1 -0
- package/dist/testing/glossary.test.js +78 -0
- package/dist/testing/glossary.test.js.map +1 -0
- package/dist/testing/glyphs.d.ts +27 -0
- package/dist/testing/glyphs.d.ts.map +1 -0
- package/dist/testing/glyphs.js +130 -0
- package/dist/testing/glyphs.js.map +1 -0
- package/dist/testing/glyphs.test.d.ts +2 -0
- package/dist/testing/glyphs.test.d.ts.map +1 -0
- package/dist/testing/glyphs.test.js +146 -0
- package/dist/testing/glyphs.test.js.map +1 -0
- package/dist/testing/icon-sizes.d.ts +22 -0
- package/dist/testing/icon-sizes.d.ts.map +1 -0
- package/dist/testing/icon-sizes.js +39 -0
- package/dist/testing/icon-sizes.js.map +1 -0
- package/dist/testing/icon-sizes.test.d.ts +2 -0
- package/dist/testing/icon-sizes.test.d.ts.map +1 -0
- package/dist/testing/icon-sizes.test.js +36 -0
- package/dist/testing/icon-sizes.test.js.map +1 -0
- package/dist/testing/index.d.ts +40 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +40 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/source-scan.d.ts +16 -0
- package/dist/testing/source-scan.d.ts.map +1 -0
- package/dist/testing/source-scan.js +57 -0
- package/dist/testing/source-scan.js.map +1 -0
- package/dist/testing/tone-pairs.d.ts +20 -0
- package/dist/testing/tone-pairs.d.ts.map +1 -0
- package/dist/testing/tone-pairs.js +154 -0
- package/dist/testing/tone-pairs.js.map +1 -0
- package/dist/testing/type-scale.d.ts +40 -0
- package/dist/testing/type-scale.d.ts.map +1 -0
- package/dist/testing/type-scale.js +55 -0
- package/dist/testing/type-scale.js.map +1 -0
- package/dist/testing/type-scale.test.d.ts +2 -0
- package/dist/testing/type-scale.test.d.ts.map +1 -0
- package/dist/testing/type-scale.test.js +61 -0
- package/dist/testing/type-scale.test.js.map +1 -0
- package/dist/tool-schema-trim.d.ts +24 -0
- package/dist/tool-schema-trim.d.ts.map +1 -0
- package/dist/tool-schema-trim.js +49 -0
- package/dist/tool-schema-trim.js.map +1 -0
- package/dist/tool-schema-trim.test.d.ts +2 -0
- package/dist/tool-schema-trim.test.d.ts.map +1 -0
- package/dist/tool-schema-trim.test.js +53 -0
- package/dist/tool-schema-trim.test.js.map +1 -0
- package/dist/toolsets.d.ts +76 -0
- package/dist/toolsets.d.ts.map +1 -0
- package/dist/toolsets.js +41 -0
- package/dist/toolsets.js.map +1 -0
- package/dist/toolsets.test.d.ts +2 -0
- package/dist/toolsets.test.d.ts.map +1 -0
- package/dist/toolsets.test.js +86 -0
- package/dist/toolsets.test.js.map +1 -0
- package/dist/ui/action-feedback.d.ts +33 -0
- package/dist/ui/action-feedback.d.ts.map +1 -0
- package/dist/ui/action-feedback.js +51 -0
- package/dist/ui/action-feedback.js.map +1 -0
- package/dist/ui/action-feedback.test.d.ts +2 -0
- package/dist/ui/action-feedback.test.d.ts.map +1 -0
- package/dist/ui/action-feedback.test.js +77 -0
- package/dist/ui/action-feedback.test.js.map +1 -0
- package/dist/ui/app-shell-providers.d.ts +18 -0
- package/dist/ui/app-shell-providers.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.js +19 -0
- package/dist/ui/app-shell-providers.js.map +1 -0
- package/dist/ui/app-shell-providers.test.d.ts +2 -0
- package/dist/ui/app-shell-providers.test.d.ts.map +1 -0
- package/dist/ui/app-shell-providers.test.js +249 -0
- package/dist/ui/app-shell-providers.test.js.map +1 -0
- package/dist/ui/ask-ai-button.d.ts +56 -0
- package/dist/ui/ask-ai-button.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.js +36 -0
- package/dist/ui/ask-ai-button.js.map +1 -0
- package/dist/ui/ask-ai-button.test.d.ts +2 -0
- package/dist/ui/ask-ai-button.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-button.test.js +103 -0
- package/dist/ui/ask-ai-button.test.js.map +1 -0
- package/dist/ui/ask-ai-prompt.d.ts +115 -0
- package/dist/ui/ask-ai-prompt.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.js +174 -0
- package/dist/ui/ask-ai-prompt.js.map +1 -0
- package/dist/ui/ask-ai-prompt.test.d.ts +2 -0
- package/dist/ui/ask-ai-prompt.test.d.ts.map +1 -0
- package/dist/ui/ask-ai-prompt.test.js +240 -0
- package/dist/ui/ask-ai-prompt.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js +174 -0
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts +119 -0
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js +231 -0
- package/dist/ui/bpmn-heatmap/heat-utils.js.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js +59 -0
- package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts +46 -0
- package/dist/ui/bpmn-heatmap-labels.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-labels.js +16 -0
- package/dist/ui/bpmn-heatmap-labels.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts +38 -0
- package/dist/ui/bpmn-heatmap-widget.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.js +65 -0
- package/dist/ui/bpmn-heatmap-widget.js.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts +2 -0
- package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap-widget.test.js +173 -0
- package/dist/ui/bpmn-heatmap-widget.test.js.map +1 -0
- package/dist/ui/bpmn-heatmap.d.ts +61 -0
- package/dist/ui/bpmn-heatmap.d.ts.map +1 -0
- package/dist/ui/bpmn-heatmap.js +119 -0
- package/dist/ui/bpmn-heatmap.js.map +1 -0
- package/dist/ui/bpmn-tokens.d.ts +81 -0
- package/dist/ui/bpmn-tokens.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.js +114 -0
- package/dist/ui/bpmn-tokens.js.map +1 -0
- package/dist/ui/bpmn-tokens.test.d.ts +2 -0
- package/dist/ui/bpmn-tokens.test.d.ts.map +1 -0
- package/dist/ui/bpmn-tokens.test.js +98 -0
- package/dist/ui/bpmn-tokens.test.js.map +1 -0
- package/dist/ui/bpmn-zoom-controls.d.ts +30 -0
- package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -0
- package/dist/ui/bpmn-zoom-controls.js +29 -0
- package/dist/ui/bpmn-zoom-controls.js.map +1 -0
- package/dist/ui/brand-gates.test.d.ts +2 -0
- package/dist/ui/brand-gates.test.d.ts.map +1 -0
- package/dist/ui/brand-gates.test.js +131 -0
- package/dist/ui/brand-gates.test.js.map +1 -0
- package/dist/ui/brand-mark.d.ts +37 -0
- package/dist/ui/brand-mark.d.ts.map +1 -0
- package/dist/ui/brand-mark.js +33 -0
- package/dist/ui/brand-mark.js.map +1 -0
- package/dist/ui/brand-mark.test.d.ts +2 -0
- package/dist/ui/brand-mark.test.d.ts.map +1 -0
- package/dist/ui/brand-mark.test.js +111 -0
- package/dist/ui/brand-mark.test.js.map +1 -0
- package/dist/ui/confirm-dialog.d.ts +55 -0
- package/dist/ui/confirm-dialog.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.js +59 -0
- package/dist/ui/confirm-dialog.js.map +1 -0
- package/dist/ui/confirm-dialog.test.d.ts +2 -0
- package/dist/ui/confirm-dialog.test.d.ts.map +1 -0
- package/dist/ui/confirm-dialog.test.js +115 -0
- package/dist/ui/confirm-dialog.test.js.map +1 -0
- package/dist/ui/count-tone.d.ts +20 -0
- package/dist/ui/count-tone.d.ts.map +1 -0
- package/dist/ui/count-tone.js +27 -0
- package/dist/ui/count-tone.js.map +1 -0
- package/dist/ui/count-tone.test.d.ts +2 -0
- package/dist/ui/count-tone.test.d.ts.map +1 -0
- package/dist/ui/count-tone.test.js +27 -0
- package/dist/ui/count-tone.test.js.map +1 -0
- package/dist/ui/create-use-t.d.ts +15 -0
- package/dist/ui/create-use-t.d.ts.map +1 -0
- package/dist/ui/create-use-t.js +17 -0
- package/dist/ui/create-use-t.js.map +1 -0
- package/dist/ui/declare-served-fonts.d.ts +14 -0
- package/dist/ui/declare-served-fonts.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.js +38 -0
- package/dist/ui/declare-served-fonts.js.map +1 -0
- package/dist/ui/declare-served-fonts.test.d.ts +2 -0
- package/dist/ui/declare-served-fonts.test.d.ts.map +1 -0
- package/dist/ui/declare-served-fonts.test.js +44 -0
- package/dist/ui/declare-served-fonts.test.js.map +1 -0
- package/dist/ui/describe-error.d.ts +71 -0
- package/dist/ui/describe-error.d.ts.map +1 -0
- package/dist/ui/describe-error.js +175 -0
- package/dist/ui/describe-error.js.map +1 -0
- package/dist/ui/describe-error.test.d.ts +2 -0
- package/dist/ui/describe-error.test.d.ts.map +1 -0
- package/dist/ui/describe-error.test.js +274 -0
- package/dist/ui/describe-error.test.js.map +1 -0
- package/dist/ui/display-mode-toggle.d.ts +32 -0
- package/dist/ui/display-mode-toggle.d.ts.map +1 -0
- package/dist/ui/display-mode-toggle.js +39 -0
- package/dist/ui/display-mode-toggle.js.map +1 -0
- package/dist/ui/error-labels.d.ts +65 -0
- package/dist/ui/error-labels.d.ts.map +1 -0
- package/dist/ui/error-labels.js +111 -0
- package/dist/ui/error-labels.js.map +1 -0
- package/dist/ui/format.d.ts +81 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +189 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/format.test.d.ts +2 -0
- package/dist/ui/format.test.d.ts.map +1 -0
- package/dist/ui/format.test.js +181 -0
- package/dist/ui/format.test.js.map +1 -0
- package/dist/ui/generic-widgets.d.ts +15 -0
- package/dist/ui/generic-widgets.d.ts.map +1 -0
- package/dist/ui/generic-widgets.js +122 -0
- package/dist/ui/generic-widgets.js.map +1 -0
- package/dist/ui/generic-widgets.test.d.ts +2 -0
- package/dist/ui/generic-widgets.test.d.ts.map +1 -0
- package/dist/ui/generic-widgets.test.js +139 -0
- package/dist/ui/generic-widgets.test.js.map +1 -0
- package/dist/ui/hand-off-button.d.ts +44 -0
- package/dist/ui/hand-off-button.d.ts.map +1 -0
- package/dist/ui/hand-off-button.js +44 -0
- package/dist/ui/hand-off-button.js.map +1 -0
- package/dist/ui/hand-off-button.test.d.ts +2 -0
- package/dist/ui/hand-off-button.test.d.ts.map +1 -0
- package/dist/ui/hand-off-button.test.js +78 -0
- package/dist/ui/hand-off-button.test.js.map +1 -0
- package/dist/ui/host-context.d.ts +66 -0
- package/dist/ui/host-context.d.ts.map +1 -0
- package/dist/ui/host-context.js +122 -0
- package/dist/ui/host-context.js.map +1 -0
- package/dist/ui/host-context.test.d.ts +2 -0
- package/dist/ui/host-context.test.d.ts.map +1 -0
- package/dist/ui/host-context.test.js +160 -0
- package/dist/ui/host-context.test.js.map +1 -0
- package/dist/ui/host-document.d.ts +25 -0
- package/dist/ui/host-document.d.ts.map +1 -0
- package/dist/ui/host-document.js +93 -0
- package/dist/ui/host-document.js.map +1 -0
- package/dist/ui/host-document.test.d.ts +2 -0
- package/dist/ui/host-document.test.d.ts.map +1 -0
- package/dist/ui/host-document.test.js +112 -0
- package/dist/ui/host-document.test.js.map +1 -0
- package/dist/ui/host-widgets.d.ts +8 -0
- package/dist/ui/host-widgets.d.ts.map +1 -0
- package/dist/ui/host-widgets.js +18 -0
- package/dist/ui/host-widgets.js.map +1 -0
- package/dist/ui/humanize-key.d.ts +11 -0
- package/dist/ui/humanize-key.d.ts.map +1 -0
- package/dist/ui/humanize-key.js +26 -0
- package/dist/ui/humanize-key.js.map +1 -0
- package/dist/ui/humanize-key.test.d.ts +2 -0
- package/dist/ui/humanize-key.test.d.ts.map +1 -0
- package/dist/ui/humanize-key.test.js +42 -0
- package/dist/ui/humanize-key.test.js.map +1 -0
- package/dist/ui/icon.d.ts +37 -0
- package/dist/ui/icon.d.ts.map +1 -0
- package/dist/ui/icon.js +32 -0
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/id-breaks.d.ts +17 -0
- package/dist/ui/id-breaks.d.ts.map +1 -0
- package/dist/ui/id-breaks.js +36 -0
- package/dist/ui/id-breaks.js.map +1 -0
- package/dist/ui/id-breaks.test.d.ts +2 -0
- package/dist/ui/id-breaks.test.d.ts.map +1 -0
- package/dist/ui/id-breaks.test.js +37 -0
- package/dist/ui/id-breaks.test.js.map +1 -0
- package/dist/ui/id-text.d.ts +29 -0
- package/dist/ui/id-text.d.ts.map +1 -0
- package/dist/ui/id-text.js +103 -0
- package/dist/ui/id-text.js.map +1 -0
- package/dist/ui/id-text.test.d.ts +2 -0
- package/dist/ui/id-text.test.d.ts.map +1 -0
- package/dist/ui/id-text.test.js +122 -0
- package/dist/ui/id-text.test.js.map +1 -0
- package/dist/ui/index.d.ts +57 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +65 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.test.d.ts +2 -0
- package/dist/ui/index.test.d.ts.map +1 -0
- package/dist/ui/index.test.js +34 -0
- package/dist/ui/index.test.js.map +1 -0
- package/dist/ui/inline-budget.d.ts +35 -0
- package/dist/ui/inline-budget.d.ts.map +1 -0
- package/dist/ui/inline-budget.js +27 -0
- package/dist/ui/inline-budget.js.map +1 -0
- package/dist/ui/inline-fit-registry.d.ts +56 -0
- package/dist/ui/inline-fit-registry.d.ts.map +1 -0
- package/dist/ui/inline-fit-registry.js +114 -0
- package/dist/ui/inline-fit-registry.js.map +1 -0
- package/dist/ui/inline-fit-solve.d.ts +50 -0
- package/dist/ui/inline-fit-solve.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.js +83 -0
- package/dist/ui/inline-fit-solve.js.map +1 -0
- package/dist/ui/inline-fit-solve.test.d.ts +2 -0
- package/dist/ui/inline-fit-solve.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-solve.test.js +108 -0
- package/dist/ui/inline-fit-solve.test.js.map +1 -0
- package/dist/ui/inline-fit-time.test.d.ts +2 -0
- package/dist/ui/inline-fit-time.test.d.ts.map +1 -0
- package/dist/ui/inline-fit-time.test.js +110 -0
- package/dist/ui/inline-fit-time.test.js.map +1 -0
- package/dist/ui/inline-fit.d.ts +77 -0
- package/dist/ui/inline-fit.d.ts.map +1 -0
- package/dist/ui/inline-fit.js +242 -0
- package/dist/ui/inline-fit.js.map +1 -0
- package/dist/ui/inline-fit.test-support.d.ts +26 -0
- package/dist/ui/inline-fit.test-support.d.ts.map +1 -0
- package/dist/ui/inline-fit.test-support.js +34 -0
- package/dist/ui/inline-fit.test-support.js.map +1 -0
- package/dist/ui/inline-fit.test.d.ts +2 -0
- package/dist/ui/inline-fit.test.d.ts.map +1 -0
- package/dist/ui/inline-fit.test.js +159 -0
- package/dist/ui/inline-fit.test.js.map +1 -0
- package/dist/ui/kit-labels.d.ts +80 -0
- package/dist/ui/kit-labels.d.ts.map +1 -0
- package/dist/ui/kit-labels.js +110 -0
- package/dist/ui/kit-labels.js.map +1 -0
- package/dist/ui/kit-labels.test.d.ts +2 -0
- package/dist/ui/kit-labels.test.d.ts.map +1 -0
- package/dist/ui/kit-labels.test.js +98 -0
- package/dist/ui/kit-labels.test.js.map +1 -0
- package/dist/ui/kit-type-roles.test.d.ts +2 -0
- package/dist/ui/kit-type-roles.test.d.ts.map +1 -0
- package/dist/ui/kit-type-roles.test.js +122 -0
- package/dist/ui/kit-type-roles.test.js.map +1 -0
- package/dist/ui/komet-svg.d.ts +15 -0
- package/dist/ui/komet-svg.d.ts.map +1 -0
- package/dist/ui/komet-svg.js +21 -0
- package/dist/ui/komet-svg.js.map +1 -0
- package/dist/ui/list-table.d.ts +108 -0
- package/dist/ui/list-table.d.ts.map +1 -0
- package/dist/ui/list-table.js +161 -0
- package/dist/ui/list-table.js.map +1 -0
- package/dist/ui/list-table.test.d.ts +2 -0
- package/dist/ui/list-table.test.d.ts.map +1 -0
- package/dist/ui/list-table.test.js +169 -0
- package/dist/ui/list-table.test.js.map +1 -0
- package/dist/ui/localized-app-view.d.ts +40 -0
- package/dist/ui/localized-app-view.d.ts.map +1 -0
- package/dist/ui/localized-app-view.js +71 -0
- package/dist/ui/localized-app-view.js.map +1 -0
- package/dist/ui/log-text.d.ts +24 -0
- package/dist/ui/log-text.d.ts.map +1 -0
- package/dist/ui/log-text.js +31 -0
- package/dist/ui/log-text.js.map +1 -0
- package/dist/ui/menu-item.d.ts +12 -0
- package/dist/ui/menu-item.d.ts.map +1 -0
- package/dist/ui/menu-item.js +13 -0
- package/dist/ui/menu-item.js.map +1 -0
- package/dist/ui/named-id.d.ts +23 -0
- package/dist/ui/named-id.d.ts.map +1 -0
- package/dist/ui/named-id.js +21 -0
- package/dist/ui/named-id.js.map +1 -0
- package/dist/ui/named-id.test.d.ts +2 -0
- package/dist/ui/named-id.test.d.ts.map +1 -0
- package/dist/ui/named-id.test.js +57 -0
- package/dist/ui/named-id.test.js.map +1 -0
- package/dist/ui/native-select.d.ts +17 -0
- package/dist/ui/native-select.d.ts.map +1 -0
- package/dist/ui/native-select.js +20 -0
- package/dist/ui/native-select.js.map +1 -0
- package/dist/ui/navigation-focus.d.ts +20 -0
- package/dist/ui/navigation-focus.d.ts.map +1 -0
- package/dist/ui/navigation-focus.js +25 -0
- package/dist/ui/navigation-focus.js.map +1 -0
- package/dist/ui/navigation-focus.test.d.ts +2 -0
- package/dist/ui/navigation-focus.test.d.ts.map +1 -0
- package/dist/ui/navigation-focus.test.js +28 -0
- package/dist/ui/navigation-focus.test.js.map +1 -0
- package/dist/ui/open-in-cockpit-link.d.ts +28 -0
- package/dist/ui/open-in-cockpit-link.d.ts.map +1 -0
- package/dist/ui/open-in-cockpit-link.js +41 -0
- package/dist/ui/open-in-cockpit-link.js.map +1 -0
- package/dist/ui/paged-list-footer.test.d.ts +2 -0
- package/dist/ui/paged-list-footer.test.d.ts.map +1 -0
- package/dist/ui/paged-list-footer.test.js +128 -0
- package/dist/ui/paged-list-footer.test.js.map +1 -0
- package/dist/ui/paged-rows.d.ts +24 -0
- package/dist/ui/paged-rows.d.ts.map +1 -0
- package/dist/ui/paged-rows.js +25 -0
- package/dist/ui/paged-rows.js.map +1 -0
- package/dist/ui/parse-tool-result.test.d.ts +2 -0
- package/dist/ui/parse-tool-result.test.d.ts.map +1 -0
- package/dist/ui/parse-tool-result.test.js +88 -0
- package/dist/ui/parse-tool-result.test.js.map +1 -0
- package/dist/ui/profile-gate.d.ts +37 -0
- package/dist/ui/profile-gate.d.ts.map +1 -0
- package/dist/ui/profile-gate.js +126 -0
- package/dist/ui/profile-gate.js.map +1 -0
- package/dist/ui/profile-gate.test.d.ts +2 -0
- package/dist/ui/profile-gate.test.d.ts.map +1 -0
- package/dist/ui/profile-gate.test.js +246 -0
- package/dist/ui/profile-gate.test.js.map +1 -0
- package/dist/ui/query-fallback.d.ts +27 -0
- package/dist/ui/query-fallback.d.ts.map +1 -0
- package/dist/ui/query-fallback.js +30 -0
- package/dist/ui/query-fallback.js.map +1 -0
- package/dist/ui/query-fallback.test.d.ts +2 -0
- package/dist/ui/query-fallback.test.d.ts.map +1 -0
- package/dist/ui/query-fallback.test.js +49 -0
- package/dist/ui/query-fallback.test.js.map +1 -0
- package/dist/ui/row-card.d.ts +13 -0
- package/dist/ui/row-card.d.ts.map +1 -0
- package/dist/ui/row-card.js +11 -0
- package/dist/ui/row-card.js.map +1 -0
- package/dist/ui/section.d.ts +18 -0
- package/dist/ui/section.d.ts.map +1 -0
- package/dist/ui/section.js +14 -0
- package/dist/ui/section.js.map +1 -0
- package/dist/ui/segmented-control.d.ts +25 -0
- package/dist/ui/segmented-control.d.ts.map +1 -0
- package/dist/ui/segmented-control.js +22 -0
- package/dist/ui/segmented-control.js.map +1 -0
- package/dist/ui/settings-labels.d.ts +33 -0
- package/dist/ui/settings-labels.d.ts.map +1 -0
- package/dist/ui/settings-labels.js +50 -0
- package/dist/ui/settings-labels.js.map +1 -0
- package/dist/ui/settings-layout.d.ts +29 -0
- package/dist/ui/settings-layout.d.ts.map +1 -0
- package/dist/ui/settings-layout.js +49 -0
- package/dist/ui/settings-layout.js.map +1 -0
- package/dist/ui/settings-layout.test.d.ts +2 -0
- package/dist/ui/settings-layout.test.d.ts.map +1 -0
- package/dist/ui/settings-layout.test.js +73 -0
- package/dist/ui/settings-layout.test.js.map +1 -0
- package/dist/ui/settings.d.ts +47 -0
- package/dist/ui/settings.d.ts.map +1 -0
- package/dist/ui/settings.js +48 -0
- package/dist/ui/settings.js.map +1 -0
- package/dist/ui/settings.test.d.ts +2 -0
- package/dist/ui/settings.test.d.ts.map +1 -0
- package/dist/ui/settings.test.js +38 -0
- package/dist/ui/settings.test.js.map +1 -0
- package/dist/ui/shell-host.d.ts +46 -0
- package/dist/ui/shell-host.d.ts.map +1 -0
- package/dist/ui/shell-host.js +56 -0
- package/dist/ui/shell-host.js.map +1 -0
- package/dist/ui/shell-settings.d.ts +31 -0
- package/dist/ui/shell-settings.d.ts.map +1 -0
- package/dist/ui/shell-settings.js +97 -0
- package/dist/ui/shell-settings.js.map +1 -0
- package/dist/ui/shell-settings.test.d.ts +2 -0
- package/dist/ui/shell-settings.test.d.ts.map +1 -0
- package/dist/ui/shell-settings.test.js +108 -0
- package/dist/ui/shell-settings.test.js.map +1 -0
- package/dist/ui/shell-widgets.d.ts +14 -0
- package/dist/ui/shell-widgets.d.ts.map +1 -0
- package/dist/ui/shell-widgets.js +18 -0
- package/dist/ui/shell-widgets.js.map +1 -0
- package/dist/ui/table.d.ts +61 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +43 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tone-components.test.d.ts +2 -0
- package/dist/ui/tone-components.test.d.ts.map +1 -0
- package/dist/ui/tone-components.test.js +145 -0
- package/dist/ui/tone-components.test.js.map +1 -0
- package/dist/ui/tone-contrast.test.d.ts +2 -0
- package/dist/ui/tone-contrast.test.d.ts.map +1 -0
- package/dist/ui/tone-contrast.test.js +66 -0
- package/dist/ui/tone-contrast.test.js.map +1 -0
- package/dist/ui/toolkit-overlap.test.d.ts +2 -0
- package/dist/ui/toolkit-overlap.test.d.ts.map +1 -0
- package/dist/ui/toolkit-overlap.test.js +86 -0
- package/dist/ui/toolkit-overlap.test.js.map +1 -0
- package/dist/ui/use-apply-theme.d.ts +11 -0
- package/dist/ui/use-apply-theme.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.js +37 -0
- package/dist/ui/use-apply-theme.js.map +1 -0
- package/dist/ui/use-apply-theme.test.d.ts +2 -0
- package/dist/ui/use-apply-theme.test.d.ts.map +1 -0
- package/dist/ui/use-apply-theme.test.js +102 -0
- package/dist/ui/use-apply-theme.test.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.d.ts +135 -0
- package/dist/ui/use-bpmn-viewer.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.js +257 -0
- package/dist/ui/use-bpmn-viewer.js.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts +2 -0
- package/dist/ui/use-bpmn-viewer.test.d.ts.map +1 -0
- package/dist/ui/use-bpmn-viewer.test.js +239 -0
- package/dist/ui/use-bpmn-viewer.test.js.map +1 -0
- package/dist/ui/use-detail-view.d.ts +49 -0
- package/dist/ui/use-detail-view.d.ts.map +1 -0
- package/dist/ui/use-detail-view.js +52 -0
- package/dist/ui/use-detail-view.js.map +1 -0
- package/dist/ui/use-detail-view.test.d.ts +2 -0
- package/dist/ui/use-detail-view.test.d.ts.map +1 -0
- package/dist/ui/use-detail-view.test.js +178 -0
- package/dist/ui/use-detail-view.test.js.map +1 -0
- package/dist/ui/use-paged-list-view.d.ts +48 -0
- package/dist/ui/use-paged-list-view.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.js +41 -0
- package/dist/ui/use-paged-list-view.js.map +1 -0
- package/dist/ui/use-paged-list-view.test.d.ts +2 -0
- package/dist/ui/use-paged-list-view.test.d.ts.map +1 -0
- package/dist/ui/use-paged-list-view.test.js +136 -0
- package/dist/ui/use-paged-list-view.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.d.ts +103 -0
- package/dist/ui/use-paged-view-data.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.js +173 -0
- package/dist/ui/use-paged-view-data.js.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.seeded.test.js +144 -0
- package/dist/ui/use-paged-view-data.seeded.test.js.map +1 -0
- package/dist/ui/use-paged-view-data.test.d.ts +2 -0
- package/dist/ui/use-paged-view-data.test.d.ts.map +1 -0
- package/dist/ui/use-paged-view-data.test.js +330 -0
- package/dist/ui/use-paged-view-data.test.js.map +1 -0
- package/dist/ui/use-reset-on-change.d.ts +22 -0
- package/dist/ui/use-reset-on-change.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.js +29 -0
- package/dist/ui/use-reset-on-change.js.map +1 -0
- package/dist/ui/use-reset-on-change.test.d.ts +2 -0
- package/dist/ui/use-reset-on-change.test.d.ts.map +1 -0
- package/dist/ui/use-reset-on-change.test.js +61 -0
- package/dist/ui/use-reset-on-change.test.js.map +1 -0
- package/dist/ui/use-view-data.seeded.test.d.ts +2 -0
- package/dist/ui/use-view-data.seeded.test.d.ts.map +1 -0
- package/dist/ui/use-view-data.seeded.test.js +168 -0
- package/dist/ui/use-view-data.seeded.test.js.map +1 -0
- package/dist/ui/view-data-state.d.ts +52 -0
- package/dist/ui/view-data-state.d.ts.map +1 -0
- package/dist/ui/view-data-state.js +54 -0
- package/dist/ui/view-data-state.js.map +1 -0
- package/dist/ui/view-data-state.test.d.ts +2 -0
- package/dist/ui/view-data-state.test.d.ts.map +1 -0
- package/dist/ui/view-data-state.test.js +62 -0
- package/dist/ui/view-data-state.test.js.map +1 -0
- package/dist/ui/view-meta.d.ts +70 -0
- package/dist/ui/view-meta.d.ts.map +1 -0
- package/dist/ui/view-meta.js +84 -0
- package/dist/ui/view-meta.js.map +1 -0
- package/dist/ui/view-meta.test.d.ts +2 -0
- package/dist/ui/view-meta.test.d.ts.map +1 -0
- package/dist/ui/view-meta.test.js +92 -0
- package/dist/ui/view-meta.test.js.map +1 -0
- package/dist/ui/view-refresh-state.d.ts +26 -0
- package/dist/ui/view-refresh-state.d.ts.map +1 -0
- package/dist/ui/view-refresh-state.js +15 -0
- package/dist/ui/view-refresh-state.js.map +1 -0
- package/dist/ui/widget-shell.d.ts +24 -0
- package/dist/ui/widget-shell.d.ts.map +1 -0
- package/dist/ui/widget-shell.js +50 -0
- package/dist/ui/widget-shell.js.map +1 -0
- package/dist/ui/widget-shell.test.d.ts +2 -0
- package/dist/ui/widget-shell.test.d.ts.map +1 -0
- package/dist/ui/widget-shell.test.js +41 -0
- package/dist/ui/widget-shell.test.js.map +1 -0
- package/dist/view-results.d.ts +42 -0
- package/dist/view-results.d.ts.map +1 -0
- package/dist/view-results.js +17 -0
- package/dist/view-results.js.map +1 -0
- package/dist/widget-meta-defaults.d.ts +48 -0
- package/dist/widget-meta-defaults.d.ts.map +1 -0
- package/dist/widget-meta-defaults.js +80 -0
- package/dist/widget-meta-defaults.js.map +1 -0
- package/dist/widget-meta-defaults.test.d.ts +2 -0
- package/dist/widget-meta-defaults.test.d.ts.map +1 -0
- package/dist/widget-meta-defaults.test.js +196 -0
- package/dist/widget-meta-defaults.test.js.map +1 -0
- package/dist/widget-tool-bindings.d.ts +71 -0
- package/dist/widget-tool-bindings.d.ts.map +1 -0
- package/dist/widget-tool-bindings.js +80 -0
- package/dist/widget-tool-bindings.js.map +1 -0
- package/dist/widget-tool-bindings.test.d.ts +2 -0
- package/dist/widget-tool-bindings.test.d.ts.map +1 -0
- package/dist/widget-tool-bindings.test.js +83 -0
- package/dist/widget-tool-bindings.test.js.map +1 -0
- package/dist/with-tool-errors.test.d.ts +2 -0
- package/dist/with-tool-errors.test.d.ts.map +1 -0
- package/dist/with-tool-errors.test.js +38 -0
- package/dist/with-tool-errors.test.js.map +1 -0
- package/package.json +113 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.test.js","sourceRoot":"","sources":["../src/composition.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DashboardStore } from "@miragon/mcp-toolkit-core/tools";
|
|
2
|
+
import type postgres from "postgres";
|
|
3
|
+
import type { Migration } from "./postgres.js";
|
|
4
|
+
/**
|
|
5
|
+
* DDL owned by this store, executed by `runMigrations`. Like the profile
|
|
6
|
+
* table, the full record lives in one JSONB column (layout/steps/keys are
|
|
7
|
+
* arbitrarily nested `render-view` input, not relationally decomposable) whose
|
|
8
|
+
* shape is governed by the toolkit's `parseDashboardRecord`/
|
|
9
|
+
* `DASHBOARD_SCHEMA_VERSION` — a toolkit upgrade that adds a layout field
|
|
10
|
+
* needs no migration here. `user_id`/`updated_at` are mirrored out so `list`
|
|
11
|
+
* can filter by owner and sort in SQL, and so a row whose JSONB this build
|
|
12
|
+
* cannot read still has an owner and a timestamp.
|
|
13
|
+
*
|
|
14
|
+
* The `002_` prefix is historical (it shipped after `001_user_profiles` in the
|
|
15
|
+
* stock app) and stays: the name is the key recorded in `schema_migrations` on
|
|
16
|
+
* every existing database, so renaming it would re-run the DDL there. A server
|
|
17
|
+
* that persists dashboards WITHOUT profiles simply has no `001_`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DASHBOARD_STORE_MIGRATIONS: readonly Migration[];
|
|
20
|
+
/**
|
|
21
|
+
* Dashboards stored one row per record in the `dashboards` table, implementing
|
|
22
|
+
* the toolkit's `DashboardStore` contract (injected via
|
|
23
|
+
* `frameworkOptions.app.dashboardStore`) — the multi-writer counterpart to the
|
|
24
|
+
* toolkit's filesystem store, whose `save` is documented as racy. Selected
|
|
25
|
+
* next to `createPostgresProfileStore` when the deployment has a
|
|
26
|
+
* `DATABASE_URL`; the caller owns the `sql` client's lifecycle, so this
|
|
27
|
+
* package carries no runtime dependency on the driver.
|
|
28
|
+
*
|
|
29
|
+
* Ownership is the toolkit's rule, never re-derived here: `isDashboardOwnedBy`
|
|
30
|
+
* decides visibility (no caller id = global scope; an identified caller owns
|
|
31
|
+
* exactly the records stamped with its id, and an owner-less record is not
|
|
32
|
+
* one of them), and `resolveSavedRecord` enforces it on updates. A row whose
|
|
33
|
+
* JSONB fails `parseDashboardRecord` (corrupt, or written by a newer build) is
|
|
34
|
+
* a conflict, never "absent": `get`/`save`/`delete` reject with
|
|
35
|
+
* `DashboardUnreadableError` for a caller it belongs to, `list` reports it with
|
|
36
|
+
* `unreadable`, and the row stays in place — so a save can never overwrite it
|
|
37
|
+
* and hand it a new owner.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createPostgresDashboardStore(options: {
|
|
40
|
+
sql: postgres.Sql;
|
|
41
|
+
label?: string;
|
|
42
|
+
}): DashboardStore;
|
|
43
|
+
//# sourceMappingURL=dashboard-store-postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-store-postgres.d.ts","sourceRoot":"","sources":["../src/dashboard-store-postgres.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,cAAc,EAEf,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,SAAS,EAc1D,CAAA;AA6DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,cAAc,CAqIjB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { DASHBOARD_SCHEMA_VERSION, DashboardOwnershipError, DashboardUnreadableError, isDashboardOwnedBy, parseDashboardRecord, resolveSavedRecord, } from "@miragon/mcp-toolkit-core/tools";
|
|
3
|
+
/**
|
|
4
|
+
* DDL owned by this store, executed by `runMigrations`. Like the profile
|
|
5
|
+
* table, the full record lives in one JSONB column (layout/steps/keys are
|
|
6
|
+
* arbitrarily nested `render-view` input, not relationally decomposable) whose
|
|
7
|
+
* shape is governed by the toolkit's `parseDashboardRecord`/
|
|
8
|
+
* `DASHBOARD_SCHEMA_VERSION` — a toolkit upgrade that adds a layout field
|
|
9
|
+
* needs no migration here. `user_id`/`updated_at` are mirrored out so `list`
|
|
10
|
+
* can filter by owner and sort in SQL, and so a row whose JSONB this build
|
|
11
|
+
* cannot read still has an owner and a timestamp.
|
|
12
|
+
*
|
|
13
|
+
* The `002_` prefix is historical (it shipped after `001_user_profiles` in the
|
|
14
|
+
* stock app) and stays: the name is the key recorded in `schema_migrations` on
|
|
15
|
+
* every existing database, so renaming it would re-run the DDL there. A server
|
|
16
|
+
* that persists dashboards WITHOUT profiles simply has no `001_`.
|
|
17
|
+
*/
|
|
18
|
+
export const DASHBOARD_STORE_MIGRATIONS = [
|
|
19
|
+
{
|
|
20
|
+
name: "002_dashboards",
|
|
21
|
+
statements: [
|
|
22
|
+
`CREATE TABLE IF NOT EXISTS dashboards (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
user_id TEXT,
|
|
25
|
+
record JSONB NOT NULL,
|
|
26
|
+
updated_at TIMESTAMPTZ NOT NULL
|
|
27
|
+
)`,
|
|
28
|
+
`CREATE INDEX IF NOT EXISTS dashboards_list_idx
|
|
29
|
+
ON dashboards (user_id, updated_at DESC)`,
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
function classifyRow(row) {
|
|
34
|
+
const record = parseDashboardRecord(row.record);
|
|
35
|
+
if (record)
|
|
36
|
+
return { state: "readable", record };
|
|
37
|
+
const payload = typeof row.record === "object" && row.record !== null ? row.record : {};
|
|
38
|
+
const version = payload.schemaVersion;
|
|
39
|
+
return {
|
|
40
|
+
state: "unreadable",
|
|
41
|
+
id: row.id,
|
|
42
|
+
// The toolkit's wording, so both stores report the same reasons.
|
|
43
|
+
reason: typeof version === "number" && version > DASHBOARD_SCHEMA_VERSION
|
|
44
|
+
? `written by a newer schemaVersion ${version} (this build reads up to ${DASHBOARD_SCHEMA_VERSION})`
|
|
45
|
+
: "does not match the current record schema",
|
|
46
|
+
// The mirrored column is written in the same statement as the record, so
|
|
47
|
+
// it still attributes the row when the payload is unreadable.
|
|
48
|
+
...(row.user_id === null ? {} : { ownerId: row.user_id }),
|
|
49
|
+
updatedAt: new Date(row.updated_at).toISOString(),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Whose row it is: the payload's owner when readable, else the mirrored column's. */
|
|
53
|
+
function ownerOf(stored) {
|
|
54
|
+
return stored.state === "readable" ? stored.record.userId : stored.ownerId;
|
|
55
|
+
}
|
|
56
|
+
function toSummary(stored) {
|
|
57
|
+
if (stored.state === "unreadable") {
|
|
58
|
+
return {
|
|
59
|
+
id: stored.id,
|
|
60
|
+
name: stored.id,
|
|
61
|
+
...(stored.ownerId === undefined ? {} : { userId: stored.ownerId }),
|
|
62
|
+
updatedAt: stored.updatedAt,
|
|
63
|
+
unreadable: stored.reason,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const { record } = stored;
|
|
67
|
+
return {
|
|
68
|
+
id: record.id,
|
|
69
|
+
name: record.name,
|
|
70
|
+
description: record.description,
|
|
71
|
+
title: record.title,
|
|
72
|
+
userId: record.userId,
|
|
73
|
+
updatedAt: record.updatedAt,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Dashboards stored one row per record in the `dashboards` table, implementing
|
|
78
|
+
* the toolkit's `DashboardStore` contract (injected via
|
|
79
|
+
* `frameworkOptions.app.dashboardStore`) — the multi-writer counterpart to the
|
|
80
|
+
* toolkit's filesystem store, whose `save` is documented as racy. Selected
|
|
81
|
+
* next to `createPostgresProfileStore` when the deployment has a
|
|
82
|
+
* `DATABASE_URL`; the caller owns the `sql` client's lifecycle, so this
|
|
83
|
+
* package carries no runtime dependency on the driver.
|
|
84
|
+
*
|
|
85
|
+
* Ownership is the toolkit's rule, never re-derived here: `isDashboardOwnedBy`
|
|
86
|
+
* decides visibility (no caller id = global scope; an identified caller owns
|
|
87
|
+
* exactly the records stamped with its id, and an owner-less record is not
|
|
88
|
+
* one of them), and `resolveSavedRecord` enforces it on updates. A row whose
|
|
89
|
+
* JSONB fails `parseDashboardRecord` (corrupt, or written by a newer build) is
|
|
90
|
+
* a conflict, never "absent": `get`/`save`/`delete` reject with
|
|
91
|
+
* `DashboardUnreadableError` for a caller it belongs to, `list` reports it with
|
|
92
|
+
* `unreadable`, and the row stays in place — so a save can never overwrite it
|
|
93
|
+
* and hand it a new owner.
|
|
94
|
+
*/
|
|
95
|
+
export function createPostgresDashboardStore(options) {
|
|
96
|
+
const { sql, label = "dashboard-store" } = options;
|
|
97
|
+
const classify = (row) => {
|
|
98
|
+
const stored = classifyRow(row);
|
|
99
|
+
if (stored.state === "unreadable") {
|
|
100
|
+
console.warn(`[${label}] Dashboard "${row.id}" is unreadable: ${stored.reason}.`);
|
|
101
|
+
}
|
|
102
|
+
return stored;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* The caller's view of an addressed row: `undefined` when it is absent or
|
|
106
|
+
* not the caller's, the record when readable, and a thrown
|
|
107
|
+
* `DashboardUnreadableError` when it is the caller's but unreadable.
|
|
108
|
+
*/
|
|
109
|
+
const ownRecord = (row, userId) => {
|
|
110
|
+
if (!row)
|
|
111
|
+
return undefined;
|
|
112
|
+
const stored = classify(row);
|
|
113
|
+
if (!isDashboardOwnedBy(ownerOf(stored), userId))
|
|
114
|
+
return undefined;
|
|
115
|
+
if (stored.state === "unreadable")
|
|
116
|
+
throw new DashboardUnreadableError(row.id, stored.reason);
|
|
117
|
+
return stored.record;
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
async save(input) {
|
|
121
|
+
return await sql.begin(async (tx) => {
|
|
122
|
+
// Advisory lock, not just SELECT…FOR UPDATE: a row that does not exist
|
|
123
|
+
// yet cannot be row-locked, so two concurrent FIRST saves of the same
|
|
124
|
+
// id would both see "no existing record", both take the create branch,
|
|
125
|
+
// and the second upsert would overwrite the first (including its
|
|
126
|
+
// createdAt/userId) without ever passing the ownership check. Only
|
|
127
|
+
// reachable when the caller supplies an id — a generated UUID collides
|
|
128
|
+
// with nothing. Same primitive as the profile store's per-key lock.
|
|
129
|
+
if (input.id) {
|
|
130
|
+
await tx `SELECT pg_advisory_xact_lock(hashtextextended('dashboards:' || ${input.id}, 0))`;
|
|
131
|
+
}
|
|
132
|
+
const rows = input.id
|
|
133
|
+
? await tx `
|
|
134
|
+
SELECT id, user_id, record, updated_at FROM dashboards
|
|
135
|
+
WHERE id = ${input.id} FOR UPDATE
|
|
136
|
+
`
|
|
137
|
+
: [];
|
|
138
|
+
const stored = rows[0] ? classify(rows[0]) : undefined;
|
|
139
|
+
if (stored?.state === "unreadable") {
|
|
140
|
+
if (!isDashboardOwnedBy(stored.ownerId, input.userId)) {
|
|
141
|
+
throw new DashboardOwnershipError(stored.ownerId
|
|
142
|
+
? `Access denied: dashboard "${stored.id}" is owned by another user.`
|
|
143
|
+
: `Access denied: dashboard "${stored.id}" has no owner; an owner-less (global-scope) dashboard is not writable by an identified caller.`);
|
|
144
|
+
}
|
|
145
|
+
throw new DashboardUnreadableError(stored.id, stored.reason);
|
|
146
|
+
}
|
|
147
|
+
const now = new Date().toISOString();
|
|
148
|
+
// resolveSavedRecord returns null for a create and throws
|
|
149
|
+
// DashboardOwnershipError when an update would touch a record the
|
|
150
|
+
// caller doesn't own (another user's, or an owner-less one) — both
|
|
151
|
+
// semantics come straight from the toolkit.
|
|
152
|
+
const record = resolveSavedRecord(stored?.record, input, now) ?? {
|
|
153
|
+
id: input.id ?? randomUUID(),
|
|
154
|
+
name: input.name,
|
|
155
|
+
description: input.description,
|
|
156
|
+
userId: input.userId,
|
|
157
|
+
keys: input.keys,
|
|
158
|
+
steps: input.steps,
|
|
159
|
+
layout: input.layout,
|
|
160
|
+
title: input.title,
|
|
161
|
+
schemaVersion: DASHBOARD_SCHEMA_VERSION,
|
|
162
|
+
createdAt: now,
|
|
163
|
+
updatedAt: now,
|
|
164
|
+
};
|
|
165
|
+
// sql.json, not JSON.stringify: postgres.js serializes parameters by
|
|
166
|
+
// the server-described type, and the jsonb serializer stringifies
|
|
167
|
+
// itself — a pre-stringified value gets double-encoded into a jsonb
|
|
168
|
+
// string scalar.
|
|
169
|
+
await tx `
|
|
170
|
+
INSERT INTO dashboards (id, user_id, record, updated_at)
|
|
171
|
+
VALUES (
|
|
172
|
+
${record.id},
|
|
173
|
+
${record.userId ?? null},
|
|
174
|
+
${tx.json(record)},
|
|
175
|
+
${record.updatedAt}
|
|
176
|
+
)
|
|
177
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
178
|
+
user_id = EXCLUDED.user_id,
|
|
179
|
+
record = EXCLUDED.record,
|
|
180
|
+
updated_at = EXCLUDED.updated_at
|
|
181
|
+
`;
|
|
182
|
+
return record;
|
|
183
|
+
});
|
|
184
|
+
},
|
|
185
|
+
async list(filter) {
|
|
186
|
+
// The owner predicate is pushed into SQL so a large table doesn't get
|
|
187
|
+
// read in full; ordering on the mirrored timestamptz column matches the
|
|
188
|
+
// toolkit's ISO-string sort.
|
|
189
|
+
const rows = filter.userId
|
|
190
|
+
? await sql `
|
|
191
|
+
SELECT id, user_id, record, updated_at FROM dashboards
|
|
192
|
+
WHERE user_id = ${filter.userId}
|
|
193
|
+
ORDER BY updated_at DESC
|
|
194
|
+
`
|
|
195
|
+
: await sql `
|
|
196
|
+
SELECT id, user_id, record, updated_at FROM dashboards
|
|
197
|
+
ORDER BY updated_at DESC
|
|
198
|
+
`;
|
|
199
|
+
// The SQL predicate is the fast path, `isDashboardOwnedBy` the authority
|
|
200
|
+
// — in case the mirrored user_id column ever diverges from the payload.
|
|
201
|
+
return rows
|
|
202
|
+
.map(classify)
|
|
203
|
+
.filter((stored) => isDashboardOwnedBy(ownerOf(stored), filter.userId))
|
|
204
|
+
.map(toSummary);
|
|
205
|
+
},
|
|
206
|
+
async get(id, filter) {
|
|
207
|
+
const rows = await sql `
|
|
208
|
+
SELECT id, user_id, record, updated_at FROM dashboards WHERE id = ${id}
|
|
209
|
+
`;
|
|
210
|
+
return ownRecord(rows[0], filter.userId);
|
|
211
|
+
},
|
|
212
|
+
async delete(id, filter) {
|
|
213
|
+
return await sql.begin(async (tx) => {
|
|
214
|
+
const rows = await tx `
|
|
215
|
+
SELECT id, user_id, record, updated_at FROM dashboards WHERE id = ${id} FOR UPDATE
|
|
216
|
+
`;
|
|
217
|
+
if (!ownRecord(rows[0], filter.userId))
|
|
218
|
+
return false;
|
|
219
|
+
await tx `DELETE FROM dashboards WHERE id = ${id}`;
|
|
220
|
+
return true;
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=dashboard-store-postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-store-postgres.js","sourceRoot":"","sources":["../src/dashboard-store-postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-store-postgres.test.d.ts","sourceRoot":"","sources":["../src/dashboard-store-postgres.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import postgres from "postgres";
|
|
2
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
3
|
+
import { DashboardOwnershipError, DashboardUnreadableError } from "@miragon/mcp-toolkit-core/tools";
|
|
4
|
+
import { createPostgresDashboardStore, DASHBOARD_STORE_MIGRATIONS, } from "./dashboard-store-postgres.js";
|
|
5
|
+
import { postgresReadinessCheck, runMigrations } from "./postgres.js";
|
|
6
|
+
import { PROFILE_STORE_MIGRATIONS } from "./profile-store-postgres.js";
|
|
7
|
+
const LAYOUT = [{ row: [{ widget: "shell:kpi-grid" }] }];
|
|
8
|
+
/** A record payload that passes the toolkit's schema — for rows written raw. */
|
|
9
|
+
const validRecord = (id) => ({
|
|
10
|
+
id,
|
|
11
|
+
name: id,
|
|
12
|
+
layout: LAYOUT,
|
|
13
|
+
schemaVersion: 1,
|
|
14
|
+
createdAt: "2026-10-01T00:00:00.000Z",
|
|
15
|
+
updatedAt: "2026-10-01T00:00:00.000Z",
|
|
16
|
+
});
|
|
17
|
+
/** updatedAt has millisecond precision — space writes out for stable ordering. */
|
|
18
|
+
const tick = () => new Promise((resolve) => setTimeout(resolve, 10));
|
|
19
|
+
// Opt-in integration slice (like test:host): needs a reachable Postgres, so it
|
|
20
|
+
// only runs when TEST_DATABASE_URL is set — `pnpm test:pg` at the repo root
|
|
21
|
+
// points it at the compose stack's dedicated test database. An own schema
|
|
22
|
+
// isolates it from the other suites sharing that database.
|
|
23
|
+
const TEST_DATABASE_URL = process.env.TEST_DATABASE_URL;
|
|
24
|
+
const TEST_SCHEMA = "widget_shell_dashboard_store_test";
|
|
25
|
+
describe.skipIf(!TEST_DATABASE_URL)("postgres persistence", () => {
|
|
26
|
+
let sql;
|
|
27
|
+
beforeAll(async () => {
|
|
28
|
+
sql = postgres(TEST_DATABASE_URL, {
|
|
29
|
+
max: 2,
|
|
30
|
+
onnotice: () => { },
|
|
31
|
+
connection: { search_path: TEST_SCHEMA },
|
|
32
|
+
});
|
|
33
|
+
await sql.unsafe(`DROP SCHEMA IF EXISTS ${TEST_SCHEMA} CASCADE`);
|
|
34
|
+
await sql.unsafe(`CREATE SCHEMA ${TEST_SCHEMA}`);
|
|
35
|
+
});
|
|
36
|
+
afterAll(async () => {
|
|
37
|
+
await sql.end({ timeout: 5 });
|
|
38
|
+
});
|
|
39
|
+
// Runs first (single-file describes execute in order) and doubles as the
|
|
40
|
+
// table setup for the store tests below — the exact boot sequence of
|
|
41
|
+
// initRuntime.
|
|
42
|
+
describe("runMigrations", () => {
|
|
43
|
+
it("applies pending migrations in order and records them by name", async () => {
|
|
44
|
+
const applied = await runMigrations(sql, [
|
|
45
|
+
...PROFILE_STORE_MIGRATIONS,
|
|
46
|
+
...DASHBOARD_STORE_MIGRATIONS,
|
|
47
|
+
]);
|
|
48
|
+
expect(applied).toEqual(["001_user_profiles", "002_dashboards"]);
|
|
49
|
+
// The created tables are actually usable.
|
|
50
|
+
const rows = await sql `SELECT count(*)::int AS n FROM dashboards`;
|
|
51
|
+
expect(rows[0].n).toBe(0);
|
|
52
|
+
});
|
|
53
|
+
it("is idempotent on a second run", async () => {
|
|
54
|
+
const applied = await runMigrations(sql, [
|
|
55
|
+
...PROFILE_STORE_MIGRATIONS,
|
|
56
|
+
...DASHBOARD_STORE_MIGRATIONS,
|
|
57
|
+
]);
|
|
58
|
+
expect(applied).toEqual([]);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("createPostgresDashboardStore", () => {
|
|
62
|
+
let store;
|
|
63
|
+
beforeAll(() => {
|
|
64
|
+
store = createPostgresDashboardStore({ sql });
|
|
65
|
+
});
|
|
66
|
+
beforeEach(async () => {
|
|
67
|
+
await sql `DELETE FROM dashboards`;
|
|
68
|
+
});
|
|
69
|
+
it("creates a record with generated id and server-managed metadata", async () => {
|
|
70
|
+
const record = await store.save({ name: "ops", layout: LAYOUT });
|
|
71
|
+
expect(record.id).toBeTruthy();
|
|
72
|
+
expect(record.schemaVersion).toBe(1);
|
|
73
|
+
expect(record.createdAt).toBe(record.updatedAt);
|
|
74
|
+
expect(await store.get(record.id, {})).toEqual(record);
|
|
75
|
+
});
|
|
76
|
+
it("updates by id, preserving createdAt and advancing updatedAt", async () => {
|
|
77
|
+
const created = await store.save({ name: "ops", layout: LAYOUT });
|
|
78
|
+
await tick();
|
|
79
|
+
const updated = await store.save({ id: created.id, name: "renamed", layout: LAYOUT });
|
|
80
|
+
expect(updated.id).toBe(created.id);
|
|
81
|
+
expect(updated.name).toBe("renamed");
|
|
82
|
+
expect(updated.createdAt).toBe(created.createdAt);
|
|
83
|
+
expect(updated.updatedAt > created.updatedAt).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it("takes the per-id advisory lock before the create branch", async () => {
|
|
86
|
+
// The row does not exist yet, so SELECT…FOR UPDATE has nothing to lock:
|
|
87
|
+
// without the advisory lock two concurrent first saves of the same id
|
|
88
|
+
// both take the create branch and the second upsert overwrites the
|
|
89
|
+
// first — ownership check included. Racing two saves does NOT prove the
|
|
90
|
+
// lock is there (postgres serializes them at the unique index either
|
|
91
|
+
// way), so hold the lock from a separate session and assert the save
|
|
92
|
+
// WAITS for it: with the lock removed from the store this resolves
|
|
93
|
+
// immediately and the test fails.
|
|
94
|
+
const blocker = postgres(TEST_DATABASE_URL, {
|
|
95
|
+
max: 1,
|
|
96
|
+
onnotice: () => { },
|
|
97
|
+
connection: { search_path: TEST_SCHEMA },
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
await blocker `SELECT pg_advisory_lock(hashtextextended('dashboards:contested', 0))`;
|
|
101
|
+
let settled = false;
|
|
102
|
+
const pending = store
|
|
103
|
+
.save({ id: "contested", name: "blocked", layout: LAYOUT })
|
|
104
|
+
.finally(() => {
|
|
105
|
+
settled = true;
|
|
106
|
+
});
|
|
107
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
108
|
+
expect(settled).toBe(false);
|
|
109
|
+
await blocker `SELECT pg_advisory_unlock(hashtextextended('dashboards:contested', 0))`;
|
|
110
|
+
await expect(pending).resolves.toMatchObject({ id: "contested", name: "blocked" });
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
await blocker.end({ timeout: 5 });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
it("rejects a foreign update and never reassigns the owner", async () => {
|
|
117
|
+
const alices = await store.save({ name: "alice's", layout: LAYOUT, userId: "alice" });
|
|
118
|
+
await expect(store.save({ id: alices.id, name: "stolen", layout: LAYOUT, userId: "bob" })).rejects.toBeInstanceOf(DashboardOwnershipError);
|
|
119
|
+
expect(await store.get(alices.id, {})).toEqual(alices);
|
|
120
|
+
});
|
|
121
|
+
// The toolkit 2.6 DashboardStore contract (isDashboardOwnedBy): an
|
|
122
|
+
// owner-less record — saved on a boot without OAuth — belongs to no
|
|
123
|
+
// identified caller. The 2.5 rule handed it to EVERY caller, so after
|
|
124
|
+
// turning OAuth on, any user could read, overwrite or delete it.
|
|
125
|
+
it("keeps an owner-less record away from identified callers", async () => {
|
|
126
|
+
const global = await store.save({ name: "global", layout: LAYOUT });
|
|
127
|
+
expect(await store.get(global.id, { userId: "bob" })).toBeUndefined();
|
|
128
|
+
await expect(store.save({ id: global.id, name: "claimed", layout: LAYOUT, userId: "bob" })).rejects.toBeInstanceOf(DashboardOwnershipError);
|
|
129
|
+
expect(await store.delete(global.id, { userId: "bob" })).toBe(false);
|
|
130
|
+
expect(await store.get(global.id, {})).toEqual(global);
|
|
131
|
+
// Global scope (no caller id) still reads and writes it — without
|
|
132
|
+
// adopting an owner.
|
|
133
|
+
const written = await store.save({ id: global.id, name: "edited", layout: LAYOUT });
|
|
134
|
+
expect(written).toMatchObject({ name: "edited" });
|
|
135
|
+
expect(written.userId).toBeUndefined();
|
|
136
|
+
expect(await store.delete(global.id, {})).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
it("enforces ownership on get and delete", async () => {
|
|
139
|
+
const alices = await store.save({ name: "alice's", layout: LAYOUT, userId: "alice" });
|
|
140
|
+
expect(await store.get(alices.id, { userId: "bob" })).toBeUndefined();
|
|
141
|
+
expect(await store.get(alices.id, { userId: "alice" })).toEqual(alices);
|
|
142
|
+
expect(await store.delete(alices.id, { userId: "bob" })).toBe(false);
|
|
143
|
+
expect(await store.delete(alices.id, { userId: "alice" })).toBe(true);
|
|
144
|
+
expect(await store.get(alices.id, {})).toBeUndefined();
|
|
145
|
+
});
|
|
146
|
+
it("lists only the caller's own records as owner-stamped summaries, newest first", async () => {
|
|
147
|
+
await store.save({ name: "global", layout: LAYOUT });
|
|
148
|
+
await tick();
|
|
149
|
+
await store.save({ name: "alice's", layout: LAYOUT, userId: "alice" });
|
|
150
|
+
await tick();
|
|
151
|
+
await store.save({ name: "bob's", layout: LAYOUT, userId: "bob" });
|
|
152
|
+
const forAlice = await store.list({ userId: "alice" });
|
|
153
|
+
expect(forAlice.map((s) => s.name)).toEqual(["alice's"]);
|
|
154
|
+
// Summary shape: the owner (DashboardSummary.userId, which the toolkit's
|
|
155
|
+
// dashboard tools re-check), no layout/steps/keys payload.
|
|
156
|
+
expect(forAlice[0].userId).toBe("alice");
|
|
157
|
+
expect(Object.keys(forAlice[0]).sort()).toEqual([
|
|
158
|
+
"description",
|
|
159
|
+
"id",
|
|
160
|
+
"name",
|
|
161
|
+
"title",
|
|
162
|
+
"updatedAt",
|
|
163
|
+
"userId",
|
|
164
|
+
]);
|
|
165
|
+
const unfiltered = await store.list({});
|
|
166
|
+
expect(unfiltered.map((s) => [s.name, s.userId])).toEqual([
|
|
167
|
+
["bob's", "bob"],
|
|
168
|
+
["alice's", "alice"],
|
|
169
|
+
["global", undefined],
|
|
170
|
+
]);
|
|
171
|
+
});
|
|
172
|
+
// A row this build cannot read (corrupt, or written by a NEWER build during
|
|
173
|
+
// a rolling upgrade) is a conflict, never "absent": treated as absent, a
|
|
174
|
+
// save with its id would overwrite it and stamp the writer as its owner.
|
|
175
|
+
// Its mirrored user_id column still attributes it.
|
|
176
|
+
describe("an unreadable row", () => {
|
|
177
|
+
const insertRaw = async (id, userId, record) => {
|
|
178
|
+
await sql `
|
|
179
|
+
INSERT INTO dashboards (id, user_id, record, updated_at)
|
|
180
|
+
VALUES (${id}, ${userId}, ${sql.json(record)}, now())
|
|
181
|
+
`;
|
|
182
|
+
};
|
|
183
|
+
const rowOf = async (id) => (await sql `
|
|
184
|
+
SELECT user_id, record FROM dashboards WHERE id = ${id}
|
|
185
|
+
`)[0];
|
|
186
|
+
it("refuses get, save and delete for its owner and stays in place", async () => {
|
|
187
|
+
await insertRaw("corrupt", "alice", { name: "no layout", userId: "alice" });
|
|
188
|
+
const before = await rowOf("corrupt");
|
|
189
|
+
await expect(store.get("corrupt", { userId: "alice" })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
190
|
+
await expect(store.save({ id: "corrupt", name: "fresh", layout: LAYOUT, userId: "alice" })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
191
|
+
await expect(store.delete("corrupt", { userId: "alice" })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
192
|
+
// Global scope addresses every row, so it gets the same conflict.
|
|
193
|
+
await expect(store.get("corrupt", {})).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
194
|
+
await expect(store.save({ id: "corrupt", name: "fresh", layout: LAYOUT })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
195
|
+
expect(await rowOf("corrupt")).toEqual(before);
|
|
196
|
+
});
|
|
197
|
+
it("is invisible to — and never claimable by — another identified caller", async () => {
|
|
198
|
+
await insertRaw("alices-corrupt", "alice", { name: "no layout", userId: "alice" });
|
|
199
|
+
await insertRaw("global-corrupt", null, { name: "no layout" });
|
|
200
|
+
const before = [await rowOf("alices-corrupt"), await rowOf("global-corrupt")];
|
|
201
|
+
for (const id of ["alices-corrupt", "global-corrupt"]) {
|
|
202
|
+
expect(await store.get(id, { userId: "bob" })).toBeUndefined();
|
|
203
|
+
expect(await store.delete(id, { userId: "bob" })).toBe(false);
|
|
204
|
+
await expect(store.save({ id, name: "claimed", layout: LAYOUT, userId: "bob" })).rejects.toBeInstanceOf(DashboardOwnershipError);
|
|
205
|
+
}
|
|
206
|
+
expect(await store.list({ userId: "bob" })).toEqual([]);
|
|
207
|
+
expect([await rowOf("alices-corrupt"), await rowOf("global-corrupt")]).toEqual(before);
|
|
208
|
+
});
|
|
209
|
+
// A row written by a NEWER build (mid rolling upgrade) whose payload
|
|
210
|
+
// carries no owner: only the mirrored user_id column attributes it. Read
|
|
211
|
+
// as absent, a save would turn into an ownership-free CREATE over it —
|
|
212
|
+
// whoever writes, it keeps its payload and its owner.
|
|
213
|
+
it("never lets a save turn it into an ownership-free CREATE", async () => {
|
|
214
|
+
await insertRaw("future", "alice", { schemaVersion: 99, name: "v99" });
|
|
215
|
+
await insertRaw("global-future", null, { schemaVersion: 99 });
|
|
216
|
+
const before = [await rowOf("future"), await rowOf("global-future")];
|
|
217
|
+
await expect(store.save({ id: "future", name: "stolen", layout: LAYOUT, userId: "bob" })).rejects.toBeInstanceOf(DashboardOwnershipError);
|
|
218
|
+
// Not even its owner replaces it: a conflict, never an overwrite.
|
|
219
|
+
await expect(store.save({ id: "future", name: "mine", layout: LAYOUT, userId: "alice" })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
220
|
+
// A global unreadable row never adopts the writer.
|
|
221
|
+
await expect(store.save({ id: "global-future", name: "edited", layout: LAYOUT, userId: "bob" })).rejects.toBeInstanceOf(DashboardOwnershipError);
|
|
222
|
+
await expect(store.save({ id: "global-future", name: "edited", layout: LAYOUT })).rejects.toBeInstanceOf(DashboardUnreadableError);
|
|
223
|
+
expect([await rowOf("future"), await rowOf("global-future")]).toEqual(before);
|
|
224
|
+
});
|
|
225
|
+
it("is reported in listings where it is attributable, with the reason", async () => {
|
|
226
|
+
await insertRaw("corrupt", "alice", { name: "no layout", userId: "alice" });
|
|
227
|
+
await tick();
|
|
228
|
+
await insertRaw("newer", null, { ...validRecord("newer"), schemaVersion: 99 });
|
|
229
|
+
// The mirrored columns stand in for the unreadable payload.
|
|
230
|
+
const [{ updated_at }] = await sql `
|
|
231
|
+
SELECT updated_at FROM dashboards WHERE id = 'corrupt'
|
|
232
|
+
`;
|
|
233
|
+
expect(await store.list({ userId: "alice" })).toEqual([
|
|
234
|
+
{
|
|
235
|
+
id: "corrupt",
|
|
236
|
+
name: "corrupt",
|
|
237
|
+
userId: "alice",
|
|
238
|
+
updatedAt: updated_at.toISOString(),
|
|
239
|
+
unreadable: "does not match the current record schema",
|
|
240
|
+
},
|
|
241
|
+
]);
|
|
242
|
+
const unfiltered = await store.list({});
|
|
243
|
+
expect(unfiltered.map((s) => [s.id, s.unreadable])).toEqual([
|
|
244
|
+
["newer", "written by a newer schemaVersion 99 (this build reads up to 1)"],
|
|
245
|
+
["corrupt", "does not match the current record schema"],
|
|
246
|
+
]);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe.skipIf(!TEST_DATABASE_URL)("postgresReadinessCheck", () => {
|
|
252
|
+
it("resolves against a reachable database", async () => {
|
|
253
|
+
const sql = postgres(TEST_DATABASE_URL, { max: 1, onnotice: () => { } });
|
|
254
|
+
try {
|
|
255
|
+
await expect(postgresReadinessCheck(sql)()).resolves.toBeUndefined();
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
await sql.end({ timeout: 5 });
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
it("rejects when the database is unreachable", async () => {
|
|
262
|
+
// Nothing listens on port 1; the short connect timeout keeps the test fast.
|
|
263
|
+
const sql = postgres("postgres://127.0.0.1:1/nothing", { max: 1, connect_timeout: 1 });
|
|
264
|
+
try {
|
|
265
|
+
await expect(postgresReadinessCheck(sql)()).rejects.toThrow();
|
|
266
|
+
}
|
|
267
|
+
finally {
|
|
268
|
+
await sql.end({ timeout: 1 });
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
//# sourceMappingURL=dashboard-store-postgres.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-store-postgres.test.js","sourceRoot":"","sources":["../src/dashboard-store-postgres.test.ts"],"names":[],"mappings":"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"}
|