@osdk/widget.vite-plugin 3.5.0-beta.8 → 3.5.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 (78) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js +2 -2
  3. package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js.map +1 -1
  4. package/build/esm/build-plugin/buildWidgetSetManifest.js +5 -4
  5. package/build/esm/build-plugin/buildWidgetSetManifest.js.map +1 -1
  6. package/build/esm/index.js +2 -2
  7. package/build/esm/index.js.map +1 -1
  8. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts +2 -1
  9. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts.map +1 -1
  10. package/build/types/build-plugin/buildWidgetSetManifest.d.ts +2 -1
  11. package/build/types/build-plugin/buildWidgetSetManifest.d.ts.map +1 -1
  12. package/build/types/index.d.ts +13 -1
  13. package/build/types/index.d.ts.map +1 -1
  14. package/package.json +6 -6
  15. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js +0 -186
  16. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js.map +0 -1
  17. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js +0 -133
  18. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js.map +0 -1
  19. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js +0 -153
  20. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js.map +0 -1
  21. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js +0 -96
  22. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js.map +0 -1
  23. package/build/esm/build-plugin/__tests__/isConfigFile.test.js +0 -26
  24. package/build/esm/build-plugin/__tests__/isConfigFile.test.js.map +0 -1
  25. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js +0 -44
  26. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js.map +0 -1
  27. package/build/esm/common/__tests__/extractWidgetConfig.test.js +0 -95
  28. package/build/esm/common/__tests__/extractWidgetConfig.test.js.map +0 -1
  29. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js +0 -38
  30. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js.map +0 -1
  31. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js +0 -77
  32. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js.map +0 -1
  33. package/build/esm/common/__tests__/validateWidgetConfig.test.js +0 -151
  34. package/build/esm/common/__tests__/validateWidgetConfig.test.js.map +0 -1
  35. package/build/esm/common/__tests__/visitNpmPackages.test.js +0 -74
  36. package/build/esm/common/__tests__/visitNpmPackages.test.js.map +0 -1
  37. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js +0 -87
  38. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js.map +0 -1
  39. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js +0 -34
  40. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js.map +0 -1
  41. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js +0 -48
  42. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js.map +0 -1
  43. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js +0 -71
  44. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js.map +0 -1
  45. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js +0 -66
  46. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js.map +0 -1
  47. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts +0 -1
  48. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts.map +0 -1
  49. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts +0 -1
  50. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts.map +0 -1
  51. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts +0 -1
  52. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts.map +0 -1
  53. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts +0 -1
  54. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts.map +0 -1
  55. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts +0 -1
  56. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts.map +0 -1
  57. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts +0 -1
  58. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts.map +0 -1
  59. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts +0 -1
  60. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts.map +0 -1
  61. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts +0 -1
  62. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts.map +0 -1
  63. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts +0 -1
  64. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts.map +0 -1
  65. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts +0 -1
  66. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts.map +0 -1
  67. package/build/types/common/__tests__/visitNpmPackages.test.d.ts +0 -1
  68. package/build/types/common/__tests__/visitNpmPackages.test.d.ts.map +0 -1
  69. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts +0 -1
  70. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts.map +0 -1
  71. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts +0 -1
  72. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts.map +0 -1
  73. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts +0 -1
  74. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts.map +0 -1
  75. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts +0 -1
  76. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts.map +0 -1
  77. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts +0 -1
  78. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,193 @@
1
1
  # @osdk/widget.vite-plugin
2
2
 
3
+ ## 3.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 7901ae0: Simulated release
8
+ - 12dcb6a: Bump node and vite versions
9
+ - c22dcac: Bump @types/node to 24.10.13
10
+ - beb2867: Add refreshHostDataOnAction
11
+ - 0ff602a: Bump vite to ^7.3.1
12
+ - de531ed: Handle HMR for widget config files
13
+ - b9066dd: Support interfaces in object set parameters
14
+ - 35f2f1a: Add Media inputs/outputs for Queries
15
+ - 6260835: Revert node bump
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [322c5bc]
20
+ - Updated dependencies [7901ae0]
21
+ - Updated dependencies [e590bed]
22
+ - Updated dependencies [beb2867]
23
+ - Updated dependencies [b9066dd]
24
+ - Updated dependencies [35f2f1a]
25
+ - Updated dependencies [fad598c]
26
+ - @osdk/foundry-config-json@1.7.0
27
+ - @osdk/widget.api@3.5.0
28
+
29
+ ## 3.5.0-beta.32
30
+
31
+ ### Patch Changes
32
+
33
+ - @osdk/widget.api@3.5.0-beta.32
34
+
35
+ ## 3.5.0-beta.31
36
+
37
+ ### Patch Changes
38
+
39
+ - @osdk/widget.api@3.5.0-beta.31
40
+
41
+ ## 3.5.0-beta.30
42
+
43
+ ### Patch Changes
44
+
45
+ - @osdk/widget.api@3.5.0-beta.30
46
+
47
+ ## 3.5.0-beta.29
48
+
49
+ ### Patch Changes
50
+
51
+ - @osdk/widget.api@3.5.0-beta.29
52
+
53
+ ## 3.5.0-beta.28
54
+
55
+ ### Patch Changes
56
+
57
+ - @osdk/widget.api@3.5.0-beta.28
58
+
59
+ ## 3.5.0-beta.27
60
+
61
+ ### Patch Changes
62
+
63
+ - @osdk/widget.api@3.5.0-beta.27
64
+
65
+ ## 3.5.0-beta.26
66
+
67
+ ### Patch Changes
68
+
69
+ - @osdk/widget.api@3.5.0-beta.26
70
+
71
+ ## 3.5.0-beta.25
72
+
73
+ ### Patch Changes
74
+
75
+ - Updated dependencies [e590bed]
76
+ - @osdk/widget.api@3.5.0-beta.25
77
+
78
+ ## 3.5.0-beta.24
79
+
80
+ ### Patch Changes
81
+
82
+ - @osdk/widget.api@3.5.0-beta.24
83
+
84
+ ## 3.5.0-beta.23
85
+
86
+ ### Patch Changes
87
+
88
+ - @osdk/widget.api@3.5.0-beta.23
89
+
90
+ ## 3.5.0-beta.22
91
+
92
+ ### Patch Changes
93
+
94
+ - @osdk/widget.api@3.5.0-beta.22
95
+
96
+ ## 3.5.0-beta.21
97
+
98
+ ### Patch Changes
99
+
100
+ - @osdk/widget.api@3.5.0-beta.21
101
+
102
+ ## 3.5.0-beta.20
103
+
104
+ ### Patch Changes
105
+
106
+ - @osdk/widget.api@3.5.0-beta.20
107
+
108
+ ## 3.5.0-beta.19
109
+
110
+ ### Patch Changes
111
+
112
+ - @osdk/widget.api@3.5.0-beta.19
113
+
114
+ ## 3.5.0-beta.18
115
+
116
+ ### Patch Changes
117
+
118
+ - @osdk/widget.api@3.5.0-beta.18
119
+
120
+ ## 3.5.0-beta.17
121
+
122
+ ### Patch Changes
123
+
124
+ - @osdk/widget.api@3.5.0-beta.17
125
+
126
+ ## 3.5.0-beta.16
127
+
128
+ ### Minor Changes
129
+
130
+ - 0ff602a: Bump vite to ^7.3.1
131
+
132
+ ### Patch Changes
133
+
134
+ - @osdk/widget.api@3.5.0-beta.16
135
+
136
+ ## 3.5.0-beta.15
137
+
138
+ ### Patch Changes
139
+
140
+ - @osdk/widget.api@3.5.0-beta.15
141
+
142
+ ## 3.5.0-beta.14
143
+
144
+ ### Minor Changes
145
+
146
+ - c22dcac: Bump @types/node to 24.10.13
147
+ - 35f2f1a: Add Media inputs/outputs for Queries
148
+ - 6260835: Revert node bump
149
+
150
+ ### Patch Changes
151
+
152
+ - Updated dependencies [35f2f1a]
153
+ - @osdk/foundry-config-json@1.7.0-beta.2
154
+ - @osdk/widget.api@3.5.0-beta.14
155
+
156
+ ## 3.5.0-beta.13
157
+
158
+ ### Minor Changes
159
+
160
+ - beb2867: Add refreshHostDataOnAction
161
+
162
+ ### Patch Changes
163
+
164
+ - Updated dependencies [beb2867]
165
+ - @osdk/widget.api@3.5.0-beta.13
166
+
167
+ ## 3.5.0-beta.12
168
+
169
+ ### Patch Changes
170
+
171
+ - @osdk/widget.api@3.5.0-beta.12
172
+
173
+ ## 3.5.0-beta.11
174
+
175
+ ### Patch Changes
176
+
177
+ - @osdk/widget.api@3.5.0-beta.11
178
+
179
+ ## 3.5.0-beta.10
180
+
181
+ ### Patch Changes
182
+
183
+ - @osdk/widget.api@3.5.0-beta.10
184
+
185
+ ## 3.5.0-beta.9
186
+
187
+ ### Patch Changes
188
+
189
+ - @osdk/widget.api@3.5.0-beta.9
190
+
3
191
  ## 3.5.0-beta.8
