@salesforce/metadata-visualizer-web 1.0.1 → 1.2.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.
Files changed (46) hide show
  1. package/README.md +20 -9
  2. package/dist/WebVisualizationEngine.d.ts +27 -3
  3. package/dist/WebVisualizationEngine.d.ts.map +1 -1
  4. package/dist/WebVisualizationEngine.js +41 -10
  5. package/dist/WebVisualizationEngine.js.map +1 -1
  6. package/dist/createWebVisualizationEngine.d.ts +1 -1
  7. package/dist/createWebVisualizationEngine.js +1 -1
  8. package/dist/design-system/light-design-system.css +724 -0
  9. package/dist/errors/index.d.ts +1 -1
  10. package/dist/errors/index.js +1 -1
  11. package/dist/index.d.ts +4 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/internal/CompositeFileSystem.d.ts +1 -1
  16. package/dist/internal/CompositeFileSystem.js +1 -1
  17. package/dist/internal/assetInliner.d.ts +1 -1
  18. package/dist/internal/assetInliner.js +1 -1
  19. package/dist/internal/constants.d.ts +1 -1
  20. package/dist/internal/constants.js +1 -1
  21. package/dist/internal/htmlPipeline.d.ts +1 -1
  22. package/dist/internal/htmlPipeline.js +1 -1
  23. package/dist/pluginAssets/BundledPluginAssetReader.d.ts +3 -2
  24. package/dist/pluginAssets/BundledPluginAssetReader.d.ts.map +1 -1
  25. package/dist/pluginAssets/BundledPluginAssetReader.js +8 -4
  26. package/dist/pluginAssets/BundledPluginAssetReader.js.map +1 -1
  27. package/dist/plugins/agent/ui/assets/index-CTzSDPPx.css +1 -0
  28. package/dist/plugins/agent/ui/assets/index-D0wb9GBs.js +71 -0
  29. package/dist/plugins/agent/ui/index.html +14 -0
  30. package/dist/plugins/flexipage/ui/assets/index-DT5lcUwK.js +48 -0
  31. package/dist/plugins/flexipage/ui/index.html +1 -1
  32. package/dist/plugins/schema/ui/assets/index-jqcasNAD.js +70 -0
  33. package/dist/plugins/schema/ui/index.html +1 -1
  34. package/dist/types/HttpAsset.d.ts +1 -1
  35. package/dist/types/HttpAsset.js +1 -1
  36. package/dist/types/PluginDataUpdateMessage.d.ts +1 -1
  37. package/dist/types/PluginDataUpdateMessage.js +1 -1
  38. package/dist/types/PluginInfo.d.ts +1 -1
  39. package/dist/types/PluginInfo.js +1 -1
  40. package/dist/types/VisualizeOutcome.d.ts +1 -1
  41. package/dist/types/VisualizeOutcome.js +1 -1
  42. package/dist/types/WebAdapterOptions.d.ts +1 -1
  43. package/dist/types/WebAdapterOptions.js +1 -1
  44. package/package.json +3 -3
  45. package/dist/plugins/flexipage/ui/assets/index-BAFqMU7k.js +0 -48
  46. package/dist/plugins/schema/ui/assets/index-Ho7jg9o_.js +0 -70
