@miragon/pulse-widget-shell 0.24.1 → 0.25.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/README.md +134 -127
- package/dist/caller.d.ts +3 -0
- package/dist/caller.d.ts.map +1 -0
- package/dist/caller.js +18 -0
- package/dist/caller.js.map +1 -0
- package/dist/composed-server.d.ts +34 -66
- package/dist/composed-server.d.ts.map +1 -1
- package/dist/composed-server.js +130 -137
- package/dist/composed-server.js.map +1 -1
- package/dist/composition.d.ts +61 -111
- package/dist/composition.d.ts.map +1 -1
- package/dist/composition.js +120 -54
- package/dist/composition.js.map +1 -1
- package/dist/font-assets.d.ts +7 -28
- package/dist/font-assets.d.ts.map +1 -1
- package/dist/font-assets.js +11 -43
- package/dist/font-assets.js.map +1 -1
- package/dist/health.d.ts +9 -45
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +6 -24
- package/dist/health.js.map +1 -1
- package/dist/host-boot.d.ts +8 -38
- package/dist/host-boot.d.ts.map +1 -1
- package/dist/host-boot.js +10 -32
- package/dist/host-boot.js.map +1 -1
- package/dist/http-edge.d.ts +20 -76
- package/dist/http-edge.d.ts.map +1 -1
- package/dist/http-edge.js +17 -60
- package/dist/http-edge.js.map +1 -1
- package/dist/metrics.d.ts +6 -21
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +8 -36
- package/dist/metrics.js.map +1 -1
- package/dist/node-listener.d.ts +7 -39
- package/dist/node-listener.d.ts.map +1 -1
- package/dist/node-listener.js +6 -18
- package/dist/node-listener.js.map +1 -1
- package/dist/oauth-env.d.ts +15 -35
- package/dist/oauth-env.d.ts.map +1 -1
- package/dist/oauth-env.js +122 -62
- package/dist/oauth-env.js.map +1 -1
- package/dist/protocol/bpmn-names.d.ts +19 -0
- package/dist/protocol/bpmn-names.d.ts.map +1 -0
- package/dist/{bpmn-names.js → protocol/bpmn-names.js} +9 -38
- package/dist/protocol/bpmn-names.js.map +1 -0
- package/dist/protocol/served-fonts.d.ts +17 -0
- package/dist/protocol/served-fonts.d.ts.map +1 -0
- package/dist/protocol/served-fonts.js +30 -0
- package/dist/protocol/served-fonts.js.map +1 -0
- package/dist/protocol/tool-result.d.ts +24 -0
- package/dist/protocol/tool-result.d.ts.map +1 -0
- package/dist/protocol/tool-result.js +37 -0
- package/dist/protocol/tool-result.js.map +1 -0
- package/dist/protocol/translator.d.ts +14 -0
- package/dist/protocol/translator.d.ts.map +1 -0
- package/dist/protocol/translator.js +18 -0
- package/dist/protocol/translator.js.map +1 -0
- package/dist/protocol/view-name.d.ts +11 -0
- package/dist/protocol/view-name.d.ts.map +1 -0
- package/dist/protocol/view-name.js +23 -0
- package/dist/protocol/view-name.js.map +1 -0
- package/dist/request-context.d.ts +4 -33
- package/dist/request-context.d.ts.map +1 -1
- package/dist/request-context.js +11 -43
- package/dist/request-context.js.map +1 -1
- package/dist/server.d.ts +19 -39
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +28 -32
- package/dist/server.js.map +1 -1
- package/dist/testing/glossary.d.ts +4 -32
- package/dist/testing/glossary.d.ts.map +1 -1
- package/dist/testing/glossary.js +6 -30
- package/dist/testing/glossary.js.map +1 -1
- package/dist/testing/index.d.ts +1 -38
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -38
- package/dist/testing/index.js.map +1 -1
- package/dist/tool-errors.d.ts +16 -0
- package/dist/tool-errors.d.ts.map +1 -0
- package/dist/tool-errors.js +23 -0
- package/dist/tool-errors.js.map +1 -0
- package/dist/tool-registrar.d.ts +29 -0
- package/dist/tool-registrar.d.ts.map +1 -0
- package/dist/tool-registrar.js +47 -0
- package/dist/tool-registrar.js.map +1 -0
- package/dist/tool-registration.d.ts +35 -0
- package/dist/tool-registration.d.ts.map +1 -0
- package/dist/tool-registration.js +80 -0
- package/dist/tool-registration.js.map +1 -0
- package/dist/tool-schema-trim.d.ts +1 -15
- package/dist/tool-schema-trim.d.ts.map +1 -1
- package/dist/tool-schema-trim.js +1 -16
- package/dist/tool-schema-trim.js.map +1 -1
- package/dist/toolsets.d.ts +10 -56
- package/dist/toolsets.d.ts.map +1 -1
- package/dist/toolsets.js +2 -10
- package/dist/toolsets.js.map +1 -1
- package/dist/ui/action-feedback.d.ts +4 -26
- package/dist/ui/action-feedback.d.ts.map +1 -1
- package/dist/ui/action-feedback.js +5 -19
- package/dist/ui/action-feedback.js.map +1 -1
- package/dist/ui/ask-ai-button.d.ts +6 -43
- package/dist/ui/ask-ai-button.d.ts.map +1 -1
- package/dist/ui/ask-ai-button.js +6 -18
- package/dist/ui/ask-ai-button.js.map +1 -1
- package/dist/ui/ask-ai-prompt.d.ts +6 -82
- package/dist/ui/ask-ai-prompt.d.ts.map +1 -1
- package/dist/ui/ask-ai-prompt.js +10 -77
- package/dist/ui/ask-ai-prompt.js.map +1 -1
- package/dist/ui/bpmn-tokens.d.ts +3 -48
- package/dist/ui/bpmn-tokens.d.ts.map +1 -1
- package/dist/ui/bpmn-tokens.js +3 -46
- package/dist/ui/bpmn-tokens.js.map +1 -1
- package/dist/ui/bpmn-zoom-controls.d.ts +4 -17
- package/dist/ui/bpmn-zoom-controls.d.ts.map +1 -1
- package/dist/ui/bpmn-zoom-controls.js +2 -16
- package/dist/ui/bpmn-zoom-controls.js.map +1 -1
- package/dist/ui/call-observer.d.ts +35 -0
- package/dist/ui/call-observer.d.ts.map +1 -0
- package/dist/ui/call-observer.js +86 -0
- package/dist/ui/call-observer.js.map +1 -0
- package/dist/ui/confirm-dialog.d.ts +4 -31
- package/dist/ui/confirm-dialog.d.ts.map +1 -1
- package/dist/ui/confirm-dialog.js +4 -27
- package/dist/ui/confirm-dialog.js.map +1 -1
- package/dist/ui/count-tone.d.ts +3 -17
- package/dist/ui/count-tone.d.ts.map +1 -1
- package/dist/ui/count-tone.js +2 -16
- package/dist/ui/count-tone.js.map +1 -1
- package/dist/ui/declare-served-fonts.d.ts +4 -10
- package/dist/ui/declare-served-fonts.d.ts.map +1 -1
- package/dist/ui/declare-served-fonts.js +6 -13
- package/dist/ui/declare-served-fonts.js.map +1 -1
- package/dist/ui/describe-error.d.ts +5 -47
- package/dist/ui/describe-error.d.ts.map +1 -1
- package/dist/ui/describe-error.js +8 -45
- package/dist/ui/describe-error.js.map +1 -1
- package/dist/ui/display-mode-toggle.d.ts +3 -16
- package/dist/ui/display-mode-toggle.d.ts.map +1 -1
- package/dist/ui/display-mode-toggle.js +6 -15
- package/dist/ui/display-mode-toggle.js.map +1 -1
- package/dist/ui/error-labels.d.ts +3 -19
- package/dist/ui/error-labels.d.ts.map +1 -1
- package/dist/ui/error-labels.js +0 -1
- package/dist/ui/error-labels.js.map +1 -1
- package/dist/ui/hand-off-button.d.ts +3 -18
- package/dist/ui/hand-off-button.d.ts.map +1 -1
- package/dist/ui/hand-off-button.js +3 -18
- package/dist/ui/hand-off-button.js.map +1 -1
- package/dist/ui/host-context.d.ts +13 -50
- package/dist/ui/host-context.d.ts.map +1 -1
- package/dist/ui/host-context.js +20 -51
- package/dist/ui/host-context.js.map +1 -1
- package/dist/ui/host-contexts.d.ts +19 -0
- package/dist/ui/host-contexts.d.ts.map +1 -0
- package/dist/ui/host-contexts.js +31 -0
- package/dist/ui/host-contexts.js.map +1 -0
- package/dist/ui/host-document.d.ts +3 -18
- package/dist/ui/host-document.d.ts.map +1 -1
- package/dist/ui/host-document.js +7 -25
- package/dist/ui/host-document.js.map +1 -1
- package/dist/ui/host-widgets.d.ts +21 -4
- package/dist/ui/host-widgets.d.ts.map +1 -1
- package/dist/ui/host-widgets.js +19 -11
- package/dist/ui/host-widgets.js.map +1 -1
- package/dist/ui/id-text.d.ts +1 -17
- package/dist/ui/id-text.d.ts.map +1 -1
- package/dist/ui/id-text.js +5 -26
- package/dist/ui/id-text.js.map +1 -1
- package/dist/ui/index.d.ts +24 -43
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +36 -51
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/inline-budget.d.ts +2 -16
- package/dist/ui/inline-budget.d.ts.map +1 -1
- package/dist/ui/inline-budget.js +1 -8
- package/dist/ui/inline-budget.js.map +1 -1
- package/dist/ui/inline-fit-registry.d.ts +4 -31
- package/dist/ui/inline-fit-registry.d.ts.map +1 -1
- package/dist/ui/inline-fit-registry.js +9 -27
- package/dist/ui/inline-fit-registry.js.map +1 -1
- package/dist/ui/inline-fit-solve.d.ts +5 -27
- package/dist/ui/inline-fit-solve.d.ts.map +1 -1
- package/dist/ui/inline-fit-solve.js +4 -23
- package/dist/ui/inline-fit-solve.js.map +1 -1
- package/dist/ui/inline-fit.d.ts +4 -53
- package/dist/ui/inline-fit.d.ts.map +1 -1
- package/dist/ui/inline-fit.js +16 -62
- package/dist/ui/inline-fit.js.map +1 -1
- package/dist/ui/kit-labels.d.ts +12 -51
- package/dist/ui/kit-labels.d.ts.map +1 -1
- package/dist/ui/kit-labels.js +18 -28
- package/dist/ui/kit-labels.js.map +1 -1
- package/dist/ui/list-table.d.ts +15 -69
- package/dist/ui/list-table.d.ts.map +1 -1
- package/dist/ui/list-table.js +11 -69
- package/dist/ui/list-table.js.map +1 -1
- package/dist/ui/locale-gate.d.ts +11 -0
- package/dist/ui/locale-gate.d.ts.map +1 -0
- package/dist/ui/locale-gate.js +53 -0
- package/dist/ui/locale-gate.js.map +1 -0
- package/dist/ui/mcp-use-host.d.ts +20 -0
- package/dist/ui/mcp-use-host.d.ts.map +1 -0
- package/dist/ui/mcp-use-host.js +162 -0
- package/dist/ui/mcp-use-host.js.map +1 -0
- package/dist/ui/open-in-cockpit-link.d.ts +2 -21
- package/dist/ui/open-in-cockpit-link.d.ts.map +1 -1
- package/dist/ui/open-in-cockpit-link.js +5 -20
- package/dist/ui/open-in-cockpit-link.js.map +1 -1
- package/dist/ui/paged-rows.d.ts +3 -14
- package/dist/ui/paged-rows.d.ts.map +1 -1
- package/dist/ui/paged-rows.js +4 -14
- package/dist/ui/paged-rows.js.map +1 -1
- package/dist/ui/query-fallback.d.ts +2 -16
- package/dist/ui/query-fallback.d.ts.map +1 -1
- package/dist/ui/query-fallback.js +2 -14
- package/dist/ui/query-fallback.js.map +1 -1
- package/dist/ui/shell-host.d.ts +13 -23
- package/dist/ui/shell-host.d.ts.map +1 -1
- package/dist/ui/shell-host.js +1 -46
- package/dist/ui/shell-host.js.map +1 -1
- package/dist/ui/test-view-host.d.ts +51 -0
- package/dist/ui/test-view-host.d.ts.map +1 -0
- package/dist/ui/test-view-host.js +72 -0
- package/dist/ui/test-view-host.js.map +1 -0
- package/dist/ui/tool-query.d.ts +41 -0
- package/dist/ui/tool-query.d.ts.map +1 -0
- package/dist/ui/tool-query.js +128 -0
- package/dist/ui/tool-query.js.map +1 -0
- package/dist/ui/use-apply-theme.d.ts +1 -8
- package/dist/ui/use-apply-theme.d.ts.map +1 -1
- package/dist/ui/use-apply-theme.js +1 -8
- package/dist/ui/use-apply-theme.js.map +1 -1
- package/dist/ui/use-bpmn-viewer.d.ts +39 -73
- package/dist/ui/use-bpmn-viewer.d.ts.map +1 -1
- package/dist/ui/use-bpmn-viewer.js +18 -66
- package/dist/ui/use-bpmn-viewer.js.map +1 -1
- package/dist/ui/use-detail-view.d.ts +4 -26
- package/dist/ui/use-detail-view.d.ts.map +1 -1
- package/dist/ui/use-detail-view.js +7 -28
- package/dist/ui/use-detail-view.js.map +1 -1
- package/dist/ui/use-paged-list-view.d.ts +5 -25
- package/dist/ui/use-paged-list-view.d.ts.map +1 -1
- package/dist/ui/use-paged-list-view.js +5 -14
- package/dist/ui/use-paged-list-view.js.map +1 -1
- package/dist/ui/use-paged-view-data.d.ts +11 -66
- package/dist/ui/use-paged-view-data.d.ts.map +1 -1
- package/dist/ui/use-paged-view-data.js +20 -53
- package/dist/ui/use-paged-view-data.js.map +1 -1
- package/dist/ui/view-call.d.ts +66 -0
- package/dist/ui/view-call.d.ts.map +1 -0
- package/dist/ui/view-call.js +63 -0
- package/dist/ui/view-call.js.map +1 -0
- package/dist/ui/view-data-state.d.ts +1 -31
- package/dist/ui/view-data-state.d.ts.map +1 -1
- package/dist/ui/view-data-state.js +3 -32
- package/dist/ui/view-data-state.js.map +1 -1
- package/dist/ui/view-error-boundary.d.ts +24 -0
- package/dist/ui/view-error-boundary.d.ts.map +1 -0
- package/dist/ui/view-error-boundary.js +33 -0
- package/dist/ui/view-error-boundary.js.map +1 -0
- package/dist/ui/view-frame.d.ts +15 -0
- package/dist/ui/view-frame.d.ts.map +1 -0
- package/dist/ui/view-frame.js +72 -0
- package/dist/ui/view-frame.js.map +1 -0
- package/dist/ui/view-host.d.ts +35 -0
- package/dist/ui/view-host.d.ts.map +1 -0
- package/dist/ui/view-host.js +18 -0
- package/dist/ui/view-host.js.map +1 -0
- package/dist/ui/view-meta.d.ts +6 -29
- package/dist/ui/view-meta.d.ts.map +1 -1
- package/dist/ui/view-meta.js +2 -13
- package/dist/ui/view-meta.js.map +1 -1
- package/dist/ui/view-refresh-state.d.ts +4 -18
- package/dist/ui/view-refresh-state.d.ts.map +1 -1
- package/dist/ui/view-refresh-state.js +1 -7
- package/dist/ui/view-refresh-state.js.map +1 -1
- package/dist/ui/view-root.d.ts +26 -0
- package/dist/ui/view-root.d.ts.map +1 -0
- package/dist/ui/view-root.js +48 -0
- package/dist/ui/view-root.js.map +1 -0
- package/dist/ui/views.d.ts +17 -0
- package/dist/ui/views.d.ts.map +1 -0
- package/dist/ui/views.js +11 -0
- package/dist/ui/views.js.map +1 -0
- package/dist/ui/widget-shell.d.ts +1 -13
- package/dist/ui/widget-shell.d.ts.map +1 -1
- package/dist/ui/widget-shell.js +5 -30
- package/dist/ui/widget-shell.js.map +1 -1
- package/dist/view-bundle.d.ts +15 -0
- package/dist/view-bundle.d.ts.map +1 -0
- package/dist/view-bundle.js +23 -0
- package/dist/view-bundle.js.map +1 -0
- package/dist/view-results.d.ts +12 -23
- package/dist/view-results.d.ts.map +1 -1
- package/dist/view-results.js +14 -11
- package/dist/view-results.js.map +1 -1
- package/dist/widget-tool-bindings.d.ts +19 -48
- package/dist/widget-tool-bindings.d.ts.map +1 -1
- package/dist/widget-tool-bindings.js +21 -49
- package/dist/widget-tool-bindings.js.map +1 -1
- package/package.json +24 -36
- package/dist/adapt-data-widget.d.ts +0 -7
- package/dist/adapt-data-widget.d.ts.map +0 -1
- package/dist/adapt-data-widget.js +0 -7
- package/dist/adapt-data-widget.js.map +0 -1
- package/dist/bpmn-names.d.ts +0 -42
- package/dist/bpmn-names.d.ts.map +0 -1
- package/dist/bpmn-names.js.map +0 -1
- package/dist/bpmn-names.test.d.ts +0 -2
- package/dist/bpmn-names.test.d.ts.map +0 -1
- package/dist/bpmn-names.test.js +0 -143
- package/dist/bpmn-names.test.js.map +0 -1
- package/dist/build-data-feed-result.test.d.ts +0 -2
- package/dist/build-data-feed-result.test.d.ts.map +0 -1
- package/dist/build-data-feed-result.test.js +0 -28
- package/dist/build-data-feed-result.test.js.map +0 -1
- package/dist/build-single-widget-view.test.d.ts +0 -2
- package/dist/build-single-widget-view.test.d.ts.map +0 -1
- package/dist/build-single-widget-view.test.js +0 -136
- package/dist/build-single-widget-view.test.js.map +0 -1
- package/dist/builder-texts.d.ts +0 -27
- package/dist/builder-texts.d.ts.map +0 -1
- package/dist/builder-texts.js +0 -32
- package/dist/builder-texts.js.map +0 -1
- package/dist/builder-texts.test.d.ts +0 -2
- package/dist/builder-texts.test.d.ts.map +0 -1
- package/dist/builder-texts.test.js +0 -54
- package/dist/builder-texts.test.js.map +0 -1
- package/dist/catalogue-sync.d.ts +0 -18
- package/dist/catalogue-sync.d.ts.map +0 -1
- package/dist/catalogue-sync.js +0 -31
- package/dist/catalogue-sync.js.map +0 -1
- package/dist/catalogue-sync.test.d.ts +0 -2
- package/dist/catalogue-sync.test.d.ts.map +0 -1
- package/dist/catalogue-sync.test.js +0 -22
- package/dist/catalogue-sync.test.js.map +0 -1
- package/dist/composed-server.edge.test.d.ts +0 -2
- package/dist/composed-server.edge.test.d.ts.map +0 -1
- package/dist/composed-server.edge.test.js +0 -184
- package/dist/composed-server.edge.test.js.map +0 -1
- package/dist/composed-server.fonts.test.d.ts +0 -2
- package/dist/composed-server.fonts.test.d.ts.map +0 -1
- package/dist/composed-server.fonts.test.js +0 -186
- package/dist/composed-server.fonts.test.js.map +0 -1
- package/dist/composed-server.test.d.ts +0 -2
- package/dist/composed-server.test.d.ts.map +0 -1
- package/dist/composed-server.test.js +0 -332
- package/dist/composed-server.test.js.map +0 -1
- package/dist/composition.test.d.ts +0 -2
- package/dist/composition.test.d.ts.map +0 -1
- package/dist/composition.test.js +0 -275
- package/dist/composition.test.js.map +0 -1
- package/dist/dashboard-store-postgres.d.ts +0 -43
- package/dist/dashboard-store-postgres.d.ts.map +0 -1
- package/dist/dashboard-store-postgres.js +0 -225
- package/dist/dashboard-store-postgres.js.map +0 -1
- package/dist/dashboard-store-postgres.test.d.ts +0 -2
- package/dist/dashboard-store-postgres.test.d.ts.map +0 -1
- package/dist/dashboard-store-postgres.test.js +0 -272
- package/dist/dashboard-store-postgres.test.js.map +0 -1
- package/dist/font-assets.test.d.ts +0 -2
- package/dist/font-assets.test.d.ts.map +0 -1
- package/dist/font-assets.test.js +0 -123
- package/dist/font-assets.test.js.map +0 -1
- package/dist/health.test.d.ts +0 -2
- package/dist/health.test.d.ts.map +0 -1
- package/dist/health.test.js +0 -140
- package/dist/health.test.js.map +0 -1
- package/dist/host-boot.test.d.ts +0 -2
- package/dist/host-boot.test.d.ts.map +0 -1
- package/dist/host-boot.test.js +0 -59
- package/dist/host-boot.test.js.map +0 -1
- package/dist/http-edge.test.d.ts +0 -2
- package/dist/http-edge.test.d.ts.map +0 -1
- package/dist/http-edge.test.js +0 -255
- package/dist/http-edge.test.js.map +0 -1
- package/dist/metrics.test.d.ts +0 -2
- package/dist/metrics.test.d.ts.map +0 -1
- package/dist/metrics.test.js +0 -154
- package/dist/metrics.test.js.map +0 -1
- package/dist/node-listener.test.d.ts +0 -2
- package/dist/node-listener.test.d.ts.map +0 -1
- package/dist/node-listener.test.js +0 -331
- package/dist/node-listener.test.js.map +0 -1
- package/dist/oauth-env.test.d.ts +0 -2
- package/dist/oauth-env.test.d.ts.map +0 -1
- package/dist/oauth-env.test.js +0 -76
- package/dist/oauth-env.test.js.map +0 -1
- package/dist/postgres.d.ts +0 -59
- package/dist/postgres.d.ts.map +0 -1
- package/dist/postgres.js +0 -80
- package/dist/postgres.js.map +0 -1
- package/dist/profile-advisory.d.ts +0 -19
- package/dist/profile-advisory.d.ts.map +0 -1
- package/dist/profile-advisory.js +0 -48
- package/dist/profile-advisory.js.map +0 -1
- package/dist/profile-advisory.test.d.ts +0 -2
- package/dist/profile-advisory.test.d.ts.map +0 -1
- package/dist/profile-advisory.test.js +0 -53
- package/dist/profile-advisory.test.js.map +0 -1
- package/dist/profile-constants.d.ts +0 -37
- package/dist/profile-constants.d.ts.map +0 -1
- package/dist/profile-constants.js +0 -37
- package/dist/profile-constants.js.map +0 -1
- package/dist/profile-migrations.d.ts +0 -71
- package/dist/profile-migrations.d.ts.map +0 -1
- package/dist/profile-migrations.js +0 -88
- package/dist/profile-migrations.js.map +0 -1
- package/dist/profile-migrations.test.d.ts +0 -2
- package/dist/profile-migrations.test.d.ts.map +0 -1
- package/dist/profile-migrations.test.js +0 -200
- package/dist/profile-migrations.test.js.map +0 -1
- package/dist/profile-record.d.ts +0 -60
- package/dist/profile-record.d.ts.map +0 -1
- package/dist/profile-record.js +0 -78
- package/dist/profile-record.js.map +0 -1
- package/dist/profile-slice.d.ts +0 -53
- package/dist/profile-slice.d.ts.map +0 -1
- package/dist/profile-slice.js +0 -73
- package/dist/profile-slice.js.map +0 -1
- package/dist/profile-slice.test.d.ts +0 -2
- package/dist/profile-slice.test.d.ts.map +0 -1
- package/dist/profile-slice.test.js +0 -73
- package/dist/profile-slice.test.js.map +0 -1
- package/dist/profile-store-env.d.ts +0 -34
- package/dist/profile-store-env.d.ts.map +0 -1
- package/dist/profile-store-env.js +0 -44
- package/dist/profile-store-env.js.map +0 -1
- package/dist/profile-store-env.test.d.ts +0 -2
- package/dist/profile-store-env.test.d.ts.map +0 -1
- package/dist/profile-store-env.test.js +0 -69
- package/dist/profile-store-env.test.js.map +0 -1
- package/dist/profile-store-postgres.d.ts +0 -33
- package/dist/profile-store-postgres.d.ts.map +0 -1
- package/dist/profile-store-postgres.js +0 -87
- package/dist/profile-store-postgres.js.map +0 -1
- package/dist/profile-store-raw.test.d.ts +0 -2
- package/dist/profile-store-raw.test.d.ts.map +0 -1
- package/dist/profile-store-raw.test.js +0 -185
- package/dist/profile-store-raw.test.js.map +0 -1
- package/dist/profile-store.d.ts +0 -85
- package/dist/profile-store.d.ts.map +0 -1
- package/dist/profile-store.js +0 -182
- package/dist/profile-store.js.map +0 -1
- package/dist/profile-store.test.d.ts +0 -2
- package/dist/profile-store.test.d.ts.map +0 -1
- package/dist/profile-store.test.js +0 -353
- package/dist/profile-store.test.js.map +0 -1
- package/dist/profile.d.ts +0 -75
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -85
- package/dist/profile.js.map +0 -1
- package/dist/profile.test.d.ts +0 -2
- package/dist/profile.test.d.ts.map +0 -1
- package/dist/profile.test.js +0 -71
- package/dist/profile.test.js.map +0 -1
- package/dist/request-context.test.d.ts +0 -2
- package/dist/request-context.test.d.ts.map +0 -1
- package/dist/request-context.test.js +0 -107
- package/dist/request-context.test.js.map +0 -1
- package/dist/served-fonts.d.ts +0 -38
- package/dist/served-fonts.d.ts.map +0 -1
- package/dist/served-fonts.js +0 -51
- package/dist/served-fonts.js.map +0 -1
- package/dist/served-fonts.test.d.ts +0 -2
- package/dist/served-fonts.test.d.ts.map +0 -1
- package/dist/served-fonts.test.js +0 -30
- package/dist/served-fonts.test.js.map +0 -1
- package/dist/server-locale.d.ts +0 -58
- package/dist/server-locale.d.ts.map +0 -1
- package/dist/server-locale.js +0 -64
- package/dist/server-locale.js.map +0 -1
- package/dist/server-locale.test.d.ts +0 -2
- package/dist/server-locale.test.d.ts.map +0 -1
- package/dist/server-locale.test.js +0 -90
- package/dist/server-locale.test.js.map +0 -1
- package/dist/shell-catalogue.d.ts +0 -12
- package/dist/shell-catalogue.d.ts.map +0 -1
- package/dist/shell-catalogue.js +0 -142
- package/dist/shell-catalogue.js.map +0 -1
- package/dist/shell-settings-contract.d.ts +0 -34
- package/dist/shell-settings-contract.d.ts.map +0 -1
- package/dist/shell-settings-contract.js +0 -21
- package/dist/shell-settings-contract.js.map +0 -1
- package/dist/shell-settings.d.ts +0 -24
- package/dist/shell-settings.d.ts.map +0 -1
- package/dist/shell-settings.js +0 -148
- package/dist/shell-settings.js.map +0 -1
- package/dist/shell-settings.test.d.ts +0 -2
- package/dist/shell-settings.test.d.ts.map +0 -1
- package/dist/shell-settings.test.js +0 -115
- package/dist/shell-settings.test.js.map +0 -1
- package/dist/testing/catalog-text.d.ts +0 -53
- package/dist/testing/catalog-text.d.ts.map +0 -1
- package/dist/testing/catalog-text.js +0 -146
- package/dist/testing/catalog-text.js.map +0 -1
- package/dist/testing/catalog-text.test.d.ts +0 -2
- package/dist/testing/catalog-text.test.d.ts.map +0 -1
- package/dist/testing/catalog-text.test.js +0 -137
- package/dist/testing/catalog-text.test.js.map +0 -1
- package/dist/testing/colors.d.ts +0 -34
- package/dist/testing/colors.d.ts.map +0 -1
- package/dist/testing/colors.js +0 -124
- package/dist/testing/colors.js.map +0 -1
- package/dist/testing/colors.test.d.ts +0 -2
- package/dist/testing/colors.test.d.ts.map +0 -1
- package/dist/testing/colors.test.js +0 -166
- package/dist/testing/colors.test.js.map +0 -1
- package/dist/testing/contrast.d.ts +0 -77
- package/dist/testing/contrast.d.ts.map +0 -1
- package/dist/testing/contrast.js +0 -382
- package/dist/testing/contrast.js.map +0 -1
- package/dist/testing/contrast.test.d.ts +0 -2
- package/dist/testing/contrast.test.d.ts.map +0 -1
- package/dist/testing/contrast.test.js +0 -230
- package/dist/testing/contrast.test.js.map +0 -1
- package/dist/testing/display-texts.d.ts +0 -23
- package/dist/testing/display-texts.d.ts.map +0 -1
- package/dist/testing/display-texts.js +0 -88
- package/dist/testing/display-texts.js.map +0 -1
- package/dist/testing/display-texts.test.d.ts +0 -2
- package/dist/testing/display-texts.test.d.ts.map +0 -1
- package/dist/testing/display-texts.test.js +0 -169
- package/dist/testing/display-texts.test.js.map +0 -1
- package/dist/testing/glossary.test.d.ts +0 -2
- package/dist/testing/glossary.test.d.ts.map +0 -1
- package/dist/testing/glossary.test.js +0 -78
- package/dist/testing/glossary.test.js.map +0 -1
- package/dist/testing/glyphs.d.ts +0 -27
- package/dist/testing/glyphs.d.ts.map +0 -1
- package/dist/testing/glyphs.js +0 -130
- package/dist/testing/glyphs.js.map +0 -1
- package/dist/testing/glyphs.test.d.ts +0 -2
- package/dist/testing/glyphs.test.d.ts.map +0 -1
- package/dist/testing/glyphs.test.js +0 -146
- package/dist/testing/glyphs.test.js.map +0 -1
- package/dist/testing/icon-sizes.d.ts +0 -22
- package/dist/testing/icon-sizes.d.ts.map +0 -1
- package/dist/testing/icon-sizes.js +0 -39
- package/dist/testing/icon-sizes.js.map +0 -1
- package/dist/testing/icon-sizes.test.d.ts +0 -2
- package/dist/testing/icon-sizes.test.d.ts.map +0 -1
- package/dist/testing/icon-sizes.test.js +0 -36
- package/dist/testing/icon-sizes.test.js.map +0 -1
- package/dist/testing/source-scan.d.ts +0 -16
- package/dist/testing/source-scan.d.ts.map +0 -1
- package/dist/testing/source-scan.js +0 -57
- package/dist/testing/source-scan.js.map +0 -1
- package/dist/testing/tone-pairs.d.ts +0 -20
- package/dist/testing/tone-pairs.d.ts.map +0 -1
- package/dist/testing/tone-pairs.js +0 -154
- package/dist/testing/tone-pairs.js.map +0 -1
- package/dist/testing/type-scale.d.ts +0 -40
- package/dist/testing/type-scale.d.ts.map +0 -1
- package/dist/testing/type-scale.js +0 -55
- package/dist/testing/type-scale.js.map +0 -1
- package/dist/testing/type-scale.test.d.ts +0 -2
- package/dist/testing/type-scale.test.d.ts.map +0 -1
- package/dist/testing/type-scale.test.js +0 -61
- package/dist/testing/type-scale.test.js.map +0 -1
- package/dist/tool-schema-trim.test.d.ts +0 -2
- package/dist/tool-schema-trim.test.d.ts.map +0 -1
- package/dist/tool-schema-trim.test.js +0 -53
- package/dist/tool-schema-trim.test.js.map +0 -1
- package/dist/toolsets.test.d.ts +0 -2
- package/dist/toolsets.test.d.ts.map +0 -1
- package/dist/toolsets.test.js +0 -86
- package/dist/toolsets.test.js.map +0 -1
- package/dist/ui/action-feedback.test.d.ts +0 -2
- package/dist/ui/action-feedback.test.d.ts.map +0 -1
- package/dist/ui/action-feedback.test.js +0 -77
- package/dist/ui/action-feedback.test.js.map +0 -1
- package/dist/ui/app-shell-providers.d.ts +0 -18
- package/dist/ui/app-shell-providers.d.ts.map +0 -1
- package/dist/ui/app-shell-providers.js +0 -19
- package/dist/ui/app-shell-providers.js.map +0 -1
- package/dist/ui/app-shell-providers.test.d.ts +0 -2
- package/dist/ui/app-shell-providers.test.d.ts.map +0 -1
- package/dist/ui/app-shell-providers.test.js +0 -249
- package/dist/ui/app-shell-providers.test.js.map +0 -1
- package/dist/ui/ask-ai-button.test.d.ts +0 -2
- package/dist/ui/ask-ai-button.test.d.ts.map +0 -1
- package/dist/ui/ask-ai-button.test.js +0 -103
- package/dist/ui/ask-ai-button.test.js.map +0 -1
- package/dist/ui/ask-ai-prompt.test.d.ts +0 -2
- package/dist/ui/ask-ai-prompt.test.d.ts.map +0 -1
- package/dist/ui/ask-ai-prompt.test.js +0 -240
- package/dist/ui/ask-ai-prompt.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap/heat-ramp.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js +0 -174
- package/dist/ui/bpmn-heatmap/heat-ramp.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts +0 -119
- package/dist/ui/bpmn-heatmap/heat-utils.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.js +0 -231
- package/dist/ui/bpmn-heatmap/heat-utils.js.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap/heat-utils.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap/heat-utils.test.js +0 -59
- package/dist/ui/bpmn-heatmap/heat-utils.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap-labels.d.ts +0 -46
- package/dist/ui/bpmn-heatmap-labels.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-labels.js +0 -16
- package/dist/ui/bpmn-heatmap-labels.js.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.d.ts +0 -38
- package/dist/ui/bpmn-heatmap-widget.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.js +0 -65
- package/dist/ui/bpmn-heatmap-widget.js.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.test.d.ts +0 -2
- package/dist/ui/bpmn-heatmap-widget.test.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap-widget.test.js +0 -173
- package/dist/ui/bpmn-heatmap-widget.test.js.map +0 -1
- package/dist/ui/bpmn-heatmap.d.ts +0 -61
- package/dist/ui/bpmn-heatmap.d.ts.map +0 -1
- package/dist/ui/bpmn-heatmap.js +0 -119
- package/dist/ui/bpmn-heatmap.js.map +0 -1
- package/dist/ui/bpmn-tokens.test.d.ts +0 -2
- package/dist/ui/bpmn-tokens.test.d.ts.map +0 -1
- package/dist/ui/bpmn-tokens.test.js +0 -98
- package/dist/ui/bpmn-tokens.test.js.map +0 -1
- package/dist/ui/brand-gates.test.d.ts +0 -2
- package/dist/ui/brand-gates.test.d.ts.map +0 -1
- package/dist/ui/brand-gates.test.js +0 -131
- package/dist/ui/brand-gates.test.js.map +0 -1
- package/dist/ui/brand-mark.d.ts +0 -37
- package/dist/ui/brand-mark.d.ts.map +0 -1
- package/dist/ui/brand-mark.js +0 -33
- package/dist/ui/brand-mark.js.map +0 -1
- package/dist/ui/brand-mark.test.d.ts +0 -2
- package/dist/ui/brand-mark.test.d.ts.map +0 -1
- package/dist/ui/brand-mark.test.js +0 -111
- package/dist/ui/brand-mark.test.js.map +0 -1
- package/dist/ui/confirm-dialog.test.d.ts +0 -2
- package/dist/ui/confirm-dialog.test.d.ts.map +0 -1
- package/dist/ui/confirm-dialog.test.js +0 -115
- package/dist/ui/confirm-dialog.test.js.map +0 -1
- package/dist/ui/count-tone.test.d.ts +0 -2
- package/dist/ui/count-tone.test.d.ts.map +0 -1
- package/dist/ui/count-tone.test.js +0 -27
- package/dist/ui/count-tone.test.js.map +0 -1
- package/dist/ui/create-use-t.d.ts +0 -15
- package/dist/ui/create-use-t.d.ts.map +0 -1
- package/dist/ui/create-use-t.js +0 -17
- package/dist/ui/create-use-t.js.map +0 -1
- package/dist/ui/declare-served-fonts.test.d.ts +0 -2
- package/dist/ui/declare-served-fonts.test.d.ts.map +0 -1
- package/dist/ui/declare-served-fonts.test.js +0 -44
- package/dist/ui/declare-served-fonts.test.js.map +0 -1
- package/dist/ui/describe-error.test.d.ts +0 -2
- package/dist/ui/describe-error.test.d.ts.map +0 -1
- package/dist/ui/describe-error.test.js +0 -274
- package/dist/ui/describe-error.test.js.map +0 -1
- package/dist/ui/format.d.ts +0 -81
- package/dist/ui/format.d.ts.map +0 -1
- package/dist/ui/format.js +0 -189
- package/dist/ui/format.js.map +0 -1
- package/dist/ui/format.test.d.ts +0 -2
- package/dist/ui/format.test.d.ts.map +0 -1
- package/dist/ui/format.test.js +0 -181
- package/dist/ui/format.test.js.map +0 -1
- package/dist/ui/generic-widgets.d.ts +0 -15
- package/dist/ui/generic-widgets.d.ts.map +0 -1
- package/dist/ui/generic-widgets.js +0 -122
- package/dist/ui/generic-widgets.js.map +0 -1
- package/dist/ui/generic-widgets.test.d.ts +0 -2
- package/dist/ui/generic-widgets.test.d.ts.map +0 -1
- package/dist/ui/generic-widgets.test.js +0 -139
- package/dist/ui/generic-widgets.test.js.map +0 -1
- package/dist/ui/hand-off-button.test.d.ts +0 -2
- package/dist/ui/hand-off-button.test.d.ts.map +0 -1
- package/dist/ui/hand-off-button.test.js +0 -78
- package/dist/ui/hand-off-button.test.js.map +0 -1
- package/dist/ui/host-context.test.d.ts +0 -2
- package/dist/ui/host-context.test.d.ts.map +0 -1
- package/dist/ui/host-context.test.js +0 -160
- package/dist/ui/host-context.test.js.map +0 -1
- package/dist/ui/host-document.test.d.ts +0 -2
- package/dist/ui/host-document.test.d.ts.map +0 -1
- package/dist/ui/host-document.test.js +0 -112
- package/dist/ui/host-document.test.js.map +0 -1
- package/dist/ui/humanize-key.d.ts +0 -11
- package/dist/ui/humanize-key.d.ts.map +0 -1
- package/dist/ui/humanize-key.js +0 -26
- package/dist/ui/humanize-key.js.map +0 -1
- package/dist/ui/humanize-key.test.d.ts +0 -2
- package/dist/ui/humanize-key.test.d.ts.map +0 -1
- package/dist/ui/humanize-key.test.js +0 -42
- package/dist/ui/humanize-key.test.js.map +0 -1
- package/dist/ui/icon.d.ts +0 -37
- package/dist/ui/icon.d.ts.map +0 -1
- package/dist/ui/icon.js +0 -32
- package/dist/ui/icon.js.map +0 -1
- package/dist/ui/id-breaks.d.ts +0 -17
- package/dist/ui/id-breaks.d.ts.map +0 -1
- package/dist/ui/id-breaks.js +0 -36
- package/dist/ui/id-breaks.js.map +0 -1
- package/dist/ui/id-breaks.test.d.ts +0 -2
- package/dist/ui/id-breaks.test.d.ts.map +0 -1
- package/dist/ui/id-breaks.test.js +0 -37
- package/dist/ui/id-breaks.test.js.map +0 -1
- package/dist/ui/id-text.test.d.ts +0 -2
- package/dist/ui/id-text.test.d.ts.map +0 -1
- package/dist/ui/id-text.test.js +0 -122
- package/dist/ui/id-text.test.js.map +0 -1
- package/dist/ui/index.test.d.ts +0 -2
- package/dist/ui/index.test.d.ts.map +0 -1
- package/dist/ui/index.test.js +0 -34
- package/dist/ui/index.test.js.map +0 -1
- package/dist/ui/inline-fit-solve.test.d.ts +0 -2
- package/dist/ui/inline-fit-solve.test.d.ts.map +0 -1
- package/dist/ui/inline-fit-solve.test.js +0 -108
- package/dist/ui/inline-fit-solve.test.js.map +0 -1
- package/dist/ui/inline-fit-time.test.d.ts +0 -2
- package/dist/ui/inline-fit-time.test.d.ts.map +0 -1
- package/dist/ui/inline-fit-time.test.js +0 -110
- package/dist/ui/inline-fit-time.test.js.map +0 -1
- package/dist/ui/inline-fit.test-support.d.ts +0 -26
- package/dist/ui/inline-fit.test-support.d.ts.map +0 -1
- package/dist/ui/inline-fit.test-support.js +0 -34
- package/dist/ui/inline-fit.test-support.js.map +0 -1
- package/dist/ui/inline-fit.test.d.ts +0 -2
- package/dist/ui/inline-fit.test.d.ts.map +0 -1
- package/dist/ui/inline-fit.test.js +0 -159
- package/dist/ui/inline-fit.test.js.map +0 -1
- package/dist/ui/kit-labels.test.d.ts +0 -2
- package/dist/ui/kit-labels.test.d.ts.map +0 -1
- package/dist/ui/kit-labels.test.js +0 -98
- package/dist/ui/kit-labels.test.js.map +0 -1
- package/dist/ui/kit-type-roles.test.d.ts +0 -2
- package/dist/ui/kit-type-roles.test.d.ts.map +0 -1
- package/dist/ui/kit-type-roles.test.js +0 -122
- package/dist/ui/kit-type-roles.test.js.map +0 -1
- package/dist/ui/komet-svg.d.ts +0 -15
- package/dist/ui/komet-svg.d.ts.map +0 -1
- package/dist/ui/komet-svg.js +0 -21
- package/dist/ui/komet-svg.js.map +0 -1
- package/dist/ui/list-table.test.d.ts +0 -2
- package/dist/ui/list-table.test.d.ts.map +0 -1
- package/dist/ui/list-table.test.js +0 -169
- package/dist/ui/list-table.test.js.map +0 -1
- package/dist/ui/localized-app-view.d.ts +0 -40
- package/dist/ui/localized-app-view.d.ts.map +0 -1
- package/dist/ui/localized-app-view.js +0 -71
- package/dist/ui/localized-app-view.js.map +0 -1
- package/dist/ui/log-text.d.ts +0 -24
- package/dist/ui/log-text.d.ts.map +0 -1
- package/dist/ui/log-text.js +0 -31
- package/dist/ui/log-text.js.map +0 -1
- package/dist/ui/menu-item.d.ts +0 -12
- package/dist/ui/menu-item.d.ts.map +0 -1
- package/dist/ui/menu-item.js +0 -13
- package/dist/ui/menu-item.js.map +0 -1
- package/dist/ui/named-id.d.ts +0 -23
- package/dist/ui/named-id.d.ts.map +0 -1
- package/dist/ui/named-id.js +0 -21
- package/dist/ui/named-id.js.map +0 -1
- package/dist/ui/named-id.test.d.ts +0 -2
- package/dist/ui/named-id.test.d.ts.map +0 -1
- package/dist/ui/named-id.test.js +0 -57
- package/dist/ui/named-id.test.js.map +0 -1
- package/dist/ui/native-select.d.ts +0 -17
- package/dist/ui/native-select.d.ts.map +0 -1
- package/dist/ui/native-select.js +0 -20
- package/dist/ui/native-select.js.map +0 -1
- package/dist/ui/navigation-focus.d.ts +0 -20
- package/dist/ui/navigation-focus.d.ts.map +0 -1
- package/dist/ui/navigation-focus.js +0 -25
- package/dist/ui/navigation-focus.js.map +0 -1
- package/dist/ui/navigation-focus.test.d.ts +0 -2
- package/dist/ui/navigation-focus.test.d.ts.map +0 -1
- package/dist/ui/navigation-focus.test.js +0 -28
- package/dist/ui/navigation-focus.test.js.map +0 -1
- package/dist/ui/paged-list-footer.test.d.ts +0 -2
- package/dist/ui/paged-list-footer.test.d.ts.map +0 -1
- package/dist/ui/paged-list-footer.test.js +0 -128
- package/dist/ui/paged-list-footer.test.js.map +0 -1
- package/dist/ui/parse-tool-result.test.d.ts +0 -2
- package/dist/ui/parse-tool-result.test.d.ts.map +0 -1
- package/dist/ui/parse-tool-result.test.js +0 -88
- package/dist/ui/parse-tool-result.test.js.map +0 -1
- package/dist/ui/profile-gate.d.ts +0 -37
- package/dist/ui/profile-gate.d.ts.map +0 -1
- package/dist/ui/profile-gate.js +0 -126
- package/dist/ui/profile-gate.js.map +0 -1
- package/dist/ui/profile-gate.test.d.ts +0 -2
- package/dist/ui/profile-gate.test.d.ts.map +0 -1
- package/dist/ui/profile-gate.test.js +0 -246
- package/dist/ui/profile-gate.test.js.map +0 -1
- package/dist/ui/query-fallback.test.d.ts +0 -2
- package/dist/ui/query-fallback.test.d.ts.map +0 -1
- package/dist/ui/query-fallback.test.js +0 -49
- package/dist/ui/query-fallback.test.js.map +0 -1
- package/dist/ui/row-card.d.ts +0 -13
- package/dist/ui/row-card.d.ts.map +0 -1
- package/dist/ui/row-card.js +0 -11
- package/dist/ui/row-card.js.map +0 -1
- package/dist/ui/section.d.ts +0 -18
- package/dist/ui/section.d.ts.map +0 -1
- package/dist/ui/section.js +0 -14
- package/dist/ui/section.js.map +0 -1
- package/dist/ui/segmented-control.d.ts +0 -25
- package/dist/ui/segmented-control.d.ts.map +0 -1
- package/dist/ui/segmented-control.js +0 -22
- package/dist/ui/segmented-control.js.map +0 -1
- package/dist/ui/settings-labels.d.ts +0 -33
- package/dist/ui/settings-labels.d.ts.map +0 -1
- package/dist/ui/settings-labels.js +0 -50
- package/dist/ui/settings-labels.js.map +0 -1
- package/dist/ui/settings-layout.d.ts +0 -29
- package/dist/ui/settings-layout.d.ts.map +0 -1
- package/dist/ui/settings-layout.js +0 -49
- package/dist/ui/settings-layout.js.map +0 -1
- package/dist/ui/settings-layout.test.d.ts +0 -2
- package/dist/ui/settings-layout.test.d.ts.map +0 -1
- package/dist/ui/settings-layout.test.js +0 -73
- package/dist/ui/settings-layout.test.js.map +0 -1
- package/dist/ui/settings.d.ts +0 -47
- package/dist/ui/settings.d.ts.map +0 -1
- package/dist/ui/settings.js +0 -48
- package/dist/ui/settings.js.map +0 -1
- package/dist/ui/settings.test.d.ts +0 -2
- package/dist/ui/settings.test.d.ts.map +0 -1
- package/dist/ui/settings.test.js +0 -38
- package/dist/ui/settings.test.js.map +0 -1
- package/dist/ui/shell-settings.d.ts +0 -31
- package/dist/ui/shell-settings.d.ts.map +0 -1
- package/dist/ui/shell-settings.js +0 -97
- package/dist/ui/shell-settings.js.map +0 -1
- package/dist/ui/shell-settings.test.d.ts +0 -2
- package/dist/ui/shell-settings.test.d.ts.map +0 -1
- package/dist/ui/shell-settings.test.js +0 -108
- package/dist/ui/shell-settings.test.js.map +0 -1
- package/dist/ui/shell-widgets.d.ts +0 -14
- package/dist/ui/shell-widgets.d.ts.map +0 -1
- package/dist/ui/shell-widgets.js +0 -18
- package/dist/ui/shell-widgets.js.map +0 -1
- package/dist/ui/table.d.ts +0 -61
- package/dist/ui/table.d.ts.map +0 -1
- package/dist/ui/table.js +0 -43
- package/dist/ui/table.js.map +0 -1
- package/dist/ui/tone-components.test.d.ts +0 -2
- package/dist/ui/tone-components.test.d.ts.map +0 -1
- package/dist/ui/tone-components.test.js +0 -145
- package/dist/ui/tone-components.test.js.map +0 -1
- package/dist/ui/tone-contrast.test.d.ts +0 -2
- package/dist/ui/tone-contrast.test.d.ts.map +0 -1
- package/dist/ui/tone-contrast.test.js +0 -66
- package/dist/ui/tone-contrast.test.js.map +0 -1
- package/dist/ui/toolkit-overlap.test.d.ts +0 -2
- package/dist/ui/toolkit-overlap.test.d.ts.map +0 -1
- package/dist/ui/toolkit-overlap.test.js +0 -86
- package/dist/ui/toolkit-overlap.test.js.map +0 -1
- package/dist/ui/use-apply-theme.test.d.ts +0 -2
- package/dist/ui/use-apply-theme.test.d.ts.map +0 -1
- package/dist/ui/use-apply-theme.test.js +0 -102
- package/dist/ui/use-apply-theme.test.js.map +0 -1
- package/dist/ui/use-bpmn-viewer.test.d.ts +0 -2
- package/dist/ui/use-bpmn-viewer.test.d.ts.map +0 -1
- package/dist/ui/use-bpmn-viewer.test.js +0 -239
- package/dist/ui/use-bpmn-viewer.test.js.map +0 -1
- package/dist/ui/use-detail-view.test.d.ts +0 -2
- package/dist/ui/use-detail-view.test.d.ts.map +0 -1
- package/dist/ui/use-detail-view.test.js +0 -178
- package/dist/ui/use-detail-view.test.js.map +0 -1
- package/dist/ui/use-paged-list-view.test.d.ts +0 -2
- package/dist/ui/use-paged-list-view.test.d.ts.map +0 -1
- package/dist/ui/use-paged-list-view.test.js +0 -136
- package/dist/ui/use-paged-list-view.test.js.map +0 -1
- package/dist/ui/use-paged-view-data.seeded.test.d.ts +0 -2
- package/dist/ui/use-paged-view-data.seeded.test.d.ts.map +0 -1
- package/dist/ui/use-paged-view-data.seeded.test.js +0 -144
- package/dist/ui/use-paged-view-data.seeded.test.js.map +0 -1
- package/dist/ui/use-paged-view-data.test.d.ts +0 -2
- package/dist/ui/use-paged-view-data.test.d.ts.map +0 -1
- package/dist/ui/use-paged-view-data.test.js +0 -330
- package/dist/ui/use-paged-view-data.test.js.map +0 -1
- package/dist/ui/use-reset-on-change.d.ts +0 -22
- package/dist/ui/use-reset-on-change.d.ts.map +0 -1
- package/dist/ui/use-reset-on-change.js +0 -29
- package/dist/ui/use-reset-on-change.js.map +0 -1
- package/dist/ui/use-reset-on-change.test.d.ts +0 -2
- package/dist/ui/use-reset-on-change.test.d.ts.map +0 -1
- package/dist/ui/use-reset-on-change.test.js +0 -61
- package/dist/ui/use-reset-on-change.test.js.map +0 -1
- package/dist/ui/use-view-data.seeded.test.d.ts +0 -2
- package/dist/ui/use-view-data.seeded.test.d.ts.map +0 -1
- package/dist/ui/use-view-data.seeded.test.js +0 -168
- package/dist/ui/use-view-data.seeded.test.js.map +0 -1
- package/dist/ui/view-data-state.test.d.ts +0 -2
- package/dist/ui/view-data-state.test.d.ts.map +0 -1
- package/dist/ui/view-data-state.test.js +0 -62
- package/dist/ui/view-data-state.test.js.map +0 -1
- package/dist/ui/view-meta.test.d.ts +0 -2
- package/dist/ui/view-meta.test.d.ts.map +0 -1
- package/dist/ui/view-meta.test.js +0 -92
- package/dist/ui/view-meta.test.js.map +0 -1
- package/dist/ui/widget-shell.test.d.ts +0 -2
- package/dist/ui/widget-shell.test.d.ts.map +0 -1
- package/dist/ui/widget-shell.test.js +0 -41
- package/dist/ui/widget-shell.test.js.map +0 -1
- package/dist/widget-meta-defaults.d.ts +0 -48
- package/dist/widget-meta-defaults.d.ts.map +0 -1
- package/dist/widget-meta-defaults.js +0 -80
- package/dist/widget-meta-defaults.js.map +0 -1
- package/dist/widget-meta-defaults.test.d.ts +0 -2
- package/dist/widget-meta-defaults.test.d.ts.map +0 -1
- package/dist/widget-meta-defaults.test.js +0 -196
- package/dist/widget-meta-defaults.test.js.map +0 -1
- package/dist/widget-tool-bindings.test.d.ts +0 -2
- package/dist/widget-tool-bindings.test.d.ts.map +0 -1
- package/dist/widget-tool-bindings.test.js +0 -83
- package/dist/widget-tool-bindings.test.js.map +0 -1
- package/dist/with-tool-errors.test.d.ts +0 -2
- package/dist/with-tool-errors.test.d.ts.map +0 -1
- package/dist/with-tool-errors.test.js +0 -38
- package/dist/with-tool-errors.test.js.map +0 -1
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { type ProfileStore } from "./profile-store.js";
|
|
2
|
-
/**
|
|
3
|
-
* The non-database profile store selection every composition root shares:
|
|
4
|
-
* filesystem-backed when `MCP_PROFILE_DIR` is set (survives restarts),
|
|
5
|
-
* in-memory otherwise. Roots with a database extend the precedence themselves
|
|
6
|
-
* (`DATABASE_URL` → `createPostgresProfileStore` beats this — see the stock
|
|
7
|
-
* app's `initRuntime`); the factories stay pure and injectable.
|
|
8
|
-
*/
|
|
9
|
-
export declare function profileStoreFromEnv(env?: NodeJS.ProcessEnv): ProfileStore;
|
|
10
|
-
/** Where a composition root keeps a store. */
|
|
11
|
-
export type PersistenceBackend = "postgres" | "filesystem" | "memory";
|
|
12
|
-
/** The backend each store selected at boot. */
|
|
13
|
-
export interface PersistenceSelection {
|
|
14
|
-
profiles: PersistenceBackend;
|
|
15
|
-
/** Omitted when the server registers no dashboard builder (`frameworkWritesAllowed`). */
|
|
16
|
-
dashboards?: PersistenceBackend;
|
|
17
|
-
}
|
|
18
|
-
/** The non-database selection {@link profileStoreFromEnv} and the dashboard knob make. */
|
|
19
|
-
export declare function persistenceFromEnv(env?: NodeJS.ProcessEnv): Required<PersistenceSelection>;
|
|
20
|
-
/**
|
|
21
|
-
* Announce the selected persistence on EVERY boot path — nobody should have
|
|
22
|
-
* to infer from silence that settings are volatile — and warn loudly when a
|
|
23
|
-
* production process (`NODE_ENV=production`, set by the Docker images) keeps a
|
|
24
|
-
* store in memory: every restart, redeploy or scale-to-zero stop then
|
|
25
|
-
* silently drops saved settings or dashboards. A warning, not a boot failure:
|
|
26
|
-
* failing would break every deployment that accepts volatile settings today.
|
|
27
|
-
* `remedy` names the knobs THIS composition root offers.
|
|
28
|
-
*/
|
|
29
|
-
export declare function announcePersistence(selection: PersistenceSelection, options?: {
|
|
30
|
-
env?: NodeJS.ProcessEnv;
|
|
31
|
-
label?: string;
|
|
32
|
-
remedy?: string;
|
|
33
|
-
}): void;
|
|
34
|
-
//# sourceMappingURL=profile-store-env.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-env.d.ts","sourceRoot":"","sources":["../src/profile-store-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CAItF;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAA;AAErE,+CAA+C;AAC/C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,yFAAyF;IACzF,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,QAAQ,CAAC,oBAAoB,CAAC,CAKhC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,oBAAoB,EAC/B,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,IAAI,CAiBN"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { createFileSystemProfileStore, createInMemoryProfileStore, } from "./profile-store.js";
|
|
2
|
-
/**
|
|
3
|
-
* The non-database profile store selection every composition root shares:
|
|
4
|
-
* filesystem-backed when `MCP_PROFILE_DIR` is set (survives restarts),
|
|
5
|
-
* in-memory otherwise. Roots with a database extend the precedence themselves
|
|
6
|
-
* (`DATABASE_URL` → `createPostgresProfileStore` beats this — see the stock
|
|
7
|
-
* app's `initRuntime`); the factories stay pure and injectable.
|
|
8
|
-
*/
|
|
9
|
-
export function profileStoreFromEnv(env = process.env) {
|
|
10
|
-
return env.MCP_PROFILE_DIR
|
|
11
|
-
? createFileSystemProfileStore({ dir: env.MCP_PROFILE_DIR })
|
|
12
|
-
: createInMemoryProfileStore();
|
|
13
|
-
}
|
|
14
|
-
/** The non-database selection {@link profileStoreFromEnv} and the dashboard knob make. */
|
|
15
|
-
export function persistenceFromEnv(env = process.env) {
|
|
16
|
-
return {
|
|
17
|
-
profiles: env.MCP_PROFILE_DIR ? "filesystem" : "memory",
|
|
18
|
-
dashboards: env.MCP_DASHBOARD_DIR ? "filesystem" : "memory",
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Announce the selected persistence on EVERY boot path — nobody should have
|
|
23
|
-
* to infer from silence that settings are volatile — and warn loudly when a
|
|
24
|
-
* production process (`NODE_ENV=production`, set by the Docker images) keeps a
|
|
25
|
-
* store in memory: every restart, redeploy or scale-to-zero stop then
|
|
26
|
-
* silently drops saved settings or dashboards. A warning, not a boot failure:
|
|
27
|
-
* failing would break every deployment that accepts volatile settings today.
|
|
28
|
-
* `remedy` names the knobs THIS composition root offers.
|
|
29
|
-
*/
|
|
30
|
-
export function announcePersistence(selection, options = {}) {
|
|
31
|
-
const { env = process.env, label = "persistence", remedy = "Set MCP_PROFILE_DIR / MCP_DASHBOARD_DIR to directories on a persistent volume.", } = options;
|
|
32
|
-
const dashboards = selection.dashboards ? `, dashboards=${selection.dashboards}` : "";
|
|
33
|
-
console.log(`[${label}] persistence: profiles=${selection.profiles}${dashboards}`);
|
|
34
|
-
if (env.NODE_ENV !== "production")
|
|
35
|
-
return;
|
|
36
|
-
const volatile = [
|
|
37
|
-
...(selection.profiles === "memory" ? ["user profiles"] : []),
|
|
38
|
-
...(selection.dashboards === "memory" ? ["saved dashboards"] : []),
|
|
39
|
-
];
|
|
40
|
-
if (volatile.length === 0)
|
|
41
|
-
return;
|
|
42
|
-
console.warn(`[${label}] WARNING: ${volatile.join(" and ")} are kept IN MEMORY in a production process — every restart, redeploy or scale-to-zero stop silently drops them. ${remedy}`);
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=profile-store-env.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-env.js","sourceRoot":"","sources":["../src/profile-store-env.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAE3B,MAAM,oBAAoB,CAAA;AAE3B;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,OAAO,GAAG,CAAC,eAAe;QACxB,CAAC,CAAC,4BAA4B,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;QAC5D,CAAC,CAAC,0BAA0B,EAAE,CAAA;AAClC,CAAC;AAYD,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;QACvD,UAAU,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ;KAC5D,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAA+B,EAC/B,UAAwE,EAAE;IAE1E,MAAM,EACJ,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,KAAK,GAAG,aAAa,EACrB,MAAM,GAAG,gFAAgF,GAC1F,GAAG,OAAO,CAAA;IACX,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACrF,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,2BAA2B,SAAS,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAA;IAClF,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAM;IACzC,MAAM,QAAQ,GAAG;QACf,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAA;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IACjC,OAAO,CAAC,IAAI,CACV,IAAI,KAAK,cAAc,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oHAAoH,MAAM,EAAE,CAC1K,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-env.test.d.ts","sourceRoot":"","sources":["../src/profile-store-env.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { mkdtemp } from "node:fs/promises";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { describe, expect, it, vi } from "vitest";
|
|
5
|
-
import { announcePersistence, persistenceFromEnv, profileStoreFromEnv, } from "./profile-store-env.js";
|
|
6
|
-
describe("persistenceFromEnv", () => {
|
|
7
|
-
it("reports the non-database selection per store", () => {
|
|
8
|
-
expect(persistenceFromEnv({})).toEqual({ profiles: "memory", dashboards: "memory" });
|
|
9
|
-
expect(persistenceFromEnv({ MCP_PROFILE_DIR: "/p", MCP_DASHBOARD_DIR: "/d" })).toEqual({
|
|
10
|
-
profiles: "filesystem",
|
|
11
|
-
dashboards: "filesystem",
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
describe("announcePersistence", () => {
|
|
16
|
-
const capture = () => ({
|
|
17
|
-
log: vi.spyOn(console, "log").mockImplementation(() => { }),
|
|
18
|
-
warn: vi.spyOn(console, "warn").mockImplementation(() => { }),
|
|
19
|
-
});
|
|
20
|
-
it("logs the selected backends on every path", () => {
|
|
21
|
-
const { log, warn } = capture();
|
|
22
|
-
announcePersistence({ profiles: "postgres", dashboards: "postgres" }, { env: { NODE_ENV: "production" }, label: "root" });
|
|
23
|
-
expect(log).toHaveBeenCalledWith("[root] persistence: profiles=postgres, dashboards=postgres");
|
|
24
|
-
expect(warn).not.toHaveBeenCalled();
|
|
25
|
-
vi.restoreAllMocks();
|
|
26
|
-
});
|
|
27
|
-
it("warns LOUDLY when a production process keeps a store in memory — naming each", () => {
|
|
28
|
-
const { warn } = capture();
|
|
29
|
-
announcePersistence({ profiles: "memory", dashboards: "memory" }, { env: { NODE_ENV: "production" }, label: "root", remedy: "Set DATABASE_URL." });
|
|
30
|
-
expect(warn).toHaveBeenCalledOnce();
|
|
31
|
-
expect(warn.mock.calls[0][0]).toBe("[root] WARNING: user profiles and saved dashboards are kept IN MEMORY in a production process — every restart, redeploy or scale-to-zero stop silently drops them. Set DATABASE_URL.");
|
|
32
|
-
announcePersistence({ profiles: "filesystem", dashboards: "memory" }, { env: { NODE_ENV: "production" } });
|
|
33
|
-
expect(warn.mock.calls[1][0]).toMatch(/^\[persistence\] WARNING: saved dashboards are kept/);
|
|
34
|
-
expect(warn.mock.calls[1][0]).toContain("MCP_PROFILE_DIR / MCP_DASHBOARD_DIR");
|
|
35
|
-
vi.restoreAllMocks();
|
|
36
|
-
});
|
|
37
|
-
it("leaves dashboards out entirely when the server keeps none", () => {
|
|
38
|
-
const { log, warn } = capture();
|
|
39
|
-
announcePersistence({ profiles: "memory" }, { env: { NODE_ENV: "production" } });
|
|
40
|
-
expect(log).toHaveBeenCalledWith("[persistence] persistence: profiles=memory");
|
|
41
|
-
expect(warn.mock.calls[0][0]).toMatch(/WARNING: user profiles are kept IN MEMORY/);
|
|
42
|
-
announcePersistence({ profiles: "filesystem" }, { env: { NODE_ENV: "production" } });
|
|
43
|
-
expect(warn).toHaveBeenCalledOnce();
|
|
44
|
-
vi.restoreAllMocks();
|
|
45
|
-
});
|
|
46
|
-
it("stays quiet outside production (dev, tests)", () => {
|
|
47
|
-
const { warn } = capture();
|
|
48
|
-
announcePersistence({ profiles: "memory", dashboards: "memory" }, { env: {} });
|
|
49
|
-
announcePersistence({ profiles: "memory", dashboards: "memory" }, { env: { NODE_ENV: "development" } });
|
|
50
|
-
expect(warn).not.toHaveBeenCalled();
|
|
51
|
-
vi.restoreAllMocks();
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
describe("profileStoreFromEnv", () => {
|
|
55
|
-
it("selects the filesystem store when MCP_PROFILE_DIR is set (records persist)", async () => {
|
|
56
|
-
const dir = await mkdtemp(path.join(tmpdir(), "profile-env-"));
|
|
57
|
-
const store = profileStoreFromEnv({ MCP_PROFILE_DIR: dir });
|
|
58
|
-
await store.save("user-1", { language: "de" });
|
|
59
|
-
// A SECOND store over the same dir sees the record — proof it hit disk.
|
|
60
|
-
expect((await profileStoreFromEnv({ MCP_PROFILE_DIR: dir }).get("user-1"))?.language).toBe("de");
|
|
61
|
-
});
|
|
62
|
-
it("falls back to the in-memory store without the env knob", async () => {
|
|
63
|
-
const store = profileStoreFromEnv({});
|
|
64
|
-
await store.save("user-1", { language: "de" });
|
|
65
|
-
// A second instance shares nothing — proof it stayed in-process.
|
|
66
|
-
expect(await profileStoreFromEnv({}).get("user-1")).toBeUndefined();
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
//# sourceMappingURL=profile-store-env.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-env.test.js","sourceRoot":"","sources":["../src/profile-store-env.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type postgres from "postgres";
|
|
2
|
-
import { type ProfileStore } from "./profile-store.js";
|
|
3
|
-
/**
|
|
4
|
-
* DDL owned by this store, executed by the composition root's migration runner
|
|
5
|
-
* (which tracks applied names in its `schema_migrations` table). The full
|
|
6
|
-
* profile record lives in one JSONB column — it is tiny (<1 KB) and its shape
|
|
7
|
-
* is governed by `profileRecordSchema`/`schemaVersion`, not by table columns.
|
|
8
|
-
* `user_id` mirrors the record's owner (the OAuth caller; NULL for the
|
|
9
|
-
* declared `anonymous` record).
|
|
10
|
-
*/
|
|
11
|
-
export declare const PROFILE_STORE_MIGRATIONS: ReadonlyArray<{
|
|
12
|
-
name: string;
|
|
13
|
-
statements: readonly string[];
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Profiles stored one row per key in the `user_profiles` table. Selected when
|
|
17
|
-
* `DATABASE_URL` is set (see the composition root's persistence wiring); the
|
|
18
|
-
* caller owns the `sql` client's lifecycle, so this package carries no runtime
|
|
19
|
-
* dependency on the driver.
|
|
20
|
-
*
|
|
21
|
-
* Reads share the filesystem store's per-field fail-soft gate
|
|
22
|
-
* (`parseStoredProfile`): a value this build cannot validate degrades only its
|
|
23
|
-
* own field, and a newer build's row reads best-effort. Saves run the shared
|
|
24
|
-
* `mergeStoredProfile` over the RAW JSONB inside a per-key locked
|
|
25
|
-
* transaction, so concurrent partial updates of the same key serialize
|
|
26
|
-
* instead of losing fields, and nothing a newer replica wrote is dropped —
|
|
27
|
-
* safe for multiple server instances (and mixed versions) sharing one
|
|
28
|
-
* database.
|
|
29
|
-
*/
|
|
30
|
-
export declare function createPostgresProfileStore(options: {
|
|
31
|
-
sql: postgres.Sql;
|
|
32
|
-
}): ProfileStore;
|
|
33
|
-
//# sourceMappingURL=profile-store-postgres.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-postgres.d.ts","sourceRoot":"","sources":["../src/profile-store-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE1E;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAAa,CAAC;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B,CAYA,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAA;CAAE,GAAG,YAAY,CAsDvF"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { parseStoredProfile } from "./profile-migrations.js";
|
|
2
|
-
import { mergeStoredProfile } from "./profile-store.js";
|
|
3
|
-
/**
|
|
4
|
-
* DDL owned by this store, executed by the composition root's migration runner
|
|
5
|
-
* (which tracks applied names in its `schema_migrations` table). The full
|
|
6
|
-
* profile record lives in one JSONB column — it is tiny (<1 KB) and its shape
|
|
7
|
-
* is governed by `profileRecordSchema`/`schemaVersion`, not by table columns.
|
|
8
|
-
* `user_id` mirrors the record's owner (the OAuth caller; NULL for the
|
|
9
|
-
* declared `anonymous` record).
|
|
10
|
-
*/
|
|
11
|
-
export const PROFILE_STORE_MIGRATIONS = [
|
|
12
|
-
{
|
|
13
|
-
name: "001_user_profiles",
|
|
14
|
-
statements: [
|
|
15
|
-
`CREATE TABLE IF NOT EXISTS user_profiles (
|
|
16
|
-
key TEXT PRIMARY KEY,
|
|
17
|
-
user_id TEXT,
|
|
18
|
-
profile JSONB NOT NULL,
|
|
19
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
20
|
-
)`,
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
];
|
|
24
|
-
/**
|
|
25
|
-
* Profiles stored one row per key in the `user_profiles` table. Selected when
|
|
26
|
-
* `DATABASE_URL` is set (see the composition root's persistence wiring); the
|
|
27
|
-
* caller owns the `sql` client's lifecycle, so this package carries no runtime
|
|
28
|
-
* dependency on the driver.
|
|
29
|
-
*
|
|
30
|
-
* Reads share the filesystem store's per-field fail-soft gate
|
|
31
|
-
* (`parseStoredProfile`): a value this build cannot validate degrades only its
|
|
32
|
-
* own field, and a newer build's row reads best-effort. Saves run the shared
|
|
33
|
-
* `mergeStoredProfile` over the RAW JSONB inside a per-key locked
|
|
34
|
-
* transaction, so concurrent partial updates of the same key serialize
|
|
35
|
-
* instead of losing fields, and nothing a newer replica wrote is dropped —
|
|
36
|
-
* safe for multiple server instances (and mixed versions) sharing one
|
|
37
|
-
* database.
|
|
38
|
-
*/
|
|
39
|
-
export function createPostgresProfileStore(options) {
|
|
40
|
-
const { sql } = options;
|
|
41
|
-
return {
|
|
42
|
-
async get(key) {
|
|
43
|
-
const rows = await sql `
|
|
44
|
-
SELECT profile FROM user_profiles WHERE key = ${key}
|
|
45
|
-
`;
|
|
46
|
-
return parseStoredProfile(rows[0]?.profile, key);
|
|
47
|
-
},
|
|
48
|
-
async save(key, input, opts) {
|
|
49
|
-
return await sql.begin(async (tx) => {
|
|
50
|
-
// Advisory lock, not just SELECT…FOR UPDATE: a row that doesn't exist
|
|
51
|
-
// yet cannot be row-locked, so two concurrent FIRST saves of the same
|
|
52
|
-
// key would otherwise both merge over defaults and the second upsert
|
|
53
|
-
// would silently drop the first one's fields. The per-key transaction
|
|
54
|
-
// lock serializes creates and updates alike (same primitive as the
|
|
55
|
-
// app's migration runner).
|
|
56
|
-
await tx `SELECT pg_advisory_xact_lock(hashtextextended('user_profiles:' || ${key}, 0))`;
|
|
57
|
-
const rows = await tx `
|
|
58
|
-
SELECT profile FROM user_profiles WHERE key = ${key} FOR UPDATE
|
|
59
|
-
`;
|
|
60
|
-
const { document, record } = mergeStoredProfile(key, rows[0]?.profile, input, new Date().toISOString(), opts);
|
|
61
|
-
// sql.json, not JSON.stringify: postgres.js serializes parameters by
|
|
62
|
-
// the server-described type, and the jsonb serializer stringifies
|
|
63
|
-
// itself — a pre-stringified value gets double-encoded into a jsonb
|
|
64
|
-
// string scalar.
|
|
65
|
-
await tx `
|
|
66
|
-
INSERT INTO user_profiles (key, user_id, profile, updated_at)
|
|
67
|
-
VALUES (
|
|
68
|
-
${key},
|
|
69
|
-
${record.userId ?? null},
|
|
70
|
-
${tx.json(document)},
|
|
71
|
-
${record.updatedAt}
|
|
72
|
-
)
|
|
73
|
-
ON CONFLICT (key) DO UPDATE SET
|
|
74
|
-
user_id = EXCLUDED.user_id,
|
|
75
|
-
profile = EXCLUDED.profile,
|
|
76
|
-
updated_at = EXCLUDED.updated_at
|
|
77
|
-
`;
|
|
78
|
-
return record;
|
|
79
|
-
});
|
|
80
|
-
},
|
|
81
|
-
async delete(key) {
|
|
82
|
-
const result = await sql `DELETE FROM user_profiles WHERE key = ${key}`;
|
|
83
|
-
return result.count > 0;
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=profile-store-postgres.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-postgres.js","sourceRoot":"","sources":["../src/profile-store-postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAA;AAE1E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAGhC;IACH;QACE,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE;YACV;;;;;QAKE;SACH;KACF;CACF,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA8B;IACvE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IAEvB,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAwB;wDACI,GAAG;OACpD,CAAA;YACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;QAClD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI;YACzB,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBAClC,sEAAsE;gBACtE,sEAAsE;gBACtE,qEAAqE;gBACrE,sEAAsE;gBACtE,mEAAmE;gBACnE,2BAA2B;gBAC3B,MAAM,EAAE,CAAA,qEAAqE,GAAG,OAAO,CAAA;gBACvF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAwB;0DACK,GAAG;SACpD,CAAA;gBACD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAC7C,GAAG,EACH,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAChB,KAAK,EACL,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACxB,IAAI,CACL,CAAA;gBACD,qEAAqE;gBACrE,kEAAkE;gBAClE,oEAAoE;gBACpE,iBAAiB;gBACjB,MAAM,EAAE,CAAA;;;cAGF,GAAG;cACH,MAAM,CAAC,MAAM,IAAI,IAAI;cACrB,EAAE,CAAC,IAAI,CAAC,QAA8B,CAAC;cACvC,MAAM,CAAC,SAAS;;;;;;SAMrB,CAAA;gBACD,OAAO,MAAM,CAAA;YACf,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,MAAM,MAAM,GAAG,MAAM,GAAG,CAAA,yCAAyC,GAAG,EAAE,CAAA;YACtE,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;QACzB,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-raw.test.d.ts","sourceRoot":"","sources":["../src/profile-store-raw.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { mkdtemp, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import postgres from "postgres";
|
|
5
|
-
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
6
|
-
import { createFileSystemProfileStore, mergeStoredProfile, } from "./profile-store.js";
|
|
7
|
-
import { createPostgresProfileStore, PROFILE_STORE_MIGRATIONS } from "./profile-store-postgres.js";
|
|
8
|
-
import { saveModuleSlice } from "./profile-slice.js";
|
|
9
|
-
/**
|
|
10
|
-
* Saves merge over the RAW stored document, never over its parsed view — the
|
|
11
|
-
* guard against one unknown value (or one newer build's record) wiping every
|
|
12
|
-
* module's settings on the next save. The store-agnostic behavior contract
|
|
13
|
-
* lives in `profile-store.test.ts`.
|
|
14
|
-
*/
|
|
15
|
-
describe("mergeStoredProfile", () => {
|
|
16
|
-
const NOW = "2026-10-09T12:00:00.000Z";
|
|
17
|
-
it("returns the document to persist (raw keys kept) and its typed view", () => {
|
|
18
|
-
const { document, record } = mergeStoredProfile("k", {
|
|
19
|
-
id: "k",
|
|
20
|
-
language: "fr",
|
|
21
|
-
theme: "dark",
|
|
22
|
-
extra: 1,
|
|
23
|
-
schemaVersion: 3,
|
|
24
|
-
createdAt: "c",
|
|
25
|
-
updatedAt: "u",
|
|
26
|
-
}, { modules: { notes: { sortOrder: "asc" } } }, NOW);
|
|
27
|
-
// The retired theme preference is just another raw key: kept, never read.
|
|
28
|
-
expect(document).toEqual({
|
|
29
|
-
id: "k",
|
|
30
|
-
language: "fr",
|
|
31
|
-
theme: "dark",
|
|
32
|
-
extra: 1,
|
|
33
|
-
modules: { notes: { sortOrder: "asc" } },
|
|
34
|
-
userId: undefined,
|
|
35
|
-
createdAt: "c",
|
|
36
|
-
updatedAt: NOW,
|
|
37
|
-
schemaVersion: 3,
|
|
38
|
-
});
|
|
39
|
-
expect(record).toEqual({
|
|
40
|
-
id: "k",
|
|
41
|
-
language: "system",
|
|
42
|
-
modules: { notes: { sortOrder: "asc" } },
|
|
43
|
-
createdAt: "c",
|
|
44
|
-
updatedAt: NOW,
|
|
45
|
-
schemaVersion: 3,
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
it("stamps createdAt on a document that carries none, and adopts a pre-baseline one", () => {
|
|
49
|
-
const { document, record } = mergeStoredProfile("k", { analyticsDefaultPeriod: "30d", schemaVersion: 1 }, {}, NOW);
|
|
50
|
-
// Adopted at the baseline: the unknown flat key stays raw, out of the view.
|
|
51
|
-
expect(document).toMatchObject({
|
|
52
|
-
createdAt: NOW,
|
|
53
|
-
schemaVersion: 3,
|
|
54
|
-
modules: {},
|
|
55
|
-
analyticsDefaultPeriod: "30d",
|
|
56
|
-
});
|
|
57
|
-
expect(record.modules).toEqual({});
|
|
58
|
-
});
|
|
59
|
-
it("starts a never-saved key from the defaults", () => {
|
|
60
|
-
const { record } = mergeStoredProfile("k", undefined, { language: "de" }, NOW, {
|
|
61
|
-
userId: "u-1",
|
|
62
|
-
});
|
|
63
|
-
expect(record).toMatchObject({ id: "k", language: "de", modules: {}, userId: "u-1" });
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
function rawDocumentContract(makeHarness) {
|
|
67
|
-
const STORED = {
|
|
68
|
-
id: "user-1",
|
|
69
|
-
userId: "user-1",
|
|
70
|
-
language: "fr", // a locale this build does not ship
|
|
71
|
-
theme: "dark", // the retired theme preference an earlier build saved
|
|
72
|
-
futureTopLevel: { nested: true },
|
|
73
|
-
modules: {
|
|
74
|
-
camunda7: { defaultEngineId: "prod-a", futureSliceField: 7 },
|
|
75
|
-
analytics: { defaultPeriod: "30d" },
|
|
76
|
-
notes: { sortOrder: "asc" },
|
|
77
|
-
},
|
|
78
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
79
|
-
updatedAt: "2026-01-02T00:00:00.000Z",
|
|
80
|
-
schemaVersion: 3,
|
|
81
|
-
};
|
|
82
|
-
it("reads a document with one unknown value field by field — only that field degrades", async () => {
|
|
83
|
-
const { store, seedRaw } = await makeHarness();
|
|
84
|
-
await seedRaw("user-1", STORED);
|
|
85
|
-
expect(await store.get("user-1")).toEqual({
|
|
86
|
-
id: "user-1",
|
|
87
|
-
userId: "user-1",
|
|
88
|
-
language: "system",
|
|
89
|
-
modules: STORED.modules,
|
|
90
|
-
createdAt: STORED.createdAt,
|
|
91
|
-
updatedAt: STORED.updatedAt,
|
|
92
|
-
schemaVersion: 3,
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
it("round-trips unknown top-level keys and values through a save from ANY module", async () => {
|
|
96
|
-
const { store, seedRaw, readRaw } = await makeHarness();
|
|
97
|
-
await seedRaw("user-1", STORED);
|
|
98
|
-
// The analytics settings save path, end to end.
|
|
99
|
-
const slice = await saveModuleSlice(store, "user-1", "analytics", { minBucketSize: 25 }, { userId: "user-1" });
|
|
100
|
-
const modules = { ...STORED.modules, analytics: { defaultPeriod: "30d", minBucketSize: 25 } };
|
|
101
|
-
expect(slice).toEqual(modules.analytics);
|
|
102
|
-
const saved = await store.get("user-1");
|
|
103
|
-
expect(saved?.modules).toEqual(modules);
|
|
104
|
-
expect(saved?.createdAt).toBe(STORED.createdAt);
|
|
105
|
-
expect(await readRaw("user-1")).toEqual({ ...STORED, modules, updatedAt: saved?.updatedAt });
|
|
106
|
-
});
|
|
107
|
-
it("never mangles a document from a NEWER build (rolling-deploy skew)", async () => {
|
|
108
|
-
const { store, seedRaw, readRaw } = await makeHarness();
|
|
109
|
-
const newer = {
|
|
110
|
-
...STORED,
|
|
111
|
-
language: "de",
|
|
112
|
-
schemaVersion: 99,
|
|
113
|
-
newCoreField: ["written", "by", "v99"],
|
|
114
|
-
};
|
|
115
|
-
await seedRaw("user-1", newer);
|
|
116
|
-
// Read best-effort: every field this build still understands survives.
|
|
117
|
-
expect(await store.get("user-1")).toMatchObject({
|
|
118
|
-
language: "de",
|
|
119
|
-
modules: STORED.modules,
|
|
120
|
-
});
|
|
121
|
-
const saved = await store.save("user-1", { language: "en" });
|
|
122
|
-
expect(saved).toMatchObject({ language: "en", modules: STORED.modules });
|
|
123
|
-
// Never stamped down to this build's version: the newer build reads its
|
|
124
|
-
// own document back without re-running migrations over it.
|
|
125
|
-
expect(await readRaw("user-1")).toEqual({
|
|
126
|
-
...newer,
|
|
127
|
-
language: "en",
|
|
128
|
-
updatedAt: saved.updatedAt,
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
describe("createFileSystemProfileStore (raw documents)", () => {
|
|
133
|
-
rawDocumentContract(async () => {
|
|
134
|
-
const dir = await mkdtemp(path.join(tmpdir(), "profile-store-raw-"));
|
|
135
|
-
const file = (key) => path.join(dir, `${encodeURIComponent(key)}.json`);
|
|
136
|
-
return {
|
|
137
|
-
store: createFileSystemProfileStore({ dir }),
|
|
138
|
-
seedRaw: (key, doc) => writeFile(file(key), JSON.stringify(doc), "utf-8"),
|
|
139
|
-
readRaw: async (key) => JSON.parse(await readFile(file(key), "utf-8")),
|
|
140
|
-
};
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
// Opt-in integration slice: only with TEST_DATABASE_URL (`pnpm test:pg`). An
|
|
144
|
-
// own schema isolates it from the other suites sharing that database.
|
|
145
|
-
const TEST_DATABASE_URL = process.env.TEST_DATABASE_URL;
|
|
146
|
-
const TEST_SCHEMA = "widget_shell_profile_store_raw_test";
|
|
147
|
-
describe.skipIf(!TEST_DATABASE_URL)("createPostgresProfileStore (raw documents)", () => {
|
|
148
|
-
let sql;
|
|
149
|
-
beforeAll(async () => {
|
|
150
|
-
sql = postgres(TEST_DATABASE_URL, {
|
|
151
|
-
max: 2,
|
|
152
|
-
onnotice: () => { },
|
|
153
|
-
connection: { search_path: TEST_SCHEMA },
|
|
154
|
-
});
|
|
155
|
-
await sql.unsafe(`DROP SCHEMA IF EXISTS ${TEST_SCHEMA} CASCADE`);
|
|
156
|
-
await sql.unsafe(`CREATE SCHEMA ${TEST_SCHEMA}`);
|
|
157
|
-
for (const migration of PROFILE_STORE_MIGRATIONS) {
|
|
158
|
-
for (const statement of migration.statements) {
|
|
159
|
-
await sql.unsafe(statement);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
beforeEach(async () => {
|
|
164
|
-
await sql `DELETE FROM user_profiles`;
|
|
165
|
-
});
|
|
166
|
-
afterAll(async () => {
|
|
167
|
-
await sql.end({ timeout: 5 });
|
|
168
|
-
});
|
|
169
|
-
rawDocumentContract(() => Promise.resolve({
|
|
170
|
-
store: createPostgresProfileStore({ sql }),
|
|
171
|
-
seedRaw: async (key, doc) => {
|
|
172
|
-
await sql `
|
|
173
|
-
INSERT INTO user_profiles (key, profile)
|
|
174
|
-
VALUES (${key}, ${sql.json(doc)})
|
|
175
|
-
`;
|
|
176
|
-
},
|
|
177
|
-
readRaw: async (key) => {
|
|
178
|
-
const rows = await sql `
|
|
179
|
-
SELECT profile FROM user_profiles WHERE key = ${key}
|
|
180
|
-
`;
|
|
181
|
-
return rows[0]?.profile;
|
|
182
|
-
},
|
|
183
|
-
}));
|
|
184
|
-
});
|
|
185
|
-
//# sourceMappingURL=profile-store-raw.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store-raw.test.js","sourceRoot":"","sources":["../src/profile-store-raw.test.ts"],"names":[],"mappings":"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"}
|
package/dist/profile-store.d.ts
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { type ProfileRecord, type ProfileRecordSaveInput } from "./profile-record.js";
|
|
2
|
-
/**
|
|
3
|
-
* Persistence for user profiles, keyed by the profile key (the OAuth caller's
|
|
4
|
-
* id, or `anonymous` for an explicitly declared local caller — see
|
|
5
|
-
* `resolveProfileKey` in `profile.ts`). Deliberately mirrors the
|
|
6
|
-
* toolkit's `DashboardStore` shape: an in-memory default plus a
|
|
7
|
-
* one-file-per-record filesystem store selected by an env var (and a postgres
|
|
8
|
-
* implementation in `profile-store-postgres.ts` selected by `DATABASE_URL` in
|
|
9
|
-
* the composition root). There is no cross-key ownership model — each key owns
|
|
10
|
-
* exactly its own record; the auth layer keeps unrelated callers on different
|
|
11
|
-
* keys.
|
|
12
|
-
*
|
|
13
|
-
* The full store interface is for COMPOSITION ROOTS (apps wiring
|
|
14
|
-
* `SharedResources`); modules consume the narrow {@link ProfileSource} port
|
|
15
|
-
* instead — which this interface satisfies structurally.
|
|
16
|
-
*/
|
|
17
|
-
export interface ProfileStore {
|
|
18
|
-
/**
|
|
19
|
-
* The typed view of the stored record (`parseStoredProfile`): per-field
|
|
20
|
-
* fail-soft, so an unknown value degrades only its own field and a newer
|
|
21
|
-
* build's record reads best-effort; `undefined` when nothing is stored.
|
|
22
|
-
*/
|
|
23
|
-
get(key: string): Promise<ProfileRecord | undefined>;
|
|
24
|
-
/**
|
|
25
|
-
* Merge `input` over the RAW stored record (or defaults) — atomically per
|
|
26
|
-
* key, so concurrent saves of disjoint fields or module slices all survive
|
|
27
|
-
* ({@link mergeStoredProfile}); stamps `updatedAt`. `opts.userId` (the
|
|
28
|
-
* authenticated caller, when known) is stamped as the record's owner.
|
|
29
|
-
*/
|
|
30
|
-
save(key: string, input: ProfileRecordSaveInput, opts?: ProfileSaveOptions): Promise<ProfileRecord>;
|
|
31
|
-
delete(key: string): Promise<boolean>;
|
|
32
|
-
}
|
|
33
|
-
export interface ProfileSaveOptions {
|
|
34
|
-
/** The authenticated caller, stamped as the record's owner (absent for `anonymous`). */
|
|
35
|
-
userId?: string;
|
|
36
|
-
}
|
|
37
|
-
/** The outcome of {@link mergeStoredProfile}: what to persist, and what to return. */
|
|
38
|
-
export interface MergedProfile {
|
|
39
|
-
/**
|
|
40
|
-
* The complete document to persist: the RAW stored JSON — keys this build
|
|
41
|
-
* does not know and values it cannot validate included — with the save
|
|
42
|
-
* applied on top.
|
|
43
|
-
*/
|
|
44
|
-
document: Record<string, unknown>;
|
|
45
|
-
/** The typed view of `document` — what a store's `save` returns. */
|
|
46
|
-
record: ProfileRecord;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Merge a partial save over the RAW stored document (or a fresh default),
|
|
50
|
-
* preserving `id`/`userId`/`createdAt` and re-stamping `updatedAt`. Omitted
|
|
51
|
-
* input fields keep their previous value so single-field updates don't wipe
|
|
52
|
-
* the rest — and because the base is the stored JSON, not its parsed view,
|
|
53
|
-
* nothing this build cannot read is dropped either: a locale a newer build
|
|
54
|
-
* added, a top-level key it introduced, a whole newer-version document during
|
|
55
|
-
* a rolling deploy (whose `schemaVersion` is never stamped down). Shared by
|
|
56
|
-
* every store implementation (in-memory, filesystem, and the postgres sibling
|
|
57
|
-
* in `profile-store-postgres.ts`), each calling it INSIDE its per-key
|
|
58
|
-
* serialization, so the merge semantics stay single-sourced. Record-agnostic
|
|
59
|
-
* on purpose — module-specific normalization (e.g. camunda7's "empty string
|
|
60
|
-
* clears the field") happens at the owning module's save-tool boundary.
|
|
61
|
-
*/
|
|
62
|
-
export declare function mergeStoredProfile(key: string, stored: unknown, input: ProfileRecordSaveInput, now: string, opts?: ProfileSaveOptions): MergedProfile;
|
|
63
|
-
/**
|
|
64
|
-
* Process-local store. The default when `MCP_PROFILE_DIR` is unset — fine for
|
|
65
|
-
* dev and single-instance deployments; everything is lost on restart, and
|
|
66
|
-
* behind a load balancer each replica sees its own records. Each save runs
|
|
67
|
-
* synchronously inside one microtask, so saves of the same key never
|
|
68
|
-
* interleave.
|
|
69
|
-
*/
|
|
70
|
-
export declare function createInMemoryProfileStore(): ProfileStore;
|
|
71
|
-
/**
|
|
72
|
-
* Profiles stored as one JSON file per key under `dir` (`<encodeURIComponent
|
|
73
|
-
* (key)>.json`). Selected when `MCP_PROFILE_DIR` is set so preferences survive
|
|
74
|
-
* restarts. Every operation on a key runs under a per-key lock, so concurrent
|
|
75
|
-
* saves of the same key (two settings sections, two modules' save tools in one
|
|
76
|
-
* model turn) merge one after the other instead of last-write-wins; writes are
|
|
77
|
-
* atomic (temp file + rename in the same directory), so a crash mid-write
|
|
78
|
-
* can't truncate a record. The lock is process-local: the store is
|
|
79
|
-
* SINGLE-WRITER — point one server process at a directory (the postgres store
|
|
80
|
-
* is the multi-instance answer).
|
|
81
|
-
*/
|
|
82
|
-
export declare function createFileSystemProfileStore(options: {
|
|
83
|
-
dir: string;
|
|
84
|
-
}): ProfileStore;
|
|
85
|
-
//# sourceMappingURL=profile-store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profile-store.d.ts","sourceRoot":"","sources":["../src/profile-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC5B,MAAM,qBAAqB,CAAA;AAE5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;IACpD;;;;;OAKG;IACH,IAAI,CACF,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,sBAAsB,EAC7B,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,aAAa,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgCD,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,oEAAoE;IACpE,MAAM,EAAE,aAAa,CAAA;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,sBAAsB,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,kBAAkB,GACxB,aAAa,CAwBf;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAkBzD;AA8BD;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAkDnF"}
|