4
192
 
5
193
  ### Minor Changes
@@ -24,7 +24,7 @@ import { getInputHtmlEntrypoints } from "../common/getInputHtmlEntrypoints.js";
24
24
  import { buildWidgetSetManifest } from "./buildWidgetSetManifest.js";
25
25
  import { getWidgetBuildOutputs } from "./getWidgetBuildOutputs.js";
26
26
  import { getWidgetSetInputSpec } from "./getWidgetSetInputSpec.js";
27
- export function FoundryWidgetBuildPlugin() {
27
+ export function FoundryWidgetBuildPlugin(options) {
28
28
  // The root HTML entrypoints of the build process
29
29
  let htmlEntrypoints;
30
30
  // Store the resolved Vite config for use in later build steps
@@ -65,7 +65,7 @@ export function FoundryWidgetBuildPlugin() {
65
65
  const widgetSetVersion = await computeWidgetSetVersion(foundryConfig);
66
66
  const widgetBuilds = await Promise.all(htmlEntrypoints.map(input => getWidgetBuildOutputs(bundle, input, config.build.outDir, server)));
67
67
  const widgetSetInputSpec = await getWidgetSetInputSpec(path.resolve(process.cwd(), "package.json"));
68
- const widgetSetManifest = buildWidgetSetManifest(foundryConfig.foundryConfig.widgetSet.rid, widgetSetVersion, widgetBuilds, widgetSetInputSpec);
68
+ const widgetSetManifest = buildWidgetSetManifest(foundryConfig.foundryConfig.widgetSet.rid, widgetSetVersion, widgetBuilds, widgetSetInputSpec, options);
69
69
 
70
70
  // Write the manifest to the dist directory
71
71
  writeManifest(widgetSetManifest, config.build.outDir);
@@ -1 +1 @@
1
- {"version":3,"file":"FoundryWidgetBuildPlugin.js","names":["autoVersion","loadFoundryConfig","MANIFEST_FILE_LOCATION","fs","path","createServer","BUILD_PLUGIN_ID","MODULE_EVALUATION_MODE","getInputHtmlEntrypoints","buildWidgetSetManifest","getWidgetBuildOutputs","getWidgetSetInputSpec","FoundryWidgetBuildPlugin","htmlEntrypoints","config","name","enforce","apply","buildStart","options","configResolved","_config","writeBundle","_","bundle","foundryConfig","Error","server","createModuleEvaluationServer","widgetSetVersion","computeWidgetSetVersion","widgetBuilds","Promise","all","map","input","build","outDir","widgetSetInputSpec","resolve","process","cwd","widgetSetManifest","widgetSet","rid","writeManifest","close","configFile","mode","manifestPath","join","mkdirSync","dirname","recursive","writeFileSync","JSON","stringify"],"sources":["FoundryWidgetBuildPlugin.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LoadedFoundryConfig } from \"@osdk/foundry-config-json\";\nimport { autoVersion, loadFoundryConfig } from \"@osdk/foundry-config-json\";\nimport type { WidgetSetManifest } from \"@osdk/widget.api\";\nimport { MANIFEST_FILE_LOCATION } from \"@osdk/widget.api\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig, ViteDevServer } from \"vite\";\nimport { createServer } from \"vite\";\nimport {\n BUILD_PLUGIN_ID,\n MODULE_EVALUATION_MODE,\n} from \"../common/constants.js\";\nimport { getInputHtmlEntrypoints } from \"../common/getInputHtmlEntrypoints.js\";\nimport { buildWidgetSetManifest } from \"./buildWidgetSetManifest.js\";\nimport { getWidgetBuildOutputs } from \"./getWidgetBuildOutputs.js\";\nimport { getWidgetSetInputSpec } from \"./getWidgetSetInputSpec.js\";\n\nexport function FoundryWidgetBuildPlugin(): Plugin {\n // The root HTML entrypoints of the build process\n let htmlEntrypoints: string[];\n // Store the resolved Vite config for use in later build steps\n let config: ResolvedConfig;\n\n return {\n name: BUILD_PLUGIN_ID,\n enforce: \"pre\",\n // Only apply this plugin during build\n apply: \"build\",\n\n /**\n * Capture the entrypoints from the Vite config for use in later build steps.\n */\n buildStart(options) {\n htmlEntrypoints = getInputHtmlEntrypoints(options);\n },\n\n /**\n * Store the resolved Vite config for use in later build steps.\n */\n configResolved(_config) {\n config = _config;\n },\n\n /**\n * Once the build is complete, generate the widget set manifest based on the entrypoints and\n * configuration files that were found.\n *\n * Write the manifest to the expected location in the dist directory.\n */\n async writeBundle(_, bundle) {\n const foundryConfig = await loadFoundryConfig(\"widgetSet\");\n if (foundryConfig == null) {\n throw new Error(\"foundry.config.json file not found.\");\n }\n\n // Create a Vite server to evaluate widget config modules\n const server = await createModuleEvaluationServer(config);\n\n try {\n // Build widget set manifest\n const widgetSetVersion = await computeWidgetSetVersion(foundryConfig);\n const widgetBuilds = await Promise.all(\n htmlEntrypoints.map((input) =>\n getWidgetBuildOutputs(\n bundle,\n input,\n config.build.outDir,\n server,\n )\n ),\n );\n const widgetSetInputSpec = await getWidgetSetInputSpec(\n path.resolve(process.cwd(), \"package.json\"),\n );\n const widgetSetManifest = buildWidgetSetManifest(\n foundryConfig.foundryConfig.widgetSet.rid,\n widgetSetVersion,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n // Write the manifest to the dist directory\n writeManifest(widgetSetManifest, config.build.outDir);\n } finally {\n await server.close();\n }\n },\n };\n}\n\n/**\n * Create a Vite server for widget config module evaluation during the build process.\n * Must prevent loading the dev plugin to avoid triggering dev mode build steps.\n */\nasync function createModuleEvaluationServer(\n config: ResolvedConfig,\n): Promise<ViteDevServer> {\n return await createServer({\n // Reference the existing config file in order to respect any custom config\n configFile: config.configFile,\n // Custom mode to prevent dev plugin execution\n mode: MODULE_EVALUATION_MODE,\n });\n}\n\nasync function computeWidgetSetVersion(\n foundryConfig: LoadedFoundryConfig<\"widgetSet\">,\n): Promise<string> {\n return autoVersion(\n foundryConfig.foundryConfig.widgetSet.autoVersion\n ?? { \"type\": \"package-json\" },\n );\n}\n\nfunction writeManifest(\n widgetSetManifest: WidgetSetManifest,\n outDir: string,\n): void {\n const manifestPath = path.join(outDir, MANIFEST_FILE_LOCATION);\n fs.mkdirSync(path.dirname(manifestPath), { recursive: true });\n fs.writeFileSync(\n manifestPath,\n JSON.stringify(widgetSetManifest, null, 2),\n );\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,WAAW,EAAEC,iBAAiB,QAAQ,2BAA2B;AAE1E,SAASC,sBAAsB,QAAQ,kBAAkB;AACzD,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAEvB,SAASC,YAAY,QAAQ,MAAM;AACnC,SACEC,eAAe,EACfC,sBAAsB,QACjB,wBAAwB;AAC/B,SAASC,uBAAuB,QAAQ,sCAAsC;AAC9E,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,qBAAqB,QAAQ,4BAA4B;AAClE,SAASC,qBAAqB,QAAQ,4BAA4B;AAElE,OAAO,SAASC,wBAAwBA,CAAA,EAAW;EACjD;EACA,IAAIC,eAAyB;EAC7B;EACA,IAAIC,MAAsB;EAE1B,OAAO;IACLC,IAAI,EAAET,eAAe;IACrBU,OAAO,EAAE,KAAK;IACd;IACAC,KAAK,EAAE,OAAO;IAEd;AACJ;AACA;IACIC,UAAUA,CAACC,OAAO,EAAE;MAClBN,eAAe,GAAGL,uBAAuB,CAACW,OAAO,CAAC;IACpD,CAAC;IAED;AACJ;AACA;IACIC,cAAcA,CAACC,OAAO,EAAE;MACtBP,MAAM,GAAGO,OAAO;IAClB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACI,MAAMC,WAAWA,CAACC,CAAC,EAAEC,MAAM,EAAE;MAC3B,MAAMC,aAAa,GAAG,MAAMxB,iBAAiB,CAAC,WAAW,CAAC;MAC1D,IAAIwB,aAAa,IAAI,IAAI,EAAE;QACzB,MAAM,IAAIC,KAAK,CAAC,qCAAqC,CAAC;MACxD;;MAEA;MACA,MAAMC,MAAM,GAAG,MAAMC,4BAA4B,CAACd,MAAM,CAAC;MAEzD,IAAI;QACF;QACA,MAAMe,gBAAgB,GAAG,MAAMC,uBAAuB,CAACL,aAAa,CAAC;QACrE,MAAMM,YAAY,GAAG,MAAMC,OAAO,CAACC,GAAG,CACpCpB,eAAe,CAACqB,GAAG,CAAEC,KAAK,IACxBzB,qBAAqB,CACnBc,MAAM,EACNW,KAAK,EACLrB,MAAM,CAACsB,KAAK,CAACC,MAAM,EACnBV,MACF,CACF,CACF,CAAC;QACD,MAAMW,kBAAkB,GAAG,MAAM3B,qBAAqB,CACpDP,IAAI,CAACmC,OAAO,CAACC,OAAO,CAACC,GAAG,CAAC,CAAC,EAAE,cAAc,CAC5C,CAAC;QACD,MAAMC,iBAAiB,GAAGjC,sBAAsB,CAC9CgB,aAAa,CAACA,aAAa,CAACkB,SAAS,CAACC,GAAG,EACzCf,gBAAgB,EAChBE,YAAY,EACZO,kBACF,CAAC;;QAED;QACAO,aAAa,CAACH,iBAAiB,EAAE5B,MAAM,CAACsB,KAAK,CAACC,MAAM,CAAC;MACvD,CAAC,SAAS;QACR,MAAMV,MAAM,CAACmB,KAAK,CAAC,CAAC;MACtB;IACF;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,eAAelB,4BAA4BA,CACzCd,MAAsB,EACE;EACxB,OAAO,MAAMT,YAAY,CAAC;IACxB;IACA0C,UAAU,EAAEjC,MAAM,CAACiC,UAAU;IAC7B;IACAC,IAAI,EAAEzC;EACR,CAAC,CAAC;AACJ;AAEA,eAAeuB,uBAAuBA,CACpCL,aAA+C,EAC9B;EACjB,OAAOzB,WAAW,CAChByB,aAAa,CAACA,aAAa,CAACkB,SAAS,CAAC3C,WAAW,IAC5C;IAAE,MAAM,EAAE;EAAe,CAChC,CAAC;AACH;AAEA,SAAS6C,aAAaA,CACpBH,iBAAoC,EACpCL,MAAc,EACR;EACN,MAAMY,YAAY,GAAG7C,IAAI,CAAC8C,IAAI,CAACb,MAAM,EAAEnC,sBAAsB,CAAC;EAC9DC,EAAE,CAACgD,SAAS,CAAC/C,IAAI,CAACgD,OAAO,CAACH,YAAY,CAAC,EAAE;IAAEI,SAAS,EAAE;EAAK,CAAC,CAAC;EAC7DlD,EAAE,CAACmD,aAAa,CACdL,YAAY,EACZM,IAAI,CAACC,SAAS,CAACd,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAC3C,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"FoundryWidgetBuildPlugin.js","names":["autoVersion","loadFoundryConfig","MANIFEST_FILE_LOCATION","fs","path","createServer","BUILD_PLUGIN_ID","MODULE_EVALUATION_MODE","getInputHtmlEntrypoints","buildWidgetSetManifest","getWidgetBuildOutputs","getWidgetSetInputSpec","FoundryWidgetBuildPlugin","options","htmlEntrypoints","config","name","enforce","apply","buildStart","configResolved","_config","writeBundle","_","bundle","foundryConfig","Error","server","createModuleEvaluationServer","widgetSetVersion","computeWidgetSetVersion","widgetBuilds","Promise","all","map","input","build","outDir","widgetSetInputSpec","resolve","process","cwd","widgetSetManifest","widgetSet","rid","writeManifest","close","configFile","mode","manifestPath","join","mkdirSync","dirname","recursive","writeFileSync","JSON","stringify"],"sources":["FoundryWidgetBuildPlugin.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { LoadedFoundryConfig } from \"@osdk/foundry-config-json\";\nimport { autoVersion, loadFoundryConfig } from \"@osdk/foundry-config-json\";\nimport type { WidgetSetManifest } from \"@osdk/widget.api\";\nimport { MANIFEST_FILE_LOCATION } from \"@osdk/widget.api\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport type { Plugin, ResolvedConfig, ViteDevServer } from \"vite\";\nimport { createServer } from \"vite\";\nimport {\n BUILD_PLUGIN_ID,\n MODULE_EVALUATION_MODE,\n} from \"../common/constants.js\";\nimport { getInputHtmlEntrypoints } from \"../common/getInputHtmlEntrypoints.js\";\nimport type { FoundryWidgetPluginOptions } from \"../index.js\";\nimport { buildWidgetSetManifest } from \"./buildWidgetSetManifest.js\";\nimport { getWidgetBuildOutputs } from \"./getWidgetBuildOutputs.js\";\nimport { getWidgetSetInputSpec } from \"./getWidgetSetInputSpec.js\";\n\nexport function FoundryWidgetBuildPlugin(\n options?: FoundryWidgetPluginOptions,\n): Plugin {\n // The root HTML entrypoints of the build process\n let htmlEntrypoints: string[];\n // Store the resolved Vite config for use in later build steps\n let config: ResolvedConfig;\n\n return {\n name: BUILD_PLUGIN_ID,\n enforce: \"pre\",\n // Only apply this plugin during build\n apply: \"build\",\n\n /**\n * Capture the entrypoints from the Vite config for use in later build steps.\n */\n buildStart(options) {\n htmlEntrypoints = getInputHtmlEntrypoints(options);\n },\n\n /**\n * Store the resolved Vite config for use in later build steps.\n */\n configResolved(_config) {\n config = _config;\n },\n\n /**\n * Once the build is complete, generate the widget set manifest based on the entrypoints and\n * configuration files that were found.\n *\n * Write the manifest to the expected location in the dist directory.\n */\n async writeBundle(_, bundle) {\n const foundryConfig = await loadFoundryConfig(\"widgetSet\");\n if (foundryConfig == null) {\n throw new Error(\"foundry.config.json file not found.\");\n }\n\n // Create a Vite server to evaluate widget config modules\n const server = await createModuleEvaluationServer(config);\n\n try {\n // Build widget set manifest\n const widgetSetVersion = await computeWidgetSetVersion(foundryConfig);\n const widgetBuilds = await Promise.all(\n htmlEntrypoints.map((input) =>\n getWidgetBuildOutputs(\n bundle,\n input,\n config.build.outDir,\n server,\n )\n ),\n );\n const widgetSetInputSpec = await getWidgetSetInputSpec(\n path.resolve(process.cwd(), \"package.json\"),\n );\n const widgetSetManifest = buildWidgetSetManifest(\n foundryConfig.foundryConfig.widgetSet.rid,\n widgetSetVersion,\n widgetBuilds,\n widgetSetInputSpec,\n options,\n );\n\n // Write the manifest to the dist directory\n writeManifest(widgetSetManifest, config.build.outDir);\n } finally {\n await server.close();\n }\n },\n };\n}\n\n/**\n * Create a Vite server for widget config module evaluation during the build process.\n * Must prevent loading the dev plugin to avoid triggering dev mode build steps.\n */\nasync function createModuleEvaluationServer(\n config: ResolvedConfig,\n): Promise<ViteDevServer> {\n return await createServer({\n // Reference the existing config file in order to respect any custom config\n configFile: config.configFile,\n // Custom mode to prevent dev plugin execution\n mode: MODULE_EVALUATION_MODE,\n });\n}\n\nasync function computeWidgetSetVersion(\n foundryConfig: LoadedFoundryConfig<\"widgetSet\">,\n): Promise<string> {\n return autoVersion(\n foundryConfig.foundryConfig.widgetSet.autoVersion\n ?? { \"type\": \"package-json\" },\n );\n}\n\nfunction writeManifest(\n widgetSetManifest: WidgetSetManifest,\n outDir: string,\n): void {\n const manifestPath = path.join(outDir, MANIFEST_FILE_LOCATION);\n fs.mkdirSync(path.dirname(manifestPath), { recursive: true });\n fs.writeFileSync(\n manifestPath,\n JSON.stringify(widgetSetManifest, null, 2),\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,19 +15,19 @@
15
15
  */
16
16
 
17
17
  import { validateWidgetSet } from "./validateWidgetSet.js";
18
- export function buildWidgetSetManifest(widgetSetRid, widgetSetVersion, widgetBuilds, widgetSetInputSpec) {
18
+ export function buildWidgetSetManifest(widgetSetRid, widgetSetVersion, widgetBuilds, widgetSetInputSpec, pluginOptions) {
19
19
  validateWidgetSet(widgetBuilds);
20
20
  return {
21
21
  manifestVersion: "1.0.0",
22
22
  widgetSet: {
23
23
  rid: widgetSetRid,
24
24
  version: widgetSetVersion,
25
- widgets: Object.fromEntries(widgetBuilds.map(buildWidgetManifest).map(widgetManifest => [widgetManifest.id, widgetManifest])),
25
+ widgets: Object.fromEntries(widgetBuilds.map(build => buildWidgetManifest(build, pluginOptions)).map(widgetManifest => [widgetManifest.id, widgetManifest])),
26
26
  inputSpec: widgetSetInputSpec
27
27
  }
28
28
  };
29
29
  }
30
- function buildWidgetManifest(widgetBuild) {
30
+ function buildWidgetManifest(widgetBuild, pluginOptions) {
31
31
  const widgetConfig = widgetBuild.widgetConfig;
32
32
  return {
33
33
  id: widgetConfig.id,
@@ -43,7 +43,8 @@ function buildWidgetManifest(widgetBuild) {
43
43
  })),
44
44
  parameters: convertParameters(widgetConfig.parameters),
45
45
  events: widgetConfig.events,
46
- permissions: widgetConfig.permissions
46
+ permissions: widgetConfig.permissions,
47
+ refreshHostDataOnAction: widgetConfig.refreshHostDataOnAction ?? pluginOptions?.defaults?.refreshHostDataOnAction
47
48
  };
48
49
  }
49
50
  function convertParameters(parameters) {
@@ -1 +1 @@
1
- {"version":3,"file":"buildWidgetSetManifest.js","names":["validateWidgetSet","buildWidgetSetManifest","widgetSetRid","widgetSetVersion","widgetBuilds","widgetSetInputSpec","manifestVersion","widgetSet","rid","version","widgets","Object","fromEntries","map","buildWidgetManifest","widgetManifest","id","inputSpec","widgetBuild","widgetConfig","name","description","type","entrypointJs","scripts","script","path","trimLeadingSlash","src","scriptType","entrypointCss","stylesheets","parameters","convertParameters","events","permissions","entries","key","param","convertParameter","parameter","allowedType","internalDoNotUseMetadata","Error","displayName","objectTypeRids","startsWith","slice"],"sources":["buildWidgetSetManifest.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ManifestParameterDefinition,\n ParameterDefinition,\n WidgetManifestConfig,\n WidgetSetInputSpec,\n WidgetSetManifest,\n} from \"@osdk/widget.api\";\nimport type { WidgetBuildOutputs } from \"./getWidgetBuildOutputs.js\";\nimport { validateWidgetSet } from \"./validateWidgetSet.js\";\n\nexport function buildWidgetSetManifest(\n widgetSetRid: string,\n widgetSetVersion: string,\n widgetBuilds: WidgetBuildOutputs[],\n widgetSetInputSpec: WidgetSetInputSpec,\n): WidgetSetManifest {\n validateWidgetSet(widgetBuilds);\n return {\n manifestVersion: \"1.0.0\",\n widgetSet: {\n rid: widgetSetRid,\n version: widgetSetVersion,\n widgets: Object.fromEntries(\n widgetBuilds\n .map(buildWidgetManifest)\n .map((widgetManifest) => [widgetManifest.id, widgetManifest]),\n ),\n inputSpec: widgetSetInputSpec,\n },\n };\n}\n\nfunction buildWidgetManifest(\n widgetBuild: WidgetBuildOutputs,\n): WidgetManifestConfig {\n const widgetConfig = widgetBuild.widgetConfig;\n return {\n id: widgetConfig.id,\n name: widgetConfig.name,\n description: widgetConfig.description,\n type: \"workshopWidgetV1\",\n entrypointJs: widgetBuild.scripts.map((script) => ({\n path: trimLeadingSlash(script.src),\n type: script.scriptType,\n })),\n entrypointCss: widgetBuild.stylesheets.map((path) => ({\n path: trimLeadingSlash(path),\n })),\n parameters: convertParameters(widgetConfig.parameters),\n events: widgetConfig.events,\n permissions: widgetConfig.permissions,\n };\n}\n\nfunction convertParameters(\n parameters: Record<string, ParameterDefinition>,\n): Record<string, ManifestParameterDefinition> {\n return Object.fromEntries(\n Object.entries(parameters).map(([key, param]) => [\n key,\n convertParameter(param),\n ]),\n );\n}\n\nfunction convertParameter(\n parameter: ParameterDefinition,\n): ManifestParameterDefinition {\n if (parameter.type === \"objectSet\") {\n // Config has already been validated so rid must be present\n if (parameter.allowedType.internalDoNotUseMetadata == null) {\n throw new Error(\"Expected internal metadata to be present\");\n }\n return {\n type: \"objectSet\",\n displayName: parameter.displayName,\n objectTypeRids: parameter.allowedType.type === \"object\"\n ? [parameter.allowedType.internalDoNotUseMetadata.rid]\n : [],\n allowedType: parameter.allowedType.internalDoNotUseMetadata.rid,\n };\n }\n return parameter;\n}\n\nfunction trimLeadingSlash(path: string): string {\n return path.startsWith(\"/\") ? path.slice(1) : path;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA,SAASA,iBAAiB,QAAQ,wBAAwB;AAE1D,OAAO,SAASC,sBAAsBA,CACpCC,YAAoB,EACpBC,gBAAwB,EACxBC,YAAkC,EAClCC,kBAAsC,EACnB;EACnBL,iBAAiB,CAACI,YAAY,CAAC;EAC/B,OAAO;IACLE,eAAe,EAAE,OAAO;IACxBC,SAAS,EAAE;MACTC,GAAG,EAAEN,YAAY;MACjBO,OAAO,EAAEN,gBAAgB;MACzBO,OAAO,EAAEC,MAAM,CAACC,WAAW,CACzBR,YAAY,CACTS,GAAG,CAACC,mBAAmB,CAAC,CACxBD,GAAG,CAAEE,cAAc,IAAK,CAACA,cAAc,CAACC,EAAE,EAAED,cAAc,CAAC,CAChE,CAAC;MACDE,SAAS,EAAEZ;IACb;EACF,CAAC;AACH;AAEA,SAASS,mBAAmBA,CAC1BI,WAA+B,EACT;EACtB,MAAMC,YAAY,GAAGD,WAAW,CAACC,YAAY;EAC7C,OAAO;IACLH,EAAE,EAAEG,YAAY,CAACH,EAAE;IACnBI,IAAI,EAAED,YAAY,CAACC,IAAI;IACvBC,WAAW,EAAEF,YAAY,CAACE,WAAW;IACrCC,IAAI,EAAE,kBAAkB;IACxBC,YAAY,EAAEL,WAAW,CAACM,OAAO,CAACX,GAAG,CAAEY,MAAM,KAAM;MACjDC,IAAI,EAAEC,gBAAgB,CAACF,MAAM,CAACG,GAAG,CAAC;MAClCN,IAAI,EAAEG,MAAM,CAACI;IACf,CAAC,CAAC,CAAC;IACHC,aAAa,EAAEZ,WAAW,CAACa,WAAW,CAAClB,GAAG,CAAEa,IAAI,KAAM;MACpDA,IAAI,EAAEC,gBAAgB,CAACD,IAAI;IAC7B,CAAC,CAAC,CAAC;IACHM,UAAU,EAAEC,iBAAiB,CAACd,YAAY,CAACa,UAAU,CAAC;IACtDE,MAAM,EAAEf,YAAY,CAACe,MAAM;IAC3BC,WAAW,EAAEhB,YAAY,CAACgB;EAC5B,CAAC;AACH;AAEA,SAASF,iBAAiBA,CACxBD,UAA+C,EACF;EAC7C,OAAOrB,MAAM,CAACC,WAAW,CACvBD,MAAM,CAACyB,OAAO,CAACJ,UAAU,CAAC,CAACnB,GAAG,CAAC,CAAC,CAACwB,GAAG,EAAEC,KAAK,CAAC,KAAK,CAC/CD,GAAG,EACHE,gBAAgB,CAACD,KAAK,CAAC,CACxB,CACH,CAAC;AACH;AAEA,SAASC,gBAAgBA,CACvBC,SAA8B,EACD;EAC7B,IAAIA,SAAS,CAAClB,IAAI,KAAK,WAAW,EAAE;IAClC;IACA,IAAIkB,SAAS,CAACC,WAAW,CAACC,wBAAwB,IAAI,IAAI,EAAE;MAC1D,MAAM,IAAIC,KAAK,CAAC,0CAA0C,CAAC;IAC7D;IACA,OAAO;MACLrB,IAAI,EAAE,WAAW;MACjBsB,WAAW,EAAEJ,SAAS,CAACI,WAAW;MAClCC,cAAc,EAAEL,SAAS,CAACC,WAAW,CAACnB,IAAI,KAAK,QAAQ,GACnD,CAACkB,SAAS,CAACC,WAAW,CAACC,wBAAwB,CAAClC,GAAG,CAAC,GACpD,EAAE;MACNiC,WAAW,EAAED,SAAS,CAACC,WAAW,CAACC,wBAAwB,CAAClC;IAC9D,CAAC;EACH;EACA,OAAOgC,SAAS;AAClB;AAEA,SAASb,gBAAgBA,CAACD,IAAY,EAAU;EAC9C,OAAOA,IAAI,CAACoB,UAAU,CAAC,GAAG,CAAC,GAAGpB,IAAI,CAACqB,KAAK,CAAC,CAAC,CAAC,GAAGrB,IAAI;AACpD","ignoreList":[]}
1
+ {"version":3,"file":"buildWidgetSetManifest.js","names":["validateWidgetSet","buildWidgetSetManifest","widgetSetRid","widgetSetVersion","widgetBuilds","widgetSetInputSpec","pluginOptions","manifestVersion","widgetSet","rid","version","widgets","Object","fromEntries","map","build","buildWidgetManifest","widgetManifest","id","inputSpec","widgetBuild","widgetConfig","name","description","type","entrypointJs","scripts","script","path","trimLeadingSlash","src","scriptType","entrypointCss","stylesheets","parameters","convertParameters","events","permissions","refreshHostDataOnAction","defaults","entries","key","param","convertParameter","parameter","allowedType","internalDoNotUseMetadata","Error","displayName","objectTypeRids","startsWith","slice"],"sources":["buildWidgetSetManifest.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ManifestParameterDefinition,\n ParameterDefinition,\n WidgetManifestConfig,\n WidgetSetInputSpec,\n WidgetSetManifest,\n} from \"@osdk/widget.api\";\nimport type { FoundryWidgetPluginOptions } from \"../index.js\";\nimport type { WidgetBuildOutputs } from \"./getWidgetBuildOutputs.js\";\nimport { validateWidgetSet } from \"./validateWidgetSet.js\";\n\nexport function buildWidgetSetManifest(\n widgetSetRid: string,\n widgetSetVersion: string,\n widgetBuilds: WidgetBuildOutputs[],\n widgetSetInputSpec: WidgetSetInputSpec,\n pluginOptions?: FoundryWidgetPluginOptions,\n): WidgetSetManifest {\n validateWidgetSet(widgetBuilds);\n return {\n manifestVersion: \"1.0.0\",\n widgetSet: {\n rid: widgetSetRid,\n version: widgetSetVersion,\n widgets: Object.fromEntries(\n widgetBuilds\n .map((build) => buildWidgetManifest(build, pluginOptions))\n .map((widgetManifest) => [widgetManifest.id, widgetManifest]),\n ),\n inputSpec: widgetSetInputSpec,\n },\n };\n}\n\nfunction buildWidgetManifest(\n widgetBuild: WidgetBuildOutputs,\n pluginOptions?: FoundryWidgetPluginOptions,\n): WidgetManifestConfig {\n const widgetConfig = widgetBuild.widgetConfig;\n return {\n id: widgetConfig.id,\n name: widgetConfig.name,\n description: widgetConfig.description,\n type: \"workshopWidgetV1\",\n entrypointJs: widgetBuild.scripts.map((script) => ({\n path: trimLeadingSlash(script.src),\n type: script.scriptType,\n })),\n entrypointCss: widgetBuild.stylesheets.map((path) => ({\n path: trimLeadingSlash(path),\n })),\n parameters: convertParameters(widgetConfig.parameters),\n events: widgetConfig.events,\n permissions: widgetConfig.permissions,\n refreshHostDataOnAction: widgetConfig.refreshHostDataOnAction\n ?? pluginOptions?.defaults?.refreshHostDataOnAction,\n };\n}\n\nfunction convertParameters(\n parameters: Record<string, ParameterDefinition>,\n): Record<string, ManifestParameterDefinition> {\n return Object.fromEntries(\n Object.entries(parameters).map(([key, param]) => [\n key,\n convertParameter(param),\n ]),\n );\n}\n\nfunction convertParameter(\n parameter: ParameterDefinition,\n): ManifestParameterDefinition {\n if (parameter.type === \"objectSet\") {\n // Config has already been validated so rid must be present\n if (parameter.allowedType.internalDoNotUseMetadata == null) {\n throw new Error(\"Expected internal metadata to be present\");\n }\n return {\n type: \"objectSet\",\n displayName: parameter.displayName,\n objectTypeRids: parameter.allowedType.type === \"object\"\n ? [parameter.allowedType.internalDoNotUseMetadata.rid]\n : [],\n allowedType: parameter.allowedType.internalDoNotUseMetadata.rid,\n };\n }\n return parameter;\n}\n\nfunction trimLeadingSlash(path: string): string {\n return path.startsWith(\"/\") ? path.slice(1) : path;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { FoundryWidgetBuildPlugin } from "./build-plugin/FoundryWidgetBuildPlugin.js";
18
18
  import { FoundryWidgetDevPlugin } from "./dev-plugin/FoundryWidgetDevPlugin.js";
19
- export default function FoundryWidgetPlugin() {
20
- return [FoundryWidgetDevPlugin(), FoundryWidgetBuildPlugin()];
19
+ export default function FoundryWidgetPlugin(options) {
20
+ return [FoundryWidgetDevPlugin(), FoundryWidgetBuildPlugin(options)];
21
21
  }
22
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FoundryWidgetBuildPlugin","FoundryWidgetDevPlugin","FoundryWidgetPlugin"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PluginOption } from \"vite\";\nimport { FoundryWidgetBuildPlugin } from \"./build-plugin/FoundryWidgetBuildPlugin.js\";\nimport { FoundryWidgetDevPlugin } from \"./dev-plugin/FoundryWidgetDevPlugin.js\";\n\nexport default function FoundryWidgetPlugin(): PluginOption {\n return [FoundryWidgetDevPlugin(), FoundryWidgetBuildPlugin()];\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,wBAAwB,QAAQ,4CAA4C;AACrF,SAASC,sBAAsB,QAAQ,wCAAwC;AAE/E,eAAe,SAASC,mBAAmBA,CAAA,EAAiB;EAC1D,OAAO,CAACD,sBAAsB,CAAC,CAAC,EAAED,wBAAwB,CAAC,CAAC,CAAC;AAC/D","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["FoundryWidgetBuildPlugin","FoundryWidgetDevPlugin","FoundryWidgetPlugin","options"],"sources":["index.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PluginOption } from \"vite\";\nimport { FoundryWidgetBuildPlugin } from \"./build-plugin/FoundryWidgetBuildPlugin.js\";\nimport { FoundryWidgetDevPlugin } from \"./dev-plugin/FoundryWidgetDevPlugin.js\";\n\nexport interface FoundryWidgetPluginOptions {\n /**\n * Default values for widget configuration. Individual widget configs can override these values.\n */\n defaults?: {\n /**\n * When set to `true`, the host will refresh any Ontology data passed to the widget\n * when the widget is thought to have updated the Ontology by applying an action.\n */\n refreshHostDataOnAction?: boolean;\n };\n}\n\nexport default function FoundryWidgetPlugin(\n options?: FoundryWidgetPluginOptions,\n): PluginOption {\n return [FoundryWidgetDevPlugin(), FoundryWidgetBuildPlugin(options)];\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,wBAAwB,QAAQ,4CAA4C;AACrF,SAASC,sBAAsB,QAAQ,wCAAwC;AAe/E,eAAe,SAASC,mBAAmBA,CACzCC,OAAoC,EACtB;EACd,OAAO,CAACF,sBAAsB,CAAC,CAAC,EAAED,wBAAwB,CAACG,OAAO,CAAC,CAAC;AACtE","ignoreList":[]}
@@ -1,2 +1,3 @@
1
1
  import type { Plugin } from "vite";
2
- export declare function FoundryWidgetBuildPlugin(): Plugin;
2
+ import type { FoundryWidgetPluginOptions } from "../index.js";
3
+ export declare function FoundryWidgetBuildPlugin(options?: FoundryWidgetPluginOptions): Plugin;
@@ -1 +1 @@
1
- {"mappings":"AAsBA,cAAc,cAA6C,MAAO;AAWlE,OAAO,iBAAS,4BAA4B","names":[],"sources":["../../../src/build-plugin/FoundryWidgetBuildPlugin.ts"],"version":3,"file":"FoundryWidgetBuildPlugin.d.ts"}
1
+ {"mappings":"AAsBA,cAAc,cAA6C,MAAO;AAOlE,cAAc,kCAAkC,aAAc;AAK9D,OAAO,iBAAS,yBACdA,UAAU,6BACT","names":["options?: FoundryWidgetPluginOptions"],"sources":["../../../src/build-plugin/FoundryWidgetBuildPlugin.ts"],"version":3,"file":"FoundryWidgetBuildPlugin.d.ts"}
@@ -1,3 +1,4 @@
1
1
  import type { WidgetSetInputSpec, WidgetSetManifest } from "@osdk/widget.api";
2
+ import type { FoundryWidgetPluginOptions } from "../index.js";
2
3
  import type { WidgetBuildOutputs } from "./getWidgetBuildOutputs.js";
3
- export declare function buildWidgetSetManifest(widgetSetRid: string, widgetSetVersion: string, widgetBuilds: WidgetBuildOutputs[], widgetSetInputSpec: WidgetSetInputSpec): WidgetSetManifest;
4
+ export declare function buildWidgetSetManifest(widgetSetRid: string, widgetSetVersion: string, widgetBuilds: WidgetBuildOutputs[], widgetSetInputSpec: WidgetSetInputSpec, pluginOptions?: FoundryWidgetPluginOptions): WidgetSetManifest;
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAIE,oBACA,yBACK,kBAAmB;AAC1B,cAAc,0BAA0B,4BAA6B;AAGrE,OAAO,iBAAS,uBACdA,sBACAC,0BACAC,cAAc,sBACdC,oBAAoB,qBACnB","names":["widgetSetRid: string","widgetSetVersion: string","widgetBuilds: WidgetBuildOutputs[]","widgetSetInputSpec: WidgetSetInputSpec"],"sources":["../../../src/build-plugin/buildWidgetSetManifest.ts"],"version":3,"file":"buildWidgetSetManifest.d.ts"}
1
+ {"mappings":"AAgBA,cAIE,oBACA,yBACK,kBAAmB;AAC1B,cAAc,kCAAkC,aAAc;AAC9D,cAAc,0BAA0B,4BAA6B;AAGrE,OAAO,iBAAS,uBACdA,sBACAC,0BACAC,cAAc,sBACdC,oBAAoB,oBACpBC,gBAAgB,6BACf","names":["widgetSetRid: string","widgetSetVersion: string","widgetBuilds: WidgetBuildOutputs[]","widgetSetInputSpec: WidgetSetInputSpec","pluginOptions?: FoundryWidgetPluginOptions"],"sources":["../../../src/build-plugin/buildWidgetSetManifest.ts"],"version":3,"file":"buildWidgetSetManifest.d.ts"}
@@ -1,2 +1,14 @@
1
1
  import type { PluginOption } from "vite";
2
- export default function FoundryWidgetPlugin(): PluginOption;
2
+ export interface FoundryWidgetPluginOptions {
3
+ /**
4
+ * Default values for widget configuration. Individual widget configs can override these values.
5
+ */
6
+ defaults?: {
7
+ /**
8
+ * When set to `true`, the host will refresh any Ontology data passed to the widget
9
+ * when the widget is thought to have updated the Ontology by applying an action.
10
+ */
11
+ refreshHostDataOnAction?: boolean
12
+ };
13
+ }
14
+ export default function FoundryWidgetPlugin(options?: FoundryWidgetPluginOptions): PluginOption;
@@ -1 +1 @@
1
- {"mappings":"AAgBA,cAAc,oBAAoB,MAAO;eAI1B,SAAS,uBAAuB","names":[],"sources":["../../src/index.ts"],"version":3,"file":"index.d.ts"}
1
+ {"mappings":"AAgBA,cAAc,oBAAoB,MAAO;AAIzC,iBAAiB,2BAA2B;;;;CAI1C,WAAW;;;;;EAKT;CACD;AACF;eAEc,SAAS,oBACtBA,UAAU,6BACT","names":["options?: FoundryWidgetPluginOptions"],"sources":["../../src/index.ts"],"version":3,"file":"index.d.ts"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/widget.vite-plugin",
3
- "version": "3.5.0-beta.8",
3
+ "version": "3.5.0",
4
4
  "description": "A vite plugin that will extract parameter definitions from TS/JS files + entrypoint info into a manifest file to be uploaded to Foundry ",
5
5
  "access": "public",
6
6
  "license": "Apache-2.0",
@@ -30,11 +30,11 @@
30
30
  "picocolors": "^1.1.1",
31
31
  "resolve-package-path": "^4.0.3",
32
32
  "sirv": "^3.0.2",
33
- "@osdk/foundry-config-json": "~1.7.0-beta.1",
34
- "@osdk/widget.api": "~3.5.0-beta.8"
33
+ "@osdk/foundry-config-json": "~1.7.0",
34
+ "@osdk/widget.api": "~3.5.0"
35
35
  },
36
36
  "peerDependencies": {
37
- "vite": "^7.3.1"
37
+ "vite": "^6.3.6 || ^7.3.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@blueprintjs/core": "^5.19.1",
@@ -49,8 +49,8 @@
49
49
  "typescript": "~5.5.4",
50
50
  "vite": "^7.3.1",
51
51
  "vitest": "^3.2.4",
52
- "@osdk/monorepo.api-extractor": "~0.7.0-beta.1",
53
- "@osdk/monorepo.tsconfig": "~0.7.0-beta.1"
52
+ "@osdk/monorepo.tsconfig": "~0.7.0",
53
+ "@osdk/monorepo.api-extractor": "~0.7.0"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
@@ -1,186 +0,0 @@
1
- /*
2
- * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import { describe, expect, test } from "vitest";
18
- import { buildWidgetSetManifest } from "../buildWidgetSetManifest.js";
19
- describe("buildWidgetSetManifest", () => {
20
- const WIDGET_SET_RID = "ri.widgetregistry..widget-set.test-widget-set";
21
- const WIDGET_SET_VERSION = "1.0.0";
22
- test("builds a valid manifest with multiple widgets", () => {
23
- const widgetBuilds = [createMockWidgetBuild("widgetOne"), createMockWidgetBuild("widgetTwo")];
24
- const widgetSetInputSpec = {
25
- discovered: {
26
- sdks: [{
27
- rid: "ri.foundry.main.sdk.test-sdk",
28
- version: "2.0.0"
29
- }]
30
- }
31
- };
32
- const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, widgetBuilds, widgetSetInputSpec);
33
- expect(manifest).toEqual({
34
- manifestVersion: "1.0.0",
35
- widgetSet: {
36
- rid: WIDGET_SET_RID,
37
- version: WIDGET_SET_VERSION,
38
- widgets: {
39
- widgetOne: {
40
- id: "widgetOne",
41
- name: "Widget widgetOne",
42
- description: "Widget widgetOne Description",
43
- type: "workshopWidgetV1",
44
- entrypointJs: [{
45
- path: "scripts/widgetOne.js",
46
- type: "module"
47
- }],
48
- entrypointCss: [{
49
- path: "styles/widgetOne.css"
50
- }],
51
- parameters: {
52
- stringParam: {
53
- type: "string",
54
- displayName: "String Parameter"
55
- }
56
- },
57
- events: {
58
- updateParameters: {
59
- displayName: "Update Parameters",
60
- parameterUpdateIds: ["stringParam"]
61
- }
62
- },
63
- permissions: ["camera"]
64
- },
65
- widgetTwo: {
66
- id: "widgetTwo",
67
- name: "Widget widgetTwo",
68
- description: "Widget widgetTwo Description",
69
- type: "workshopWidgetV1",
70
- entrypointJs: [{
71
- path: "scripts/widgetTwo.js",
72
- type: "module"
73
- }],
74
- entrypointCss: [{
75
- path: "styles/widgetTwo.css"
76
- }],
77
- parameters: {
78
- stringParam: {
79
- type: "string",
80
- displayName: "String Parameter"
81
- }
82
- },
83
- events: {
84
- updateParameters: {
85
- displayName: "Update Parameters",
86
- parameterUpdateIds: ["stringParam"]
87
- }
88
- },
89
- permissions: ["camera"]
90
- }
91
- },
92
- inputSpec: widgetSetInputSpec
93
- }
94
- });
95
- });
96
- test("converts object set parameters correctly", () => {
97
- const widgetBuild = createMockWidgetBuild("widget", {
98
- objectSetParam: {
99
- type: "objectSet",
100
- displayName: "Object Set Parameter",
101
- allowedType: {
102
- type: "object",
103
- apiName: "employee",
104
- internalDoNotUseMetadata: {
105
- rid: "ri.ontology.main.object-type.employee"
106
- }
107
- }
108
- }
109
- });
110
- const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
111
- expect(manifest.widgetSet.widgets.widget.parameters.objectSetParam).toEqual({
112
- type: "objectSet",
113
- displayName: "Object Set Parameter",
114
- objectTypeRids: ["ri.ontology.main.object-type.employee"],
115
- allowedType: "ri.ontology.main.object-type.employee"
116
- });
117
- });
118
- test("converts interface set parameters correctly", () => {
119
- const widgetBuild = createMockWidgetBuild("widget", {
120
- interfaceSetParam: {
121
- type: "objectSet",
122
- displayName: "Interface Set Parameter",
123
- allowedType: {
124
- type: "interface",
125
- apiName: "MyInterface",
126
- internalDoNotUseMetadata: {
127
- rid: "ri.ontology.main.interface.my-interface"
128
- }
129
- }
130
- }
131
- });
132
- const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
133
- expect(manifest.widgetSet.widgets.widget.parameters.interfaceSetParam).toEqual({
134
- type: "objectSet",
135
- displayName: "Interface Set Parameter",
136
- objectTypeRids: [],
137
- allowedType: "ri.ontology.main.interface.my-interface"
138
- });
139
- });
140
- test("trims leading slashes from paths", () => {
141
- const widgetBuild = createMockWidgetBuild("widget", undefined, ["/scripts/widget.js"], ["/styles/widget.css"]);
142
- const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
143
- expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe("scripts/widget.js");
144
- expect(manifest.widgetSet.widgets.widget.entrypointCss[0].path).toBe("styles/widget.css");
145
- });
146
- test("handles paths without leading slashes", () => {
147
- const widgetBuild = createMockWidgetBuild("widget", undefined, ["scripts/widget.js"], ["styles/widget.css"]);
148
- const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
149
- expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe("scripts/widget.js");
150
- expect(manifest.widgetSet.widgets.widget.entrypointCss[0].path).toBe("styles/widget.css");
151
- });
152
- });
153
- function createMockWidgetBuild(id, parameters = {
154
- stringParam: {
155
- type: "string",
156
- displayName: "String Parameter"
157
- }
158
- }, scripts, stylesheets) {
159
- return {
160
- scripts: scripts?.map(src => ({
161
- type: "script",
162
- scriptType: "module",
163
- src
164
- })) ?? [{
165
- type: "script",
166
- scriptType: "module",
167
- src: `/scripts/${id}.js`
168
- }],
169
- stylesheets: stylesheets ?? [`/styles/${id}.css`],
170
- widgetConfig: {
171
- id,
172
- name: `Widget ${id}`,
173
- description: `Widget ${id} Description`,
174
- type: "workshop",
175
- parameters,
176
- events: {
177
- updateParameters: {
178
- displayName: "Update Parameters",
179
- parameterUpdateIds: ["stringParam"]
180
- }
181
- },
182
- permissions: ["camera"]
183
- }
184
- };
185
- }
186
- //# sourceMappingURL=buildWidgetSetManifest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildWidgetSetManifest.test.js","names":["describe","expect","test","buildWidgetSetManifest","WIDGET_SET_RID","WIDGET_SET_VERSION","widgetBuilds","createMockWidgetBuild","widgetSetInputSpec","discovered","sdks","rid","version","manifest","toEqual","manifestVersion","widgetSet","widgets","widgetOne","id","name","description","type","entrypointJs","path","entrypointCss","parameters","stringParam","displayName","events","updateParameters","parameterUpdateIds","permissions","widgetTwo","inputSpec","widgetBuild","objectSetParam","allowedType","apiName","internalDoNotUseMetadata","widget","objectTypeRids","interfaceSetParam","undefined","toBe","scripts","stylesheets","map","src","scriptType","widgetConfig"],"sources":["buildWidgetSetManifest.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ParameterDefinition, WidgetSetInputSpec } from \"@osdk/widget.api\";\nimport { describe, expect, test } from \"vitest\";\nimport { buildWidgetSetManifest } from \"../buildWidgetSetManifest.js\";\nimport type { WidgetBuildOutputs } from \"../getWidgetBuildOutputs.js\";\n\ndescribe(\"buildWidgetSetManifest\", () => {\n const WIDGET_SET_RID = \"ri.widgetregistry..widget-set.test-widget-set\";\n const WIDGET_SET_VERSION = \"1.0.0\";\n\n test(\"builds a valid manifest with multiple widgets\", () => {\n const widgetBuilds: WidgetBuildOutputs[] = [\n createMockWidgetBuild(\"widgetOne\"),\n createMockWidgetBuild(\"widgetTwo\"),\n ];\n\n const widgetSetInputSpec: WidgetSetInputSpec = {\n discovered: {\n sdks: [\n {\n rid: \"ri.foundry.main.sdk.test-sdk\",\n version: \"2.0.0\",\n },\n ],\n },\n };\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest).toEqual({\n manifestVersion: \"1.0.0\",\n widgetSet: {\n rid: WIDGET_SET_RID,\n version: WIDGET_SET_VERSION,\n widgets: {\n widgetOne: {\n id: \"widgetOne\",\n name: \"Widget widgetOne\",\n description: \"Widget widgetOne Description\",\n type: \"workshopWidgetV1\",\n entrypointJs: [\n { path: \"scripts/widgetOne.js\", type: \"module\" },\n ],\n entrypointCss: [\n { path: \"styles/widgetOne.css\" },\n ],\n parameters: {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n widgetTwo: {\n id: \"widgetTwo\",\n name: \"Widget widgetTwo\",\n description: \"Widget widgetTwo Description\",\n type: \"workshopWidgetV1\",\n entrypointJs: [\n { path: \"scripts/widgetTwo.js\", type: \"module\" },\n ],\n entrypointCss: [\n { path: \"styles/widgetTwo.css\" },\n ],\n parameters: {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n },\n inputSpec: widgetSetInputSpec,\n },\n });\n });\n\n test(\"converts object set parameters correctly\", () => {\n const widgetBuild = createMockWidgetBuild(\"widget\", {\n objectSetParam: {\n type: \"objectSet\",\n displayName: \"Object Set Parameter\",\n allowedType: {\n type: \"object\",\n apiName: \"employee\",\n internalDoNotUseMetadata: {\n rid: \"ri.ontology.main.object-type.employee\",\n },\n },\n },\n });\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.parameters.objectSetParam).toEqual(\n {\n type: \"objectSet\",\n displayName: \"Object Set Parameter\",\n objectTypeRids: [\"ri.ontology.main.object-type.employee\"],\n allowedType: \"ri.ontology.main.object-type.employee\",\n },\n );\n });\n\n test(\"converts interface set parameters correctly\", () => {\n const widgetBuild = createMockWidgetBuild(\"widget\", {\n interfaceSetParam: {\n type: \"objectSet\",\n displayName: \"Interface Set Parameter\",\n allowedType: {\n type: \"interface\",\n apiName: \"MyInterface\",\n internalDoNotUseMetadata: {\n rid: \"ri.ontology.main.interface.my-interface\",\n },\n },\n },\n });\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(\n manifest.widgetSet.widgets.widget.parameters.interfaceSetParam,\n ).toEqual({\n type: \"objectSet\",\n displayName: \"Interface Set Parameter\",\n objectTypeRids: [],\n allowedType: \"ri.ontology.main.interface.my-interface\",\n });\n });\n\n test(\"trims leading slashes from paths\", () => {\n const widgetBuild = createMockWidgetBuild(\n \"widget\",\n undefined,\n [\"/scripts/widget.js\"],\n [\"/styles/widget.css\"],\n );\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe(\n \"scripts/widget.js\",\n );\n expect(manifest.widgetSet.widgets.widget.entrypointCss![0].path).toBe(\n \"styles/widget.css\",\n );\n });\n\n test(\"handles paths without leading slashes\", () => {\n const widgetBuild = createMockWidgetBuild(\n \"widget\",\n undefined,\n [\"scripts/widget.js\"],\n [\"styles/widget.css\"],\n );\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe(\n \"scripts/widget.js\",\n );\n expect(manifest.widgetSet.widgets.widget.entrypointCss![0].path).toBe(\n \"styles/widget.css\",\n );\n });\n});\n\nfunction createMockWidgetBuild(\n id: string,\n parameters: Record<string, ParameterDefinition> = {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n scripts?: string[],\n stylesheets?: string[],\n): WidgetBuildOutputs {\n return {\n scripts: scripts?.map(src => ({\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src,\n }))\n ?? [\n {\n type: \"script\",\n scriptType: \"module\",\n src: `/scripts/${id}.js`,\n },\n ],\n stylesheets: stylesheets ?? [`/styles/${id}.css`],\n widgetConfig: {\n id,\n name: `Widget ${id}`,\n description: `Widget ${id} Description`,\n type: \"workshop\",\n parameters,\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}