package/README.md CHANGED
@@ -45,13 +45,13 @@ After implementing `IFileSystem` and constructing the engine via `createWebVisua
45
45
 
46
46
  ### Core API Methods
47
47
 
48
- | Method | Returns | Use Case |
49
- | -------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
50
- | `getPlugin(metadataFilePath)` | `PluginInfo \| null` | Resolve a metadata file path to its registered plugin (returns `id`, `displayName`, etc.) |
51
- | `visualizeMetadata(pluginId)` | `{ bundle: HttpAsset<string> \| null, error: PluginError \| null }` | Generate a fully self-contained HTML shell for the plugin's UI (no parsing — UI only) |
52
- | `getParsedMetadata(metadataFilePath)` | `VisualizeOutcome` — `{ result, error }` | Parse metadata and return structured data without generating HTML |
53
- | `getUpdatedParsedMetadata(metadataFilePath)` | `{ error, pluginDataUpdateMessage }` | Generate update message for posting to existing plugin iframe (live updates) |
54
- | `dispose()` | `void` | Release all resources (call on shutdown) |
48
+ | Method | Returns | Use Case |
49
+ | -------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
50
+ | `getPlugin(metadataFilePath)` | `PluginInfo \| null` | Resolve a metadata file path to its registered plugin (returns `id`, `displayName`, etc.) |
51
+ | `visualizeMetadata(pluginId, options?)` | `{ bundle: HttpAsset<string> \| null, error: PluginError \| null }` | Generate a fully self-contained HTML shell for the plugin's UI (no parsing — UI only); `options.theme` selects a design-system theme |
52
+ | `getParsedMetadata(metadataFilePath)` | `VisualizeOutcome` — `{ result, error }` | Parse metadata and return structured data without generating HTML |
53
+ | `getUpdatedParsedMetadata(metadataFilePath)` | `{ error, pluginDataUpdateMessage }` | Generate update message for posting to existing plugin iframe (live updates) |
54
+ | `dispose()` | `void` | Release all resources (call on shutdown) |
55
55
 
56
56
  ### Method Details
57
57
 
@@ -63,7 +63,7 @@ After implementing `IFileSystem` and constructing the engine via `createWebVisua
63
63
  - Returns `PluginInfo` (with `id`) on match, `null` otherwise
64
64
  - Synchronous and side-effect-free
65
65
 
66
- **`visualizeMetadata(pluginId)`** — Generate UI shell:
66
+ **`visualizeMetadata(pluginId, options?)`** — Generate UI shell:
67
67
 
68
68
  - Returns fully self-contained HTML with all assets (JS, CSS, platform styles) inlined
69
69
  - **No metadata parsing occurs** — this generates the static plugin UI only
