@syntrologie/runtime-sdk 0.2.21 → 1.0.0-canary.1
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/CAPABILITIES.md +721 -460
- package/README.md +310 -68
- package/dist/RuntimeProvider.d.ts +51 -0
- package/dist/RuntimeProvider.js +113 -0
- package/dist/RuntimeProvider.js.map +1 -0
- package/dist/SmartCanvasApp.d.ts +16 -10
- package/dist/SmartCanvasApp.js +45 -49
- package/dist/SmartCanvasApp.js.map +1 -1
- package/dist/SmartCanvasElement.d.ts +5 -5
- package/dist/SmartCanvasElement.js +24 -14
- package/dist/SmartCanvasElement.js.map +1 -1
- package/dist/SmartCanvasPortal.d.ts +2 -2
- package/dist/SmartCanvasPortal.js +2 -2
- package/dist/actions/ActionEngine.d.ts +11 -0
- package/dist/actions/ActionEngine.js +274 -0
- package/dist/actions/ActionEngine.js.map +1 -0
- package/dist/actions/executors/index.d.ts +117 -0
- package/dist/actions/executors/index.js +242 -0
- package/dist/actions/executors/index.js.map +1 -0
- package/dist/actions/executors/tour.d.ts +18 -0
- package/dist/actions/executors/tour.js +332 -0
- package/dist/actions/executors/tour.js.map +1 -0
- package/dist/actions/index.d.ts +10 -0
- package/dist/actions/index.js +12 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/types.d.ts +399 -0
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/validation.d.ts +14 -0
- package/dist/actions/validation.js +602 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/antiFlicker.js +1 -1
- package/dist/api.d.ts +40 -26
- package/dist/api.js +86 -56
- package/dist/api.js.map +1 -1
- package/dist/apps/AppContext.d.ts +31 -0
- package/dist/apps/AppContext.js +93 -0
- package/dist/apps/AppContext.js.map +1 -0
- package/dist/apps/AppLoader.d.ts +84 -0
- package/dist/apps/AppLoader.js +256 -0
- package/dist/apps/AppLoader.js.map +1 -0
- package/dist/apps/AppRegistry.d.ts +102 -0
- package/dist/apps/AppRegistry.js +317 -0
- package/dist/apps/AppRegistry.js.map +1 -0
- package/dist/apps/adaptive-chatbot/index.js +7 -0
- package/dist/apps/adaptive-chatbot/index.js.map +7 -0
- package/dist/apps/examples/gamification-app.example.d.ts +305 -0
- package/dist/apps/examples/gamification-app.example.js +329 -0
- package/dist/apps/examples/gamification-app.example.js.map +1 -0
- package/dist/apps/faq/index.js +11 -0
- package/dist/apps/faq/index.js.map +7 -0
- package/dist/apps/gamification/index.js +2 -0
- package/dist/apps/gamification/index.js.map +7 -0
- package/dist/apps/index.d.ts +15 -0
- package/dist/apps/index.js +17 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/nav/index.js +11 -0
- package/dist/apps/nav/index.js.map +7 -0
- package/dist/apps/types.d.ts +231 -0
- package/dist/apps/types.js +8 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
- package/dist/blocks/data/ComparisonBlock.js +40 -40
- package/dist/blocks/data/ComparisonBlock.js.map +1 -1
- package/dist/blocks/data/StatsBlock.d.ts +1 -1
- package/dist/blocks/data/StatsBlock.js +41 -41
- package/dist/blocks/data/StatsBlock.js.map +1 -1
- package/dist/blocks/data/index.d.ts +2 -2
- package/dist/blocks/data/index.js +2 -2
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +29 -29
- package/dist/blocks/index.js.map +1 -1
- package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
- package/dist/blocks/interactive/ChecklistBlock.js +60 -60
- package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
- package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
- package/dist/blocks/interactive/RatingBlock.js +75 -65
- package/dist/blocks/interactive/RatingBlock.js.map +1 -1
- package/dist/blocks/interactive/index.d.ts +2 -2
- package/dist/blocks/interactive/index.js +2 -2
- package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
- package/dist/blocks/notification/NotificationBlock.js +67 -63
- package/dist/blocks/notification/NotificationBlock.js.map +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/blocks/notification/index.js +1 -1
- package/dist/bootstrap.d.ts +32 -8
- package/dist/bootstrap.js +204 -85
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
- package/dist/components/ShadowCanvasOverlay.js +144 -107
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/TileCard.d.ts +5 -5
- package/dist/components/TileCard.js +204 -154
- package/dist/components/TileCard.js.map +1 -1
- package/dist/components/TileWheel.d.ts +3 -3
- package/dist/components/TileWheel.js +7 -7
- package/dist/components/TileWheel.js.map +1 -1
- package/dist/config-validator.d.ts +49 -0
- package/dist/config-validator.js +173 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/configFetcher.d.ts +2 -2
- package/dist/configFetcher.js +20 -8
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +3 -3
- package/dist/context/ContextManager.js +15 -15
- package/dist/context/ContextManager.js.map +1 -1
- package/dist/context/index.d.ts +4 -4
- package/dist/context/index.js +3 -3
- package/dist/context/schema.d.ts +17 -17
- package/dist/context/schema.js +1 -1
- package/dist/decisions/engine.d.ts +5 -5
- package/dist/decisions/engine.js +13 -13
- package/dist/decisions/index.d.ts +6 -6
- package/dist/decisions/index.js +5 -5
- package/dist/decisions/schema.d.ts +97 -97
- package/dist/decisions/schema.js +20 -20
- package/dist/decisions/strategies/rules.d.ts +1 -1
- package/dist/decisions/strategies/rules.js +24 -24
- package/dist/decisions/strategies/rules.js.map +1 -1
- package/dist/decisions/strategies/score.d.ts +1 -1
- package/dist/decisions/strategies/score.js +3 -3
- package/dist/decisions/types.d.ts +19 -19
- package/dist/earlyPatcher.d.ts +8 -20
- package/dist/earlyPatcher.js +13 -62
- package/dist/earlyPatcher.js.map +1 -1
- package/dist/editorLoader.d.ts +2 -0
- package/dist/editorLoader.js +104 -58
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +3 -3
- package/dist/events/EventBus.js +5 -7
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +6 -6
- package/dist/events/index.js +5 -5
- package/dist/events/normalizers/canvas.d.ts +2 -2
- package/dist/events/normalizers/canvas.js +3 -3
- package/dist/events/normalizers/canvas.js.map +1 -1
- package/dist/events/normalizers/posthog.d.ts +25 -1
- package/dist/events/normalizers/posthog.js +35 -27
- package/dist/events/normalizers/posthog.js.map +1 -1
- package/dist/events/schema.d.ts +13 -13
- package/dist/events/schema.js +2 -2
- package/dist/events/types.d.ts +7 -1
- package/dist/events/types.js +29 -21
- package/dist/events/types.js.map +1 -1
- package/dist/experiments/adapters/growthbook.d.ts +4 -4
- package/dist/experiments/adapters/growthbook.js +5 -5
- package/dist/experiments/adapters/growthbook.js.map +1 -1
- package/dist/experiments/index.d.ts +3 -3
- package/dist/experiments/index.js +1 -1
- package/dist/experiments/registry.d.ts +2 -2
- package/dist/experiments/registry.js +2 -2
- package/dist/experiments/types.d.ts +5 -1
- package/dist/fetchers/cdnFetcher.d.ts +1 -1
- package/dist/fetchers/cdnFetcher.js +4 -8
- package/dist/fetchers/cdnFetcher.js.map +1 -1
- package/dist/fetchers/experimentsFetcher.d.ts +2 -2
- package/dist/fetchers/experimentsFetcher.js +7 -7
- package/dist/fetchers/experimentsFetcher.js.map +1 -1
- package/dist/fetchers/index.d.ts +3 -3
- package/dist/fetchers/index.js +2 -2
- package/dist/fetchers/index.js.map +1 -1
- package/dist/fetchers/registry.d.ts +1 -1
- package/dist/fetchers/registry.js +4 -4
- package/dist/fetchers/types.d.ts +1 -1
- package/dist/hooks/useCanvasOverlays.d.ts +8 -5
- package/dist/hooks/useCanvasOverlays.js +66 -17
- package/dist/hooks/useCanvasOverlays.js.map +1 -1
- package/dist/hooks/useHostPatches.d.ts +2 -2
- package/dist/hooks/useHostPatches.js +8 -8
- package/dist/hooks/useHostPatches.js.map +1 -1
- package/dist/hooks/useShadowCanvasConfig.d.ts +5 -9
- package/dist/hooks/useShadowCanvasConfig.js +7 -5
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/hostPatcher/core/patcher.d.ts +1 -1
- package/dist/hostPatcher/core/patcher.js +18 -9
- package/dist/hostPatcher/core/patcher.js.map +1 -1
- package/dist/hostPatcher/core/sanitizer.js +24 -3
- package/dist/hostPatcher/core/sanitizer.js.map +1 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
- package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
- package/dist/hostPatcher/utils/anchors.js +4 -6
- package/dist/hostPatcher/utils/anchors.js.map +1 -1
- package/dist/index.d.ts +34 -27
- package/dist/index.js +36 -24
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +81 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/sessionMetrics.d.ts +1 -1
- package/dist/metrics/sessionMetrics.js +6 -6
- package/dist/overlays/fetcher.d.ts +2 -2
- package/dist/overlays/fetcher.js +4 -4
- package/dist/overlays/recipeRegistry.js +2 -2
- package/dist/overlays/recipeRegistry.js.map +1 -1
- package/dist/overlays/runtime/anchor/resolve.js +1 -1
- package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
- package/dist/overlays/runtime/index.d.ts +7 -7
- package/dist/overlays/runtime/index.js +7 -7
- package/dist/overlays/runtime/overlay/highlight.js +39 -39
- package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
- package/dist/overlays/runtime/overlay/modal.js +5 -5
- package/dist/overlays/runtime/overlay/modal.js.map +1 -1
- package/dist/overlays/runtime/overlay/root.js +1 -1
- package/dist/overlays/runtime/overlay/runner.js +70 -23
- package/dist/overlays/runtime/overlay/runner.js.map +1 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/overlays/runtime/overlay/tooltip.js +10 -10
- package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
- package/dist/overlays/runtime/utils/dom.js +4 -1
- package/dist/overlays/runtime/utils/dom.js.map +1 -1
- package/dist/overlays/schema.d.ts +146 -146
- package/dist/overlays/schema.js +12 -8
- package/dist/overlays/schema.js.map +1 -1
- package/dist/react.d.ts +7 -7
- package/dist/react.js +4 -4
- package/dist/react.js.map +1 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/RenderContext.js +5 -5
- package/dist/render/RenderContext.js.map +1 -1
- package/dist/render/index.d.ts +3 -3
- package/dist/render/index.js +1 -1
- package/dist/render/types.d.ts +4 -4
- package/dist/runtime.d.ts +32 -8
- package/dist/runtime.js +87 -13
- package/dist/runtime.js.map +1 -1
- package/dist/smart-canvas.esm.js +155 -78
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +38776 -33216
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +156 -78
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +1 -1
- package/dist/state/StateStore.js +9 -9
- package/dist/state/StateStore.js.map +1 -1
- package/dist/state/helpers/cooldowns.d.ts +1 -1
- package/dist/state/helpers/cooldowns.js +1 -1
- package/dist/state/helpers/dismissals.d.ts +1 -1
- package/dist/state/helpers/dismissals.js +1 -1
- package/dist/state/helpers/frequency.d.ts +1 -1
- package/dist/state/helpers/frequency.js +1 -1
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +3 -3
- package/dist/state/schema.d.ts +1 -1
- package/dist/state/schema.js +1 -1
- package/dist/store/example.d.ts +1 -0
- package/dist/store/example.js +43 -0
- package/dist/store/example.js.map +1 -0
- package/dist/store/mini-effector.d.ts +46 -0
- package/dist/store/mini-effector.js +88 -0
- package/dist/store/mini-effector.js.map +1 -0
- package/dist/surfaces/Surfaces.d.ts +11 -0
- package/dist/surfaces/Surfaces.js +361 -0
- package/dist/surfaces/Surfaces.js.map +1 -0
- package/dist/surfaces/index.d.ts +9 -0
- package/dist/surfaces/index.js +12 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/positioning.d.ts +50 -0
- package/dist/surfaces/positioning.js +228 -0
- package/dist/surfaces/positioning.js.map +1 -0
- package/dist/surfaces/types.d.ts +167 -0
- package/dist/surfaces/types.js +23 -0
- package/dist/surfaces/types.js.map +1 -0
- package/dist/telemetry/adapters/noop.d.ts +12 -0
- package/dist/telemetry/adapters/noop.js +42 -0
- package/dist/telemetry/adapters/noop.js.map +1 -0
- package/dist/telemetry/adapters/posthog.d.ts +8 -2
- package/dist/telemetry/adapters/posthog.js +36 -14
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/telemetry/index.d.ts +4 -3
- package/dist/telemetry/index.js +3 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/registry.d.ts +2 -2
- package/dist/telemetry/registry.js +4 -2
- package/dist/telemetry/registry.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -2
- package/dist/theme/ThemeProvider.js +21 -21
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/defaultTheme.d.ts +2 -2
- package/dist/theme/defaultTheme.js +111 -111
- package/dist/theme/defaultTheme.js.map +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/extractHostTheme.js +42 -44
- package/dist/theme/extractHostTheme.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +3 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.d.ts +2 -2
- package/dist/token.d.ts +2 -0
- package/dist/token.js +3 -6
- package/dist/token.js.map +1 -1
- package/dist/types-only.d.ts +32 -0
- package/dist/types-only.js +11 -0
- package/dist/types-only.js.map +1 -0
- package/dist/types.d.ts +89 -56
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +13 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- package/dist/widgets/WidgetRegistry.d.ts +139 -0
- package/dist/widgets/WidgetRegistry.js +182 -0
- package/dist/widgets/WidgetRegistry.js.map +1 -0
- package/dist/widgets/index.d.ts +7 -0
- package/dist/widgets/index.js +7 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +26 -10
- package/schema/canvas-config.schema.json +488 -254
- package/schema/runtime-context.schema.json +1 -5
package/dist/SmartCanvasApp.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo, useState } from
|
|
3
|
-
import { ShadowCanvasOverlay } from
|
|
4
|
-
import { useShadowCanvasConfig } from
|
|
5
|
-
import { createCanvasConfigFetcher } from
|
|
6
|
-
import {
|
|
7
|
-
import { useHostPatches } from "./hooks/useHostPatches";
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { ShadowCanvasOverlay } from './components/ShadowCanvasOverlay';
|
|
4
|
+
import { useShadowCanvasConfig } from './hooks/useShadowCanvasConfig';
|
|
5
|
+
import { createCanvasConfigFetcher } from './configFetcher';
|
|
6
|
+
import { RuntimeProvider, usePageContext } from './RuntimeProvider';
|
|
8
7
|
/**
|
|
9
8
|
* Check if current route is allowed based on routes config
|
|
10
9
|
*/
|
|
@@ -14,11 +13,11 @@ function isRouteAllowed(routes, pathname) {
|
|
|
14
13
|
return true;
|
|
15
14
|
// If include is specified, route must match one of the patterns
|
|
16
15
|
if ((_a = routes.include) === null || _a === void 0 ? void 0 : _a.length) {
|
|
17
|
-
return routes.include.some(pattern => matchRoute(pattern, pathname));
|
|
16
|
+
return routes.include.some((pattern) => matchRoute(pattern, pathname));
|
|
18
17
|
}
|
|
19
18
|
// If exclude is specified, route must NOT match any patterns
|
|
20
19
|
if ((_b = routes.exclude) === null || _b === void 0 ? void 0 : _b.length) {
|
|
21
|
-
return !routes.exclude.some(pattern => matchRoute(pattern, pathname));
|
|
20
|
+
return !routes.exclude.some((pattern) => matchRoute(pattern, pathname));
|
|
22
21
|
}
|
|
23
22
|
return true;
|
|
24
23
|
}
|
|
@@ -27,23 +26,42 @@ function isRouteAllowed(routes, pathname) {
|
|
|
27
26
|
* Examples: "/login" matches "/login", "/admin/*" matches "/admin/users"
|
|
28
27
|
*/
|
|
29
28
|
function matchRoute(pattern, pathname) {
|
|
30
|
-
if (pattern.endsWith(
|
|
29
|
+
if (pattern.endsWith('/*')) {
|
|
31
30
|
const prefix = pattern.slice(0, -2);
|
|
32
|
-
return pathname === prefix || pathname.startsWith(prefix +
|
|
31
|
+
return pathname === prefix || pathname.startsWith(prefix + '/');
|
|
33
32
|
}
|
|
34
33
|
return pathname === pattern;
|
|
35
34
|
}
|
|
36
|
-
export function SmartCanvasApp({ controller, fetcher, configUri, configUriFeatureKey =
|
|
35
|
+
export function SmartCanvasApp({ controller, fetcher, configUri, configUriFeatureKey = 'smart-canvas-config-uri', configFeatureKey = 'smart-canvas-config', fetchCredentials = 'include', pollIntervalMs, experiments, telemetry, runtime, overlayFetcher, overlayConfigUri, overlayConfigFeatureKey = 'smart-canvas-overlay-uri', overlayFetchCredentials = 'include', footerSlot, launcherLabel, canvasHost, customRenderers, theme, }) {
|
|
36
|
+
// Wrap the app with RuntimeProvider if runtime is available
|
|
37
|
+
if (runtime) {
|
|
38
|
+
return (_jsx(RuntimeProvider, { runtime: runtime, children: _jsx(SmartCanvasAppInner, { controller: controller, fetcher: fetcher, configUri: configUri, configUriFeatureKey: configUriFeatureKey, configFeatureKey: configFeatureKey, fetchCredentials: fetchCredentials, pollIntervalMs: pollIntervalMs, experiments: experiments, telemetry: telemetry, runtime: runtime, overlayFetcher: overlayFetcher, overlayConfigUri: overlayConfigUri, overlayConfigFeatureKey: overlayConfigFeatureKey, overlayFetchCredentials: overlayFetchCredentials, footerSlot: footerSlot, launcherLabel: launcherLabel, canvasHost: canvasHost, customRenderers: customRenderers, theme: theme }) }));
|
|
39
|
+
}
|
|
40
|
+
// No runtime - render directly (legacy mode)
|
|
41
|
+
return (_jsx(SmartCanvasAppInner, { controller: controller, fetcher: fetcher, configUri: configUri, configUriFeatureKey: configUriFeatureKey, configFeatureKey: configFeatureKey, fetchCredentials: fetchCredentials, pollIntervalMs: pollIntervalMs, experiments: experiments, telemetry: telemetry, overlayFetcher: overlayFetcher, overlayConfigUri: overlayConfigUri, overlayConfigFeatureKey: overlayConfigFeatureKey, overlayFetchCredentials: overlayFetchCredentials, footerSlot: footerSlot, launcherLabel: launcherLabel, canvasHost: canvasHost, customRenderers: customRenderers, theme: theme }));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Inner component that handles the actual rendering logic.
|
|
45
|
+
* Separated to allow RuntimeProvider to wrap it when runtime is available.
|
|
46
|
+
*/
|
|
47
|
+
function SmartCanvasAppInner({ controller, fetcher, configUri, configUriFeatureKey = 'smart-canvas-config-uri', configFeatureKey = 'smart-canvas-config', fetchCredentials = 'include', pollIntervalMs, experiments, telemetry, runtime, overlayFetcher: _overlayFetcher, overlayConfigUri: _overlayConfigUri, overlayConfigFeatureKey: _overlayConfigFeatureKey = 'smart-canvas-overlay-uri', overlayFetchCredentials: _overlayFetchCredentials = 'include', footerSlot, launcherLabel, canvasHost: _canvasHost, customRenderers, theme, }) {
|
|
37
48
|
var _a, _b, _c;
|
|
38
49
|
const [open, setOpen] = useState(controller.getState().open);
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
// Use runtime context for pathname if available, otherwise track locally
|
|
51
|
+
const pageContext = usePageContext();
|
|
52
|
+
const [localPathname, setLocalPathname] = useState(() => typeof window !== 'undefined' ? window.location.pathname : '/');
|
|
53
|
+
// If runtime is available, use its context for pathname (it already handles SPA navigation)
|
|
54
|
+
// Otherwise, track pathname locally (legacy mode)
|
|
55
|
+
const pathname = (pageContext === null || pageContext === void 0 ? void 0 : pageContext.url) ? new URL(pageContext.url).pathname : localPathname;
|
|
56
|
+
// Track route changes locally only when runtime is not available (legacy mode)
|
|
41
57
|
useEffect(() => {
|
|
42
|
-
if (
|
|
58
|
+
if (runtime)
|
|
59
|
+
return; // Runtime handles this via ContextManager
|
|
60
|
+
if (typeof window === 'undefined')
|
|
43
61
|
return;
|
|
44
|
-
const updatePathname = () =>
|
|
62
|
+
const updatePathname = () => setLocalPathname(window.location.pathname);
|
|
45
63
|
// Listen for popstate (back/forward navigation)
|
|
46
|
-
window.addEventListener(
|
|
64
|
+
window.addEventListener('popstate', updatePathname);
|
|
47
65
|
// Intercept pushState/replaceState for SPA navigation
|
|
48
66
|
const originalPushState = history.pushState;
|
|
49
67
|
const originalReplaceState = history.replaceState;
|
|
@@ -56,11 +74,11 @@ export function SmartCanvasApp({ controller, fetcher, configUri, configUriFeatur
|
|
|
56
74
|
updatePathname();
|
|
57
75
|
};
|
|
58
76
|
return () => {
|
|
59
|
-
window.removeEventListener(
|
|
77
|
+
window.removeEventListener('popstate', updatePathname);
|
|
60
78
|
history.pushState = originalPushState;
|
|
61
79
|
history.replaceState = originalReplaceState;
|
|
62
80
|
};
|
|
63
|
-
}, []);
|
|
81
|
+
}, [runtime]);
|
|
64
82
|
const derivedFetcher = useMemo(() => {
|
|
65
83
|
if (fetcher)
|
|
66
84
|
return fetcher;
|
|
@@ -76,6 +94,7 @@ export function SmartCanvasApp({ controller, fetcher, configUri, configUriFeatur
|
|
|
76
94
|
fetcher: derivedFetcher,
|
|
77
95
|
pollIntervalMs,
|
|
78
96
|
experiments,
|
|
97
|
+
runtime,
|
|
79
98
|
});
|
|
80
99
|
const hasContent = configState.tiles.length > 0 && !configState.error;
|
|
81
100
|
useEffect(() => controller.subscribe((state) => setOpen(state.open)), [controller]);
|
|
@@ -84,38 +103,15 @@ export function SmartCanvasApp({ controller, fetcher, configUri, configUriFeatur
|
|
|
84
103
|
controller.setOpen(false);
|
|
85
104
|
}
|
|
86
105
|
}, [controller, hasContent]);
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return async () => configState.overlayRecipes;
|
|
95
|
-
}
|
|
96
|
-
if (configState.overlayRecipe) {
|
|
97
|
-
return async () => configState.overlayRecipe;
|
|
98
|
-
}
|
|
99
|
-
// Don't create a fetcher if there's no URI and we're still loading config
|
|
100
|
-
if (!overlayConfigUri && configState.isLoading) {
|
|
101
|
-
return undefined;
|
|
106
|
+
// Apply actions when config loads
|
|
107
|
+
// Actions are processed by ActionEngine through the runtime
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if ((runtime === null || runtime === void 0 ? void 0 : runtime.actions) && configState.actions.length > 0) {
|
|
110
|
+
runtime.actions.applyBatch(configState.actions).catch((err) => {
|
|
111
|
+
console.error('[SmartCanvas] Failed to apply actions:', err);
|
|
112
|
+
});
|
|
102
113
|
}
|
|
103
|
-
|
|
104
|
-
}, [overlayFetcher, configState.overlayRecipes, configState.overlayRecipe, configState.isLoading, overlayConfigUri]);
|
|
105
|
-
useCanvasOverlays({
|
|
106
|
-
recipesFetcher: derivedOverlayRecipesFetcher,
|
|
107
|
-
configUri: !derivedOverlayRecipesFetcher && !configState.isLoading ? overlayConfigUri : undefined,
|
|
108
|
-
featureKey: overlayConfigFeatureKey,
|
|
109
|
-
credentials: overlayFetchCredentials,
|
|
110
|
-
experiments,
|
|
111
|
-
telemetry,
|
|
112
|
-
canvasHost,
|
|
113
|
-
});
|
|
114
|
-
useHostPatches({
|
|
115
|
-
patches: configState.patches,
|
|
116
|
-
telemetry,
|
|
117
|
-
canvasHost,
|
|
118
|
-
});
|
|
114
|
+
}, [runtime, configState.actions]);
|
|
119
115
|
// Merge theme from config (workspace settings) with any direct theme prop
|
|
120
116
|
// Config theme takes precedence for workspace-set values, but theme prop can override
|
|
121
117
|
// NOTE: This must be called BEFORE any early returns to maintain consistent hook order
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartCanvasApp.js","sourceRoot":"","sources":["../src/SmartCanvasApp.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAa,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"SmartCanvasApp.js","sourceRoot":"","sources":["../src/SmartCanvasApp.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type SmartCanvasAppProps } from
|
|
2
|
-
import { SmartCanvasController } from
|
|
3
|
-
import { MountableComponent } from
|
|
1
|
+
import { type SmartCanvasAppProps } from './SmartCanvasApp';
|
|
2
|
+
import { SmartCanvasController } from './controller';
|
|
3
|
+
import { MountableComponent } from './api';
|
|
4
4
|
export declare class SmartCanvasElement extends HTMLElement {
|
|
5
5
|
#private;
|
|
6
6
|
constructor();
|
|
@@ -17,13 +17,13 @@ export declare class SmartCanvasElement extends HTMLElement {
|
|
|
17
17
|
/**
|
|
18
18
|
* Used by standalone create() helper to bootstrap React into the shadow.
|
|
19
19
|
*/
|
|
20
|
-
mountReactApp(appProps: Omit<SmartCanvasAppProps,
|
|
20
|
+
mountReactApp(appProps: Omit<SmartCanvasAppProps, 'controller'>): void;
|
|
21
21
|
private render;
|
|
22
22
|
private applyBaseStyles;
|
|
23
23
|
}
|
|
24
24
|
export declare const registerSmartCanvasElement: () => void;
|
|
25
25
|
declare global {
|
|
26
26
|
interface HTMLElementTagNameMap {
|
|
27
|
-
|
|
27
|
+
'smart-canvas': SmartCanvasElement;
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -11,10 +11,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
11
|
};
|
|
12
12
|
var _SmartCanvasElement_shadow, _SmartCanvasElement_mount, _SmartCanvasElement_overlayRoot, _SmartCanvasElement_controller, _SmartCanvasElement_root, _SmartCanvasElement_lastAppProps, _SmartCanvasElement_customRenderers;
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
-
import { createRoot } from
|
|
15
|
-
import { SmartCanvasApp } from
|
|
16
|
-
import { createSmartCanvasController } from
|
|
17
|
-
const TAG_NAME =
|
|
14
|
+
import { createRoot } from 'react-dom/client';
|
|
15
|
+
import { SmartCanvasApp } from './SmartCanvasApp';
|
|
16
|
+
import { createSmartCanvasController } from './controller';
|
|
17
|
+
const TAG_NAME = 'smart-canvas';
|
|
18
18
|
const BASE_CSS = `
|
|
19
19
|
:host {
|
|
20
20
|
font: inherit;
|
|
@@ -30,13 +30,23 @@ const BASE_CSS = `
|
|
|
30
30
|
}
|
|
31
31
|
`;
|
|
32
32
|
const ensureOverlayRoot = () => {
|
|
33
|
-
const id =
|
|
33
|
+
const id = 'smartcanvas-overlays';
|
|
34
34
|
let root = document.getElementById(id);
|
|
35
35
|
if (!root) {
|
|
36
|
-
root = document.createElement(
|
|
36
|
+
root = document.createElement('div');
|
|
37
37
|
root.id = id;
|
|
38
|
-
root.setAttribute(
|
|
39
|
-
|
|
38
|
+
root.setAttribute('data-smart-canvas-overlay', 'true');
|
|
39
|
+
// Guard against body not existing yet (script in <head>)
|
|
40
|
+
if (document.body) {
|
|
41
|
+
document.body.appendChild(root);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
45
|
+
if (!root.parentNode) {
|
|
46
|
+
document.body.appendChild(root);
|
|
47
|
+
}
|
|
48
|
+
}, { once: true });
|
|
49
|
+
}
|
|
40
50
|
}
|
|
41
51
|
return root;
|
|
42
52
|
};
|
|
@@ -50,16 +60,16 @@ export class SmartCanvasElement extends HTMLElement {
|
|
|
50
60
|
_SmartCanvasElement_root.set(this, null);
|
|
51
61
|
_SmartCanvasElement_lastAppProps.set(this, null);
|
|
52
62
|
_SmartCanvasElement_customRenderers.set(this, {});
|
|
53
|
-
__classPrivateFieldSet(this, _SmartCanvasElement_shadow, this.attachShadow({ mode:
|
|
54
|
-
__classPrivateFieldSet(this, _SmartCanvasElement_mount, document.createElement(
|
|
55
|
-
__classPrivateFieldGet(this, _SmartCanvasElement_mount, "f").setAttribute(
|
|
63
|
+
__classPrivateFieldSet(this, _SmartCanvasElement_shadow, this.attachShadow({ mode: 'open', delegatesFocus: true }), "f");
|
|
64
|
+
__classPrivateFieldSet(this, _SmartCanvasElement_mount, document.createElement('div'), "f");
|
|
65
|
+
__classPrivateFieldGet(this, _SmartCanvasElement_mount, "f").setAttribute('part', 'mount');
|
|
56
66
|
__classPrivateFieldGet(this, _SmartCanvasElement_shadow, "f").appendChild(__classPrivateFieldGet(this, _SmartCanvasElement_mount, "f"));
|
|
57
67
|
__classPrivateFieldSet(this, _SmartCanvasElement_overlayRoot, ensureOverlayRoot(), "f");
|
|
58
68
|
__classPrivateFieldSet(this, _SmartCanvasElement_controller, createSmartCanvasController(), "f");
|
|
59
69
|
this.applyBaseStyles();
|
|
60
70
|
}
|
|
61
71
|
connectedCallback() {
|
|
62
|
-
this.style.setProperty(
|
|
72
|
+
this.style.setProperty('font-family', 'inherit');
|
|
63
73
|
}
|
|
64
74
|
disconnectedCallback() {
|
|
65
75
|
var _a;
|
|
@@ -116,7 +126,7 @@ export class SmartCanvasElement extends HTMLElement {
|
|
|
116
126
|
__classPrivateFieldGet(this, _SmartCanvasElement_shadow, "f").adoptedStyleSheets = [sheet];
|
|
117
127
|
}
|
|
118
128
|
else {
|
|
119
|
-
const style = document.createElement(
|
|
129
|
+
const style = document.createElement('style');
|
|
120
130
|
style.textContent = BASE_CSS;
|
|
121
131
|
__classPrivateFieldGet(this, _SmartCanvasElement_shadow, "f").appendChild(style);
|
|
122
132
|
}
|
|
@@ -124,7 +134,7 @@ export class SmartCanvasElement extends HTMLElement {
|
|
|
124
134
|
}
|
|
125
135
|
_SmartCanvasElement_shadow = new WeakMap(), _SmartCanvasElement_mount = new WeakMap(), _SmartCanvasElement_overlayRoot = new WeakMap(), _SmartCanvasElement_controller = new WeakMap(), _SmartCanvasElement_root = new WeakMap(), _SmartCanvasElement_lastAppProps = new WeakMap(), _SmartCanvasElement_customRenderers = new WeakMap();
|
|
126
136
|
export const registerSmartCanvasElement = () => {
|
|
127
|
-
if (typeof window ===
|
|
137
|
+
if (typeof window === 'undefined')
|
|
128
138
|
return;
|
|
129
139
|
if (!customElements.get(TAG_NAME)) {
|
|
130
140
|
customElements.define(TAG_NAME, SmartCanvasElement);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmartCanvasElement.js","sourceRoot":"","sources":["../src/SmartCanvasElement.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAA4B,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAyB,MAAM,cAAc,CAAC;AAGlF,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;CAahB,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,MAAM,EAAE,GAAG,sBAAsB,CAAC;IAClC,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SmartCanvasElement.js","sourceRoot":"","sources":["../src/SmartCanvasElement.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import type { SmartCanvasElement } from
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type { SmartCanvasElement } from './SmartCanvasElement';
|
|
3
3
|
export interface SmartCanvasPortalProps {
|
|
4
4
|
element: SmartCanvasElement | null;
|
|
5
5
|
children: ReactNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useLayoutEffect, useState } from
|
|
2
|
-
import { createPortal } from
|
|
1
|
+
import { useLayoutEffect, useState } from 'react';
|
|
2
|
+
import { createPortal } from 'react-dom';
|
|
3
3
|
export function SmartCanvasPortal({ element, children }) {
|
|
4
4
|
const [mountNode, setMountNode] = useState(null);
|
|
5
5
|
useLayoutEffect(() => {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionEngine
|
|
3
|
+
*
|
|
4
|
+
* Unified execution layer for interventions. Provides a high-level API for
|
|
5
|
+
* applying, reverting, and managing action steps.
|
|
6
|
+
*/
|
|
7
|
+
import type { ActionEngine, ActionEngineOptions } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Create an ActionEngine instance.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createActionEngine(options: ActionEngineOptions): ActionEngine;
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionEngine
|
|
3
|
+
*
|
|
4
|
+
* Unified execution layer for interventions. Provides a high-level API for
|
|
5
|
+
* applying, reverting, and managing action steps.
|
|
6
|
+
*/
|
|
7
|
+
import { validateAction, validateActions } from './validation';
|
|
8
|
+
import { executorRegistry as defaultExecutorRegistry } from './executors';
|
|
9
|
+
/** Counter for generating unique action IDs */
|
|
10
|
+
let actionIdCounter = 0;
|
|
11
|
+
/**
|
|
12
|
+
* Create an ActionEngine instance.
|
|
13
|
+
*/
|
|
14
|
+
export function createActionEngine(options) {
|
|
15
|
+
const { overlayRoot, eventBus, surfaces, anchorResolver, adaptiveId, executorRegistry = defaultExecutorRegistry, } = options;
|
|
16
|
+
/** Map of active actions by ID */
|
|
17
|
+
const activeActions = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Generate a unique action ID.
|
|
20
|
+
*/
|
|
21
|
+
function generateId() {
|
|
22
|
+
return `action-${++actionIdCounter}`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Publish an event to the EventBus if available.
|
|
26
|
+
*/
|
|
27
|
+
function publishEvent(name, props) {
|
|
28
|
+
if (eventBus) {
|
|
29
|
+
eventBus.publish(name, props);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create the executor context.
|
|
34
|
+
*/
|
|
35
|
+
function createExecutorContext() {
|
|
36
|
+
return {
|
|
37
|
+
overlayRoot,
|
|
38
|
+
resolveAnchor: anchorResolver,
|
|
39
|
+
generateId,
|
|
40
|
+
publishEvent,
|
|
41
|
+
adaptiveId,
|
|
42
|
+
// Allow composite executors (like tours) to execute nested actions
|
|
43
|
+
applyAction: apply,
|
|
44
|
+
// Allow composite executors to subscribe to events
|
|
45
|
+
subscribeEvent: eventBus
|
|
46
|
+
? (name, callback) => {
|
|
47
|
+
return eventBus.subscribe({ names: [name] }, (event) => callback(event.props));
|
|
48
|
+
}
|
|
49
|
+
: undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Execute a mountWidget action via Surfaces.
|
|
54
|
+
*/
|
|
55
|
+
async function executeMountWidget(action, context) {
|
|
56
|
+
if (!surfaces) {
|
|
57
|
+
throw new Error('Surfaces provider required for core:mountWidget actions');
|
|
58
|
+
}
|
|
59
|
+
const handle = surfaces.mount(action.slot, {
|
|
60
|
+
type: 'widget',
|
|
61
|
+
widgetId: action.widget.widgetId,
|
|
62
|
+
config: action.widget.props,
|
|
63
|
+
}, {
|
|
64
|
+
priority: action.widget.priority,
|
|
65
|
+
});
|
|
66
|
+
context.publishEvent('action.applied', {
|
|
67
|
+
id: context.generateId(),
|
|
68
|
+
kind: 'core:mountWidget',
|
|
69
|
+
slot: action.slot,
|
|
70
|
+
widgetId: action.widget.widgetId,
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
cleanup: () => {
|
|
74
|
+
handle.unmount();
|
|
75
|
+
},
|
|
76
|
+
updateFn: (changes) => {
|
|
77
|
+
if ('widget' in changes && changes.widget) {
|
|
78
|
+
const w = changes.widget;
|
|
79
|
+
if (w.props) {
|
|
80
|
+
handle.update({
|
|
81
|
+
type: 'widget',
|
|
82
|
+
widgetId: action.widget.widgetId,
|
|
83
|
+
config: w.props,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Apply a single action.
|
|
92
|
+
*/
|
|
93
|
+
async function apply(action) {
|
|
94
|
+
const validation = validateAction(action);
|
|
95
|
+
if (!validation.valid) {
|
|
96
|
+
const errorMessages = validation.errors.map((e) => e.message).join('; ');
|
|
97
|
+
throw new Error(`Action validation failed: ${errorMessages}`);
|
|
98
|
+
}
|
|
99
|
+
const id = generateId();
|
|
100
|
+
const context = createExecutorContext();
|
|
101
|
+
let result;
|
|
102
|
+
// Special handling for mountWidget
|
|
103
|
+
if (action.kind === 'core:mountWidget') {
|
|
104
|
+
result = await executeMountWidget(action, context);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const executor = executorRegistry.get(action.kind);
|
|
108
|
+
if (!executor) {
|
|
109
|
+
throw new Error(`No executor for action kind: ${action.kind}`);
|
|
110
|
+
}
|
|
111
|
+
result = await executor(action, context);
|
|
112
|
+
}
|
|
113
|
+
// Track active action
|
|
114
|
+
const entry = {
|
|
115
|
+
id,
|
|
116
|
+
action,
|
|
117
|
+
adaptiveId,
|
|
118
|
+
appliedTs: Date.now(),
|
|
119
|
+
state: 'applied',
|
|
120
|
+
cleanup: result.cleanup,
|
|
121
|
+
updateFn: result.updateFn,
|
|
122
|
+
};
|
|
123
|
+
activeActions.set(id, entry);
|
|
124
|
+
// Publish applied event
|
|
125
|
+
publishEvent('action.applied', {
|
|
126
|
+
id,
|
|
127
|
+
kind: action.kind,
|
|
128
|
+
anchorId: 'anchorId' in action ? action.anchorId : undefined,
|
|
129
|
+
});
|
|
130
|
+
// Create and return handle
|
|
131
|
+
const handle = {
|
|
132
|
+
id,
|
|
133
|
+
action,
|
|
134
|
+
async revert() {
|
|
135
|
+
const entry = activeActions.get(id);
|
|
136
|
+
if (!entry || entry.state !== 'applied')
|
|
137
|
+
return;
|
|
138
|
+
try {
|
|
139
|
+
await entry.cleanup();
|
|
140
|
+
entry.state = 'reverted';
|
|
141
|
+
publishEvent('action.reverted', { id, kind: action.kind });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
entry.state = 'failed';
|
|
145
|
+
publishEvent('action.failed', {
|
|
146
|
+
id,
|
|
147
|
+
kind: action.kind,
|
|
148
|
+
error: String(error),
|
|
149
|
+
});
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
activeActions.delete(id);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
isApplied() {
|
|
157
|
+
const entry = activeActions.get(id);
|
|
158
|
+
return (entry === null || entry === void 0 ? void 0 : entry.state) === 'applied';
|
|
159
|
+
},
|
|
160
|
+
async update(changes) {
|
|
161
|
+
const entry = activeActions.get(id);
|
|
162
|
+
if (!entry || entry.state !== 'applied') {
|
|
163
|
+
throw new Error('Cannot update action that is not applied');
|
|
164
|
+
}
|
|
165
|
+
if (entry.updateFn) {
|
|
166
|
+
await entry.updateFn(changes);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
throw new Error(`Action kind ${action.kind} does not support updates`);
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
getState() {
|
|
173
|
+
var _a;
|
|
174
|
+
const entry = activeActions.get(id);
|
|
175
|
+
return (_a = entry === null || entry === void 0 ? void 0 : entry.state) !== null && _a !== void 0 ? _a : 'reverted';
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
return handle;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Apply multiple actions as a batch.
|
|
182
|
+
*/
|
|
183
|
+
async function applyBatch(actions) {
|
|
184
|
+
const validation = validateActions(actions);
|
|
185
|
+
if (!validation.valid) {
|
|
186
|
+
const errorMessages = validation.errors.map((e) => e.message).join('; ');
|
|
187
|
+
throw new Error(`Batch validation failed: ${errorMessages}`);
|
|
188
|
+
}
|
|
189
|
+
const batchId = generateId();
|
|
190
|
+
const handles = [];
|
|
191
|
+
const appliedHandles = [];
|
|
192
|
+
try {
|
|
193
|
+
for (const action of actions) {
|
|
194
|
+
const handle = await apply(action);
|
|
195
|
+
handles.push(handle);
|
|
196
|
+
appliedHandles.push(handle);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
// Rollback on failure
|
|
201
|
+
for (const handle of appliedHandles) {
|
|
202
|
+
try {
|
|
203
|
+
await handle.revert();
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Ignore cleanup errors during rollback
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
const batchHandle = {
|
|
212
|
+
id: batchId,
|
|
213
|
+
handles,
|
|
214
|
+
async revertAll() {
|
|
215
|
+
// Revert in reverse order
|
|
216
|
+
for (let i = handles.length - 1; i >= 0; i--) {
|
|
217
|
+
try {
|
|
218
|
+
await handles[i].revert();
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
console.error(`[ActionEngine] Error reverting action ${handles[i].id}:`, error);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
isApplied() {
|
|
226
|
+
return handles.every((h) => h.isApplied());
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
return batchHandle;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Validate an action without applying it.
|
|
233
|
+
*/
|
|
234
|
+
function validate(action) {
|
|
235
|
+
return validateAction(action);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get all currently active actions.
|
|
239
|
+
*/
|
|
240
|
+
function getActive() {
|
|
241
|
+
return Array.from(activeActions.values()).map((entry) => ({
|
|
242
|
+
id: entry.id,
|
|
243
|
+
action: entry.action,
|
|
244
|
+
adaptiveId: entry.adaptiveId,
|
|
245
|
+
appliedTs: entry.appliedTs,
|
|
246
|
+
state: entry.state,
|
|
247
|
+
}));
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Clean up all active actions.
|
|
251
|
+
*/
|
|
252
|
+
function destroy() {
|
|
253
|
+
// Revert all active actions
|
|
254
|
+
for (const entry of activeActions.values()) {
|
|
255
|
+
if (entry.state === 'applied') {
|
|
256
|
+
try {
|
|
257
|
+
entry.cleanup();
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
console.error(`[ActionEngine] Error during cleanup:`, error);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
activeActions.clear();
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
apply,
|
|
268
|
+
applyBatch,
|
|
269
|
+
validate,
|
|
270
|
+
getActive,
|
|
271
|
+
destroy,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=ActionEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionEngine.js","sourceRoot":"","sources":["../../src/actions/ActionEngine.ts"],"names":[],"mappings":"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"}
|