@@ -71,6 +71,15 @@ After implementing `IFileSystem` and constructing the engine via `createWebVisua
71
71
  - Perfect for iframe embedding: `<iframe srcdoc="..."></iframe>`
72
72
  - The loaded plugin iframe requests its data separately via postMessage
73
73
  - Error handling: Check `error` field first, then use `bundle`
74
+ - **Theming:** Pass `{ theme: 'light' }` to inline the light design-system sheet. Omitting `options` (or `options.theme`) yields the default dark-fallback bundle, byte-for-byte identical to the pre-theme behavior. An unknown theme returns a `Validation` error (no silent fallback), reported before any asset read. Valid theme names come from `DESIGN_SYSTEM_THEMES` / `isDesignSystemTheme` (re-exported from `@salesforce/metadata-core-sdk/design-system`).
75
+ - **Caching:** The bundle body varies by `(pluginId, theme)` at a stable URL, so its `cacheControl` is `public, max-age=86400` (no `immutable`). Multi-theme callers should vary their own cache key by theme.
76
+
77
+ ```ts
78
+ // Light theme bundle
79
+ const { bundle, error } = await engine.visualizeMetadata(pluginInfo.id, { theme: 'light' });
80
+ ```
81
+
82
+ > **Known limitation:** React Flow chrome elements (canvas dots, minimap, attribution) in plugin UIs remain dark-mode styled. Those elements are rendered by the external `@salesforce/metadata-plugins` package and are not reached by the design-system theme layer. Closing this gap requires a separate plugins-repo change.
74
83
 
75
84
  **`getParsedMetadata(metadataFilePath)`** — Parse metadata only:
76
85
 
@@ -250,7 +259,7 @@ Build runs from the workspace root — `@salesforce/metadata-plugins` lives in t
250
259
 
251
260
  - `WebVisualizationEngine` — Main class with five methods:
252
261
  - `getPlugin(metadataFilePath)` — Resolve a file path to its registered plugin
253
- - `visualizeMetadata(pluginId)` — Generate the plugin UI shell (HTML bundle, no parsing)
262
+ - `visualizeMetadata(pluginId, options?)` — Generate the plugin UI shell (HTML bundle, no parsing); `options.theme` selects a design-system theme
254
263
  - `getParsedMetadata(metadataFilePath)` — Parse metadata only
255
264
  - `getUpdatedParsedMetadata(metadataFilePath)` — Generate update message for live updates
256
265
  - `dispose()` — Release resources
@@ -263,6 +272,8 @@ Build runs from the workspace root — `@salesforce/metadata-plugins` lives in t
263
272
  - `VisualizeOutcome` — Parse result: `{ result, error }`. The `error` field is a `PluginError` from `@salesforce/metadata-core-sdk`.
264
273
  - `PluginDataUpdateMessage<T = unknown>` — Update message for postMessage: `{ type: 'PLUGIN_DATA_UPDATE', payload: PluginDataResponse<T> }`. Generic `T` lets plugin code with a known data shape opt into type-safety; consumers can narrow on `message.type` in a discriminated-union switch.
265
274
  - `WebAdapterOptions` — Engine constructor options: `{ fileSystem, telemetry? }`
275
+ - `VisualizeMetadataOptions` — `visualizeMetadata` options: `{ theme?: DesignSystemTheme }`
276
+ - `DesignSystemTheme` / `DESIGN_SYSTEM_THEMES` / `isDesignSystemTheme` — Theme catalog re-exported from `@salesforce/metadata-core-sdk/design-system`
266
277
 
267
278
  ## License
268
279
 
@@ -1,10 +1,11 @@
1
1
  /**
2
- * Copyright (c) 2025, Salesforce, Inc.
2
+ * Copyright (c) 2026, Salesforce, Inc.
3
3
  * All rights reserved.
4
4
  * Licensed under the BSD 3-Clause license.
5
5
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
6
  **/
7
7
  import type { PluginError } from '@salesforce/metadata-core-sdk';
8
+ import { type DesignSystemTheme } from '@salesforce/metadata-core-sdk/design-system';
8
9
  import type { PluginManager, VisualizationEngine } from '@salesforce/metadata-visualizer-core';
9
10
  import { BundledPluginAssetReader } from './pluginAssets/BundledPluginAssetReader.js';
10
11
  import type { HttpAsset } from './types/HttpAsset.js';
@@ -22,6 +23,18 @@ export interface WebVisualizationEngineDeps {
22
23
  pluginManager: PluginManager;
23
24
  pluginAssetReader: BundledPluginAssetReader;
24
25
  }
26
+ /**
27
+ * Options for {@link WebVisualizationEngine.visualizeMetadata}.
28
+ */
29
+ export interface VisualizeMetadataOptions {
30
+ /**
31
+ * Optional theme name. If omitted, returns the default (dark-fallback)
32
+ * bundle — byte-for-byte identical to the pre-theme behavior. A value that
33
+ * is not a known theme is rejected with a `Validation` error rather than
34
+ * silently falling back.
35
+ */
36
+ theme?: DesignSystemTheme;
37
+ }
25
38
  /**
26
39
  * Browser/HTTP platform adapter for the visualization framework.
27
40
  * Provides methods to generate self-contained HTML bundles and parse metadata
@@ -59,20 +72,31 @@ export declare class WebVisualizationEngine {
59
72
  * ready to be embedded in an iframe. No metadata parsing occurs — this generates the static UI shell.
60
73
  *
61
74
  * @param pluginId - ID of the registered plugin to generate bundle for
75
+ * @param options - Optional bundle options. `theme` selects a design-system
76
+ * theme (e.g. `'light'`); omitting it yields the default dark-fallback bundle.
62
77
  * @returns Object containing the bundle (null if failed) and error (null if successful)
63
78
  *
64
79
  * @example
65
80
  * ```typescript
81
+ * // Default (dark-fallback) bundle
66
82
  * const { bundle, error } = await engine.visualizeMetadata('flexipage-visualizer');
83
+ *
84
+ * // Light theme bundle
85
+ * const { bundle, error } = await engine.visualizeMetadata('flexipage-visualizer', { theme: 'light' });
86
+ *
67
87
  * if (error) {
68
88
  * console.error('Bundle generation failed:', error.message);
69
- * res.status(error.category === 'Configuration' ? 404 : 500).json({ error: error.message });
89
+ * res
90
+ * .status(
91
+ * error.category === 'Validation' ? 400 : error.category === 'Configuration' ? 404 : 500
92
+ * )
93
+ * .json({ error: error.message });
70
94
  * } else if (bundle) {
71
95
  * res.type(bundle.contentType).send(bundle.body);
72
96
  * }
73
97
  * ```
74
98
  */
75
- visualizeMetadata(pluginId: string): Promise<{
99
+ visualizeMetadata(pluginId: string, options?: VisualizeMetadataOptions): Promise<{
76
100
  bundle: HttpAsset<string> | null;
77
101
  error: PluginError | null;
78
102
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"WebVisualizationEngine.d.ts","sourceRoot":"","sources":["../src/WebVisualizationEngine.ts"],"names":[],"mappings":"AAAA;;;;;IAKI;AAEJ,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,wBAAwB,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAS;IACzB,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D;;;;;;;;;;;;;;;;OAgBG;gBACS,IAAI,EAAE,0BAA0B;IAM5C;;;;;;;;;;;;;;;;;;OAkBG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QACjD,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACjC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IA0DF;;;;;;;;;;;;;;;;;OAiBG;IACG,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyC5E;;;;;;;;;;;;;;;;;;OAkBG;IACG,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;QAChE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,uBAAuB,EAAE,uBAAuB,GAAG,IAAI,CAAC;KACzD,CAAC;IASF;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,IAAI,IAAI;IAUf;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAKlD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B,4DAA4D;IAC5D,OAAO,CAAC,iBAAiB;CAK1B"}
1
+ {"version":3,"file":"WebVisualizationEngine.d.ts","sourceRoot":"","sources":["../src/WebVisualizationEngine.ts"],"names":[],"mappings":"AAAA;;;;;IAKI;AAEJ,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAElF;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,wBAAwB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAS;IACzB,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAE5D;;;;;;;;;;;;;;;;OAgBG;gBACS,IAAI,EAAE,0BAA0B;IAM5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC;QACT,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACjC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IA8EF;;;;;;;;;;;;;;;;;OAiBG;IACG,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyC5E;;;;;;;;;;;;;;;;;;OAkBG;IACG,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;QAChE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAC1B,uBAAuB,EAAE,uBAAuB,GAAG,IAAI,CAAC;KACzD,CAAC;IASF;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,IAAI,IAAI;IAUf;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAKlD;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B,4DAA4D;IAC5D,OAAO,CAAC,iBAAiB;CAK1B"}
@@ -1,10 +1,11 @@
1
1
  /**
2
- * Copyright (c) 2025, Salesforce, Inc.
2
+ * Copyright (c) 2026, Salesforce, Inc.
3
3
  * All rights reserved.
4
4
  * Licensed under the BSD 3-Clause license.
5
5
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
6
  **/
7
7
  import { WebviewMessageType, ErrorCategory } from '@salesforce/metadata-core-sdk';
8
+ import { isDesignSystemTheme, } from '@salesforce/metadata-core-sdk/design-system';
8
9
  import { injectBootstrap } from './internal/htmlPipeline.js';
9
10
  import { inlineAssets } from './internal/assetInliner.js';
10
11
  import { BROWSER_IFRAME_BOOTSTRAP } from './internal/constants.js';
@@ -46,20 +47,31 @@ export class WebVisualizationEngine {
46
47
  * ready to be embedded in an iframe. No metadata parsing occurs — this generates the static UI shell.
47
48
  *
48
49
  * @param pluginId - ID of the registered plugin to generate bundle for
50
+ * @param options - Optional bundle options. `theme` selects a design-system
51
+ * theme (e.g. `'light'`); omitting it yields the default dark-fallback bundle.
49
52
  * @returns Object containing the bundle (null if failed) and error (null if successful)
50
53
  *
51
54
  * @example
52
55
  * ```typescript
56
+ * // Default (dark-fallback) bundle
53
57
  * const { bundle, error } = await engine.visualizeMetadata('flexipage-visualizer');
58
+ *
59
+ * // Light theme bundle
60
+ * const { bundle, error } = await engine.visualizeMetadata('flexipage-visualizer', { theme: 'light' });
61
+ *
54
62
  * if (error) {
55
63
  * console.error('Bundle generation failed:', error.message);
56
- * res.status(error.category === 'Configuration' ? 404 : 500).json({ error: error.message });
64
+ * res
65
+ * .status(
66
+ * error.category === 'Validation' ? 400 : error.category === 'Configuration' ? 404 : 500
67
+ * )
68
+ * .json({ error: error.message });
57
69
  * } else if (bundle) {
58
70
  * res.type(bundle.contentType).send(bundle.body);
59
71
  * }
60
72
  * ```
61
73
  */
62
- async visualizeMetadata(pluginId) {
74
+ async visualizeMetadata(pluginId, options) {
63
75
  this.assertNotDisposed();
64
76
  // Fail fast on invalid plugin IDs to avoid downstream errors
65
77
  if (!pluginId || pluginId.trim().length === 0) {
@@ -71,6 +83,18 @@ export class WebVisualizationEngine {
71
83
  },
72
84
  };
73
85
  }
86
+ // Reject an unknown theme up front — before any plugin verification or asset
87
+ // read — so a bad theme never touches the filesystem. No silent fallback:
88
+ // an invalid theme is a caller error, consistent with the error-first boundary.
89
+ if (options?.theme !== undefined && !isDesignSystemTheme(options.theme)) {
90
+ return {
91
+ bundle: null,
92
+ error: {
93
+ message: `Invalid theme: ${options.theme}`,
94
+ category: ErrorCategory.Validation,
95
+ },
96
+ };
97
+ }
74
98
  // Verify plugin is registered before attempting asset read
75
99
  if (!this.requireKnownPlugin(pluginId)) {
76
100
  return {
@@ -84,7 +108,7 @@ export class WebVisualizationEngine {
84
108
  try {
85
109
  // Build self-contained HTML bundle: inline all assets to eliminate external requests
86
110
  let html = await this.assetReader.readPluginIndexHtml(pluginId);
87
- const platformCss = await this.assetReader.readDesignSystemCss();
111
+ const platformCss = await this.assetReader.readDesignSystemCss(options?.theme);
88
112
  html = await inlineAssets(html, pluginId, this.assetReader, platformCss);
89
113
  // Bootstrap script enables host-plugin postMessage communication
90
114
  html = injectBootstrap(html, BROWSER_IFRAME_BOOTSTRAP);
@@ -92,11 +116,16 @@ export class WebVisualizationEngine {
92
116
  bundle: {
93
117
  contentType: 'text/html; charset=utf-8',
94
118
  body: html,
95
- // Bundle is the static plugin UI shell only (no per-user / per-org data —
96
- // that flows separately via getParsedMetadata + postMessage). The shell is
97
- // an immutable build artifact keyed by pluginId, safe to share across users
98
- // and cache for a day. `immutable` lets clients skip revalidation entirely.
99
- cacheControl: 'public, max-age=86400, immutable',
119
+ // Bundle is the static plugin UI shell + themed CSS (no per-user / per-org
120
+ // data — that flows separately via getParsedMetadata + postMessage). The
121
+ // shell is keyed by (pluginId, theme), but the theme is chosen via the
122
+ // options parameter, not the URL so the same URL can yield different
123
+ // bodies. We therefore drop `immutable`: with it, a client that fetched the
124
+ // default bundle and later requests light for the same plugin would be
125
+ // served the stale cached copy. `public, max-age=86400` still allows a day
126
+ // of caching but lets the client revalidate after that or on hard refresh.
127
+ // Multi-theme callers should vary their own cache key by theme.
128
+ cacheControl: 'public, max-age=86400',
100
129
  },
101
130
  error: null,
102
131
  };
@@ -108,7 +137,9 @@ export class WebVisualizationEngine {
108
137
  error: {
109
138
  message: err instanceof Error ? err.message : 'Failed to generate bundle',
110
139
  category: ErrorCategory.Runtime,
111
- context: { pluginId: pluginId },
140
+ // Include the theme so a themed-read failure (e.g. a missing theme
141
+ // sheet) is distinguishable from a default-read failure by context.
142
+ context: { pluginId: pluginId, theme: options?.theme ?? 'default' },
112
143
  stackTrace: err instanceof Error ? err.stack : undefined,
113
144
  },
114
145
  };
@@ -1 +1 @@
1
- {"version":3,"file":"WebVisualizationEngine.js","sourceRoot":"","sources":["../src/WebVisualizationEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebVisualizationEngine.js","sourceRoot":"","sources":["../src/WebVisualizationEngine.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2025, Salesforce, Inc.
2
+ * Copyright (c) 2026, Salesforce, Inc.
3
3
  * All rights reserved.
4
4
  * Licensed under the BSD 3-Clause license.
5
5
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2025, Salesforce, Inc.
2
+ * Copyright (c) 2026, Salesforce, Inc.
3
3
  * All rights reserved.
4
4
  * Licensed under the BSD 3-Clause license.
5
5
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause