@osdk/widget.vite-plugin 3.5.0-beta.2 → 3.5.0-beta.20

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 (90) hide show
  1. package/CHANGELOG.md +139 -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 +8 -6
  5. package/build/esm/build-plugin/buildWidgetSetManifest.js.map +1 -1
  6. package/build/esm/common/validateWidgetConfig.js +2 -2
  7. package/build/esm/common/validateWidgetConfig.js.map +1 -1
  8. package/build/esm/dev-plugin/FoundryWidgetDevPlugin.js +10 -0
  9. package/build/esm/dev-plugin/FoundryWidgetDevPlugin.js.map +1 -1
  10. package/build/esm/index.js +2 -2
  11. package/build/esm/index.js.map +1 -1
  12. package/build/site/assets/{allPaths-DIfrnzgS.js → allPaths-DQ44lpsR.js} +1 -1
  13. package/build/site/assets/{allPathsLoader-D2qNtTEN.js → allPathsLoader-DxfybG1q.js} +2 -2
  14. package/build/site/assets/index-BAmk2r3A.css +1 -0
  15. package/build/site/assets/index-y3oyBPN4.js +8 -0
  16. package/build/site/assets/{splitPathsBySizeLoader-CuGV5Hrn.js → splitPathsBySizeLoader-B7rF-lK3.js} +1 -1
  17. package/build/site/index.html +2 -2
  18. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts +2 -1
  19. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts.map +1 -1
  20. package/build/types/build-plugin/buildWidgetSetManifest.d.ts +2 -1
  21. package/build/types/build-plugin/buildWidgetSetManifest.d.ts.map +1 -1
  22. package/build/types/index.d.ts +13 -1
  23. package/build/types/index.d.ts.map +1 -1
  24. package/package.json +5 -5
  25. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js +0 -163
  26. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js.map +0 -1
  27. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js +0 -133
  28. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js.map +0 -1
  29. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js +0 -153
  30. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js.map +0 -1
  31. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js +0 -96
  32. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js.map +0 -1
  33. package/build/esm/build-plugin/__tests__/isConfigFile.test.js +0 -26
  34. package/build/esm/build-plugin/__tests__/isConfigFile.test.js.map +0 -1
  35. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js +0 -44
  36. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js.map +0 -1
  37. package/build/esm/common/__tests__/extractWidgetConfig.test.js +0 -95
  38. package/build/esm/common/__tests__/extractWidgetConfig.test.js.map +0 -1
  39. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js +0 -38
  40. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js.map +0 -1
  41. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js +0 -77
  42. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js.map +0 -1
  43. package/build/esm/common/__tests__/validateWidgetConfig.test.js +0 -136
  44. package/build/esm/common/__tests__/validateWidgetConfig.test.js.map +0 -1
  45. package/build/esm/common/__tests__/visitNpmPackages.test.js +0 -74
  46. package/build/esm/common/__tests__/visitNpmPackages.test.js.map +0 -1
  47. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js +0 -87
  48. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js.map +0 -1
  49. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js +0 -34
  50. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js.map +0 -1
  51. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js +0 -48
  52. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js.map +0 -1
  53. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js +0 -71
  54. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js.map +0 -1
  55. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js +0 -66
  56. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js.map +0 -1
  57. package/build/site/assets/index-7niI6nVb.css +0 -1
  58. package/build/site/assets/index-D6Sm-vP3.js +0 -44
  59. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts +0 -1
  60. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts.map +0 -1
  61. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts +0 -1
  62. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts.map +0 -1
  63. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts +0 -1
  64. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts.map +0 -1
  65. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts +0 -1
  66. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts.map +0 -1
  67. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts +0 -1
  68. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts.map +0 -1
  69. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts +0 -1
  70. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts.map +0 -1
  71. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts +0 -1
  72. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts.map +0 -1
  73. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts +0 -1
  74. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts.map +0 -1
  75. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts +0 -1
  76. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts.map +0 -1
  77. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts +0 -1
  78. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts.map +0 -1
  79. package/build/types/common/__tests__/visitNpmPackages.test.d.ts +0 -1
  80. package/build/types/common/__tests__/visitNpmPackages.test.d.ts.map +0 -1
  81. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts +0 -1
  82. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts.map +0 -1
  83. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts +0 -1
  84. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts.map +0 -1
  85. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts +0 -1
  86. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts.map +0 -1
  87. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts +0 -1
  88. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts.map +0 -1
  89. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts +0 -1
  90. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,144 @@
1
1
  # @osdk/widget.vite-plugin
2
2
 
3
+ ## 3.5.0-beta.20
4
+
5
+ ### Patch Changes
6
+
7
+ - @osdk/widget.api@3.5.0-beta.20
8
+
9
+ ## 3.5.0-beta.19
10
+
11
+ ### Patch Changes
12
+
13
+ - @osdk/widget.api@3.5.0-beta.19
14
+
15
+ ## 3.5.0-beta.18
16
+
17
+ ### Patch Changes
18
+
19
+ - @osdk/widget.api@3.5.0-beta.18
20
+
21
+ ## 3.5.0-beta.17
22
+
23
+ ### Patch Changes
24
+
25
+ - @osdk/widget.api@3.5.0-beta.17
26
+
27
+ ## 3.5.0-beta.16
28
+
29
+ ### Minor Changes
30
+
31
+ - 0ff602a: Bump vite to ^7.3.1
32
+
33
+ ### Patch Changes
34
+
35
+ - @osdk/widget.api@3.5.0-beta.16
36
+
37
+ ## 3.5.0-beta.15
38
+
39
+ ### Patch Changes
40
+
41
+ - @osdk/widget.api@3.5.0-beta.15
42
+
43
+ ## 3.5.0-beta.14
44
+
45
+ ### Minor Changes
46
+
47
+ - c22dcac: Bump @types/node to 24.10.13
48
+ - 35f2f1a: Add Media inputs/outputs for Queries
49
+ - 6260835: Revert node bump
50
+
51
+ ### Patch Changes
52
+
53
+ - Updated dependencies [35f2f1a]
54
+ - @osdk/foundry-config-json@1.7.0-beta.2
55
+ - @osdk/widget.api@3.5.0-beta.14
56
+
57
+ ## 3.5.0-beta.13
58
+
59
+ ### Minor Changes
60
+
61
+ - beb2867: Add refreshHostDataOnAction
62
+
63
+ ### Patch Changes
64
+
65
+ - Updated dependencies [beb2867]
66
+ - @osdk/widget.api@3.5.0-beta.13
67
+
68
+ ## 3.5.0-beta.12
69
+
70
+ ### Patch Changes
71
+
72
+ - @osdk/widget.api@3.5.0-beta.12
73
+
74
+ ## 3.5.0-beta.11
75
+
76
+ ### Patch Changes
77
+
78
+ - @osdk/widget.api@3.5.0-beta.11
79
+
80
+ ## 3.5.0-beta.10
81
+
82
+ ### Patch Changes
83
+
84
+ - @osdk/widget.api@3.5.0-beta.10
85
+
86
+ ## 3.5.0-beta.9
87
+
88
+ ### Patch Changes
89
+
90
+ - @osdk/widget.api@3.5.0-beta.9
91
+
92
+ ## 3.5.0-beta.8
93
+
94
+ ### Minor Changes
95
+
96
+ - 12dcb6a: Bump node and vite versions
97
+
98
+ ### Patch Changes
99
+
100
+ - @osdk/widget.api@3.5.0-beta.8
101
+
102
+ ## 3.5.0-beta.7
103
+
104
+ ### Patch Changes
105
+
106
+ - @osdk/widget.api@3.5.0-beta.7
107
+
108
+ ## 3.5.0-beta.6
109
+
110
+ ### Minor Changes
111
+
112
+ - de531ed: Handle HMR for widget config files
113
+
114
+ ### Patch Changes
115
+
116
+ - Updated dependencies [fad598c]
117
+ - @osdk/widget.api@3.5.0-beta.6
118
+
119
+ ## 3.5.0-beta.5
120
+
121
+ ### Patch Changes
122
+
123
+ - @osdk/widget.api@3.5.0-beta.5
124
+
125
+ ## 3.5.0-beta.4
126
+
127
+ ### Patch Changes
128
+
129
+ - @osdk/widget.api@3.5.0-beta.4
130
+
131
+ ## 3.5.0-beta.3
132
+
133
+ ### Minor Changes
134
+
135
+ - b9066dd: Support interfaces in object set parameters
136
+
137
+ ### Patch Changes
138
+
139
+ - Updated dependencies [b9066dd]
140
+ - @osdk/widget.api@3.5.0-beta.3
141
+
3
142
  ## 3.5.0-beta.2
4
143
 
5
144
  ### Patch 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":"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","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":"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;AAE9E,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,qBAAqB,QAAQ,4BAA4B;AAClE,SAASC,qBAAqB,QAAQ,4BAA4B;AAElE,OAAO,SAASC,wBAAwBA,CACtCC,OAAoC,EAC5B;EACR;EACA,IAAIC,eAAyB;EAC7B;EACA,IAAIC,MAAsB;EAE1B,OAAO;IACLC,IAAI,EAAEV,eAAe;IACrBW,OAAO,EAAE,KAAK;IACd;IACAC,KAAK,EAAE,OAAO;IAEd;AACJ;AACA;IACIC,UAAUA,CAACN,OAAO,EAAE;MAClBC,eAAe,GAAGN,uBAAuB,CAACK,OAAO,CAAC;IACpD,CAAC;IAED;AACJ;AACA;IACIO,cAAcA,CAACC,OAAO,EAAE;MACtBN,MAAM,GAAGM,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,CAACb,MAAM,CAAC;MAEzD,IAAI;QACF;QACA,MAAMc,gBAAgB,GAAG,MAAMC,uBAAuB,CAACL,aAAa,CAAC;QACrE,MAAMM,YAAY,GAAG,MAAMC,OAAO,CAACC,GAAG,CACpCnB,eAAe,CAACoB,GAAG,CAAEC,KAAK,IACxBzB,qBAAqB,CACnBc,MAAM,EACNW,KAAK,EACLpB,MAAM,CAACqB,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,kBAAkB,EAClBzB,OACF,CAAC;;QAED;QACAgC,aAAa,CAACH,iBAAiB,EAAE3B,MAAM,CAACqB,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,CACzCb,MAAsB,EACE;EACxB,OAAO,MAAMV,YAAY,CAAC;IACxB;IACA0C,UAAU,EAAEhC,MAAM,CAACgC,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":[]}
@@ -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) {
@@ -52,13 +53,14 @@ function convertParameters(parameters) {
52
53
  function convertParameter(parameter) {
53
54
  if (parameter.type === "objectSet") {
54
55
  // Config has already been validated so rid must be present
55
- if (parameter.objectType.internalDoNotUseMetadata == null) {
56
+ if (parameter.allowedType.internalDoNotUseMetadata == null) {
56
57
  throw new Error("Expected internal metadata to be present");
57
58
  }
58
59
  return {
59
60
  type: "objectSet",
60
61
  displayName: parameter.displayName,
61
- objectTypeRids: [parameter.objectType.internalDoNotUseMetadata.rid]
62
+ objectTypeRids: parameter.allowedType.type === "object" ? [parameter.allowedType.internalDoNotUseMetadata.rid] : [],
63
+ allowedType: parameter.allowedType.internalDoNotUseMetadata.rid
62
64
  };
63
65
  }
64
66
  return parameter;
@@ -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","objectType","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.objectType.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.objectType.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,UAAU,CAACC,wBAAwB,IAAI,IAAI,EAAE;MACzD,MAAM,IAAIC,KAAK,CAAC,0CAA0C,CAAC;IAC7D;IACA,OAAO;MACLrB,IAAI,EAAE,WAAW;MACjBsB,WAAW,EAAEJ,SAAS,CAACI,WAAW;MAClCC,cAAc,EAAE,CAACL,SAAS,CAACC,UAAU,CAACC,wBAAwB,CAAClC,GAAG;IACpE,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":[]}
@@ -56,8 +56,8 @@ function validateWidgetParameters(parameters) {
56
56
  throw new Error(`Parameter id "${parameterId}" does not match allowed pattern (must be camelCase)`);
57
57
  }
58
58
  if (parameterConfig.type === "objectSet") {
59
- if (typeof parameterConfig.objectType.internalDoNotUseMetadata?.rid !== "string") {
60
- throw new Error(`ObjectSet parameter "${parameterId}" must have a valid rid in its metadata, make sure your OSDK was generated with a generator version >=2.6.2. Provided type: '${JSON.stringify(parameterConfig.objectType)}'`);
59
+ if (typeof parameterConfig.allowedType.internalDoNotUseMetadata?.rid !== "string") {
60
+ throw new Error(`ObjectSet parameter "${parameterId}" must have a valid rid in its metadata, make sure your OSDK was generated with a generator version >=2.6.2. Provided type: '${JSON.stringify(parameterConfig.allowedType)}'`);
61
61
  }
62
62
  }
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateWidgetConfig.js","names":["ID_PATTERN","ID_MAX_LENGTH","NAME_MAX_LENGTH","DESCRIPTION_MAX_LENGTH","validateWidgetConfig","config","validateWidgetId","id","validateWidgetName","name","validateWidgetDescription","description","validateWidgetParameters","parameters","length","Error","test","parameterId","parameterConfig","Object","entries","type","objectType","internalDoNotUseMetadata","rid","JSON","stringify"],"sources":["validateWidgetConfig.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 { ParameterConfig, WidgetConfig } from \"@osdk/widget.api\";\n\nconst ID_PATTERN = /^([a-z][a-z0-9]*)([A-Z][a-z0-9]*)*$/;\nconst ID_MAX_LENGTH = 100;\nconst NAME_MAX_LENGTH = 100;\nconst DESCRIPTION_MAX_LENGTH = 250;\n\n/**\n * Validates the requirements that can't be expressed via TypeScript type-checking\n * for a widget config (e.g. that widget IDs and parameter IDs are camelCase.)\n */\nexport function validateWidgetConfig(\n config: WidgetConfig<ParameterConfig>,\n): void {\n validateWidgetId(config.id);\n validateWidgetName(config.name);\n validateWidgetDescription(config.description);\n validateWidgetParameters(config.parameters);\n}\n\nfunction validateWidgetId(id: string): void {\n if (id.length > ID_MAX_LENGTH) {\n throw new Error(\n `Widget id length can be at most ${ID_MAX_LENGTH} characters`,\n );\n }\n if (!ID_PATTERN.test(id)) {\n throw new Error(\n `Widget id \"${id}\" does not match allowed pattern (must be camelCase)`,\n );\n }\n}\n\nfunction validateWidgetName(name: string): void {\n if (name.length > NAME_MAX_LENGTH) {\n throw new Error(\n `Widget name length can be at most ${NAME_MAX_LENGTH} characters`,\n );\n }\n}\n\nfunction validateWidgetDescription(description?: string): void {\n if (description != null && description.length > DESCRIPTION_MAX_LENGTH) {\n throw new Error(\n `Widget description length can be at most ${DESCRIPTION_MAX_LENGTH} characters`,\n );\n }\n}\n\nfunction validateWidgetParameters(parameters: ParameterConfig): void {\n for (const [parameterId, parameterConfig] of Object.entries(parameters)) {\n if (parameterId.length > ID_MAX_LENGTH) {\n throw new Error(\n `Parameter id length can be at most ${ID_MAX_LENGTH} characters`,\n );\n }\n if (!ID_PATTERN.test(parameterId)) {\n throw new Error(\n `Parameter id \"${parameterId}\" does not match allowed pattern (must be camelCase)`,\n );\n }\n if (parameterConfig.type === \"objectSet\") {\n if (\n typeof parameterConfig.objectType.internalDoNotUseMetadata?.rid\n !== \"string\"\n ) {\n throw new Error(\n `ObjectSet parameter \"${parameterId}\" must have a valid rid in its metadata, make sure your OSDK was generated with a generator version >=2.6.2. Provided type: '${\n JSON.stringify(parameterConfig.objectType)\n }'`,\n );\n }\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMA,UAAU,GAAG,qCAAqC;AACxD,MAAMC,aAAa,GAAG,GAAG;AACzB,MAAMC,eAAe,GAAG,GAAG;AAC3B,MAAMC,sBAAsB,GAAG,GAAG;;AAElC;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,MAAqC,EAC/B;EACNC,gBAAgB,CAACD,MAAM,CAACE,EAAE,CAAC;EAC3BC,kBAAkB,CAACH,MAAM,CAACI,IAAI,CAAC;EAC/BC,yBAAyB,CAACL,MAAM,CAACM,WAAW,CAAC;EAC7CC,wBAAwB,CAACP,MAAM,CAACQ,UAAU,CAAC;AAC7C;AAEA,SAASP,gBAAgBA,CAACC,EAAU,EAAQ;EAC1C,IAAIA,EAAE,CAACO,MAAM,GAAGb,aAAa,EAAE;IAC7B,MAAM,IAAIc,KAAK,CACb,mCAAmCd,aAAa,aAClD,CAAC;EACH;EACA,IAAI,CAACD,UAAU,CAACgB,IAAI,CAACT,EAAE,CAAC,EAAE;IACxB,MAAM,IAAIQ,KAAK,CACb,cAAcR,EAAE,sDAClB,CAAC;EACH;AACF;AAEA,SAASC,kBAAkBA,CAACC,IAAY,EAAQ;EAC9C,IAAIA,IAAI,CAACK,MAAM,GAAGZ,eAAe,EAAE;IACjC,MAAM,IAAIa,KAAK,CACb,qCAAqCb,eAAe,aACtD,CAAC;EACH;AACF;AAEA,SAASQ,yBAAyBA,CAACC,WAAoB,EAAQ;EAC7D,IAAIA,WAAW,IAAI,IAAI,IAAIA,WAAW,CAACG,MAAM,GAAGX,sBAAsB,EAAE;IACtE,MAAM,IAAIY,KAAK,CACb,4CAA4CZ,sBAAsB,aACpE,CAAC;EACH;AACF;AAEA,SAASS,wBAAwBA,CAACC,UAA2B,EAAQ;EACnE,KAAK,MAAM,CAACI,WAAW,EAAEC,eAAe,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACP,UAAU,CAAC,EAAE;IACvE,IAAII,WAAW,CAACH,MAAM,GAAGb,aAAa,EAAE;MACtC,MAAM,IAAIc,KAAK,CACb,sCAAsCd,aAAa,aACrD,CAAC;IACH;IACA,IAAI,CAACD,UAAU,CAACgB,IAAI,CAACC,WAAW,CAAC,EAAE;MACjC,MAAM,IAAIF,KAAK,CACb,iBAAiBE,WAAW,sDAC9B,CAAC;IACH;IACA,IAAIC,eAAe,CAACG,IAAI,KAAK,WAAW,EAAE;MACxC,IACE,OAAOH,eAAe,CAACI,UAAU,CAACC,wBAAwB,EAAEC,GAAG,KACzD,QAAQ,EACd;QACA,MAAM,IAAIT,KAAK,CACb,wBAAwBE,WAAW,gIACjCQ,IAAI,CAACC,SAAS,CAACR,eAAe,CAACI,UAAU,CAAC,GAE9C,CAAC;MACH;IACF;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"validateWidgetConfig.js","names":["ID_PATTERN","ID_MAX_LENGTH","NAME_MAX_LENGTH","DESCRIPTION_MAX_LENGTH","validateWidgetConfig","config","validateWidgetId","id","validateWidgetName","name","validateWidgetDescription","description","validateWidgetParameters","parameters","length","Error","test","parameterId","parameterConfig","Object","entries","type","allowedType","internalDoNotUseMetadata","rid","JSON","stringify"],"sources":["validateWidgetConfig.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 { ParameterConfig, WidgetConfig } from \"@osdk/widget.api\";\n\nconst ID_PATTERN = /^([a-z][a-z0-9]*)([A-Z][a-z0-9]*)*$/;\nconst ID_MAX_LENGTH = 100;\nconst NAME_MAX_LENGTH = 100;\nconst DESCRIPTION_MAX_LENGTH = 250;\n\n/**\n * Validates the requirements that can't be expressed via TypeScript type-checking\n * for a widget config (e.g. that widget IDs and parameter IDs are camelCase.)\n */\nexport function validateWidgetConfig(\n config: WidgetConfig<ParameterConfig>,\n): void {\n validateWidgetId(config.id);\n validateWidgetName(config.name);\n validateWidgetDescription(config.description);\n validateWidgetParameters(config.parameters);\n}\n\nfunction validateWidgetId(id: string): void {\n if (id.length > ID_MAX_LENGTH) {\n throw new Error(\n `Widget id length can be at most ${ID_MAX_LENGTH} characters`,\n );\n }\n if (!ID_PATTERN.test(id)) {\n throw new Error(\n `Widget id \"${id}\" does not match allowed pattern (must be camelCase)`,\n );\n }\n}\n\nfunction validateWidgetName(name: string): void {\n if (name.length > NAME_MAX_LENGTH) {\n throw new Error(\n `Widget name length can be at most ${NAME_MAX_LENGTH} characters`,\n );\n }\n}\n\nfunction validateWidgetDescription(description?: string): void {\n if (description != null && description.length > DESCRIPTION_MAX_LENGTH) {\n throw new Error(\n `Widget description length can be at most ${DESCRIPTION_MAX_LENGTH} characters`,\n );\n }\n}\n\nfunction validateWidgetParameters(parameters: ParameterConfig): void {\n for (const [parameterId, parameterConfig] of Object.entries(parameters)) {\n if (parameterId.length > ID_MAX_LENGTH) {\n throw new Error(\n `Parameter id length can be at most ${ID_MAX_LENGTH} characters`,\n );\n }\n if (!ID_PATTERN.test(parameterId)) {\n throw new Error(\n `Parameter id \"${parameterId}\" does not match allowed pattern (must be camelCase)`,\n );\n }\n if (parameterConfig.type === \"objectSet\") {\n if (\n typeof parameterConfig.allowedType.internalDoNotUseMetadata?.rid\n !== \"string\"\n ) {\n throw new Error(\n `ObjectSet parameter \"${parameterId}\" must have a valid rid in its metadata, make sure your OSDK was generated with a generator version >=2.6.2. Provided type: '${\n JSON.stringify(parameterConfig.allowedType)\n }'`,\n );\n }\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMA,UAAU,GAAG,qCAAqC;AACxD,MAAMC,aAAa,GAAG,GAAG;AACzB,MAAMC,eAAe,GAAG,GAAG;AAC3B,MAAMC,sBAAsB,GAAG,GAAG;;AAElC;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,MAAqC,EAC/B;EACNC,gBAAgB,CAACD,MAAM,CAACE,EAAE,CAAC;EAC3BC,kBAAkB,CAACH,MAAM,CAACI,IAAI,CAAC;EAC/BC,yBAAyB,CAACL,MAAM,CAACM,WAAW,CAAC;EAC7CC,wBAAwB,CAACP,MAAM,CAACQ,UAAU,CAAC;AAC7C;AAEA,SAASP,gBAAgBA,CAACC,EAAU,EAAQ;EAC1C,IAAIA,EAAE,CAACO,MAAM,GAAGb,aAAa,EAAE;IAC7B,MAAM,IAAIc,KAAK,CACb,mCAAmCd,aAAa,aAClD,CAAC;EACH;EACA,IAAI,CAACD,UAAU,CAACgB,IAAI,CAACT,EAAE,CAAC,EAAE;IACxB,MAAM,IAAIQ,KAAK,CACb,cAAcR,EAAE,sDAClB,CAAC;EACH;AACF;AAEA,SAASC,kBAAkBA,CAACC,IAAY,EAAQ;EAC9C,IAAIA,IAAI,CAACK,MAAM,GAAGZ,eAAe,EAAE;IACjC,MAAM,IAAIa,KAAK,CACb,qCAAqCb,eAAe,aACtD,CAAC;EACH;AACF;AAEA,SAASQ,yBAAyBA,CAACC,WAAoB,EAAQ;EAC7D,IAAIA,WAAW,IAAI,IAAI,IAAIA,WAAW,CAACG,MAAM,GAAGX,sBAAsB,EAAE;IACtE,MAAM,IAAIY,KAAK,CACb,4CAA4CZ,sBAAsB,aACpE,CAAC;EACH;AACF;AAEA,SAASS,wBAAwBA,CAACC,UAA2B,EAAQ;EACnE,KAAK,MAAM,CAACI,WAAW,EAAEC,eAAe,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACP,UAAU,CAAC,EAAE;IACvE,IAAII,WAAW,CAACH,MAAM,GAAGb,aAAa,EAAE;MACtC,MAAM,IAAIc,KAAK,CACb,sCAAsCd,aAAa,aACrD,CAAC;IACH;IACA,IAAI,CAACD,UAAU,CAACgB,IAAI,CAACC,WAAW,CAAC,EAAE;MACjC,MAAM,IAAIF,KAAK,CACb,iBAAiBE,WAAW,sDAC9B,CAAC;IACH;IACA,IAAIC,eAAe,CAACG,IAAI,KAAK,WAAW,EAAE;MACxC,IACE,OAAOH,eAAe,CAACI,WAAW,CAACC,wBAAwB,EAAEC,GAAG,KAC1D,QAAQ,EACd;QACA,MAAM,IAAIT,KAAK,CACb,wBAAwBE,WAAW,gIACjCQ,IAAI,CAACC,SAAS,CAACR,eAAe,CAACI,WAAW,CAAC,GAE/C,CAAC;MACH;IACF;EACF;AACF","ignoreList":[]}
@@ -189,6 +189,16 @@ export function FoundryWidgetDevPlugin() {
189
189
  const fullSourcePath = standardizePathAndFileExtension(getFullSourcePath(source, standardizedImporter));
190
190
  configFileToEntrypoint[fullSourcePath] = standardizedImporter;
191
191
  }
192
+ },
193
+ handleHotUpdate({
194
+ file,
195
+ server
196
+ }) {
197
+ const standardizedFile = standardizePathAndFileExtension(file);
198
+ if (configFileToEntrypoint[standardizedFile] != null) {
199
+ server.config.logger.warn(color.yellow(`Detected a change to widget config file ${file}. Make sure to publish your changes in order to use the changes you've made.`));
200
+ return [];
201
+ }
192
202
  }
193
203
  };
194
204
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FoundryWidgetDevPlugin.js","names":["path","fileURLToPath","color","sirv","CONFIG_FILE_SUFFIX","DEV_PLUGIN_ID","ENTRYPOINTS_PATH","FINISH_PATH","MODULE_EVALUATION_MODE","SETUP_PATH","VITE_INJECTIONS_PATH","getInputHtmlEntrypoints","standardizePathAndFileExtension","isCodeWorkspacesMode","extractInjectedScripts","getBaseHref","getFoundryToken","getWidgetIdOverrideMap","publishDevModeSettings","warnIfWrongDevCommand","DIR_DIST","__dirname","dirname","import","meta","url","FoundryWidgetDevPlugin","htmlEntrypoints","codeEntrypoints","configFileToEntrypoint","name","enforce","apply","config","command","mode","process","env","VITEST","buildStart","options","configResolved","resolvedConfig","logger","configureServer","server","printUrls","printSetupPageUrl","middlewares","use","serverPath","req","res","next","originalUrl","endsWith","statusCode","setHeader","end","resolve","single","dev","_","JSON","stringify","map","entrypoint","Error","URL","headers","host","numAttempts","parseInt","searchParams","get","errorMessage","error","status","numEntrypoints","length","numConfigFiles","Object","keys","info","widgetIdToOverrides","injectedScripts","inlineScripts","join","resolveId","source","importer","standardizedSource","getFullSourcePath","startsWith","cwd","standardizedImporter","includes","extname","replace","fullSourcePath","subPath","posix","base","green","bold","setupRoute"],"sources":["FoundryWidgetDevPlugin.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 path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport color from \"picocolors\";\nimport sirv from \"sirv\";\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport {\n CONFIG_FILE_SUFFIX,\n DEV_PLUGIN_ID,\n ENTRYPOINTS_PATH,\n FINISH_PATH,\n MODULE_EVALUATION_MODE,\n SETUP_PATH,\n VITE_INJECTIONS_PATH,\n} from \"../common/constants.js\";\nimport { getInputHtmlEntrypoints } from \"../common/getInputHtmlEntrypoints.js\";\nimport { standardizePathAndFileExtension } from \"../common/standardizePathAndFileExtension.js\";\nimport { isCodeWorkspacesMode } from \"./codeWorkspacesMode.js\";\nimport { extractInjectedScripts } from \"./extractInjectedScripts.js\";\nimport { getBaseHref } from \"./getBaseHref.js\";\nimport { getFoundryToken } from \"./getFoundryToken.js\";\nimport { getWidgetIdOverrideMap } from \"./getWidgetIdOverrideMap.js\";\nimport { publishDevModeSettings } from \"./publishDevModeSettings.js\";\nimport { warnIfWrongDevCommand } from \"./validateDevEnvironment.js\";\n\n// Location of the setup page assets\nconst DIR_DIST: string = typeof __dirname !== \"undefined\"\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nexport function FoundryWidgetDevPlugin(): Plugin {\n // The root HTML entrypoints of the build process\n let htmlEntrypoints: string[];\n // Fully resolved paths to the entrypoint files, mapped to relative paths\n const codeEntrypoints: Record<string, string> = {};\n // Store the map of fully resolved config file paths to entrypoint file paths\n const configFileToEntrypoint: Record<string, string> = {};\n\n return {\n name: DEV_PLUGIN_ID,\n enforce: \"pre\",\n // Only apply this plugin during development, skip during tests and build-mode module evaluation\n apply(config, { command }) {\n if (\n config.mode === MODULE_EVALUATION_MODE || process.env.VITEST != null\n ) {\n return false;\n }\n return command === \"serve\";\n },\n\n /**\n * Capture the entrypoints from the Vite config so that we can manually load them on our\n * setup page and trigger module parsing.\n */\n buildStart(options) {\n htmlEntrypoints = getInputHtmlEntrypoints(options);\n },\n\n /**\n * Check for the required token environment variable in dev mode.\n */\n configResolved(resolvedConfig) {\n warnIfWrongDevCommand(resolvedConfig.mode, resolvedConfig.logger);\n getFoundryToken(resolvedConfig.mode);\n },\n\n /**\n * Configure the Vite server to serve the setup page and handle the finish endpoint. This\n * endpoint will set the widget overrides in Foundry and enable dev mode.\n */\n configureServer(server) {\n // Override the printUrls function to print the setup page URL\n server.printUrls = () => printSetupPageUrl(server);\n\n /**\n * Redirect `./.palantir/setup` to `./.palantir/setup/` to ensure that relative paths work\n * correctly. Relative paths must be used so that the dev server UI can be accessed on\n * non-root paths.\n */\n server.middlewares.use(\n serverPath(server, SETUP_PATH),\n (req, res, next) => {\n if (req.originalUrl?.endsWith(serverPath(server, SETUP_PATH))) {\n res.statusCode = 301;\n res.setHeader(\"Location\", `${serverPath(server, SETUP_PATH)}/`);\n res.end();\n } else {\n next();\n }\n },\n );\n\n /**\n * Serve the setup page that will load the entrypoints in iframes and trigger the finish\n * endpoint once widgets have been loaded.\n */\n server.middlewares.use(\n serverPath(server, SETUP_PATH),\n sirv(path.resolve(DIR_DIST, \"../../site\"), {\n single: true,\n dev: true,\n }),\n );\n\n /**\n * Make the entrypoints available to the setup page so that it can load them in iframes in\n * order to trigger module parsing.\n */\n server.middlewares.use(\n serverPath(server, ENTRYPOINTS_PATH),\n (_, res) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(\n JSON.stringify(\n htmlEntrypoints.map((entrypoint) =>\n serverPath(server, entrypoint)\n ),\n ),\n );\n },\n );\n\n /**\n * Finish the setup process by setting the widget overrides in Foundry and enabling dev mode.\n */\n server.middlewares.use(\n serverPath(server, FINISH_PATH),\n async (req, res) => {\n // Check for too many attempts\n if (req.url == null) {\n throw new Error(\"Request URL is undefined\");\n }\n const url = new URL(req.url, `http://${req.headers.host}`);\n const numAttempts = parseInt(url.searchParams.get(\"attempt\") ?? \"0\");\n if (numAttempts >= 10) {\n const errorMessage =\n \"Timed out waiting for widget config files to be parsed. Are you sure a widget config is imported?\";\n server.config.logger.error(errorMessage);\n res.setHeader(\"Content-Type\", \"application/json\");\n res.statusCode = 500;\n res.end(\n JSON.stringify({\n status: \"error\",\n error: errorMessage,\n }),\n );\n return;\n }\n\n // Wait for the setup page to trigger the parsing of the config files\n const numEntrypoints = htmlEntrypoints.length;\n const numConfigFiles = Object.keys(configFileToEntrypoint).length;\n if (numConfigFiles < numEntrypoints) {\n server.config.logger.info(\n `Waiting for widget config files to be parsed, found ${numConfigFiles} config files out of`\n + ` ${numEntrypoints} HTML entrypoints.`,\n );\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ status: \"pending\" }));\n return;\n }\n\n // Prepare the widget overrides and finish the setup process\n const widgetIdToOverrides = await getWidgetIdOverrideMap(\n server,\n codeEntrypoints,\n configFileToEntrypoint,\n getBaseHref(server),\n );\n await publishDevModeSettings(\n server,\n widgetIdToOverrides,\n getBaseHref(server),\n res,\n );\n },\n );\n\n /**\n * Serve scripts that would usually be injected into the HTML if Vite had control over the\n * serving of index HTML pages. This is necessary to ensure that plugins like React refresh\n * work correctly.\n */\n server.middlewares.use(\n serverPath(server, VITE_INJECTIONS_PATH),\n async (_, res) => {\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\"Content-Type\", \"application/javascript\");\n const injectedScripts = await extractInjectedScripts(server);\n res.end(injectedScripts.inlineScripts.join(\"\\n\"));\n },\n );\n },\n\n /**\n * As module imports are resolved, we need to capture the entrypoint file paths and the config\n * file paths that are imported from them.\n */\n resolveId(source, importer) {\n if (importer == null) {\n return;\n }\n\n // Standardize the source file extension and get the full path\n const standardizedSource = standardizePathAndFileExtension(\n getFullSourcePath(\n // If the source path is absolute, resolve it against the current working directory\n source.startsWith(\"/\") ? path.join(process.cwd(), source) : source,\n importer,\n ),\n );\n // Importers are already full paths, so just standardize the extension\n const standardizedImporter = standardizePathAndFileExtension(importer);\n\n // In dev mode all entrypoints have a generic HTML importer value\n if (\n importer.endsWith(\"index.html\") && !standardizedSource.includes(\"@fs\")\n // In a cold start, Vite may try to resolve files (e.g. a widget.html) before the user even accesses the dev mode server.\n // These files are not valid code entrypoints, so we ignore them here.\n && path.extname(standardizedSource) !== \".html\"\n ) {\n // Store the fully resolved path and the relative path, as we need the former for mapping\n // config files to entrypoints and the latter as a dev mode override script\n codeEntrypoints[standardizedSource] = source;\n }\n\n // Look for config files that are imported from an entrypoint file\n // Also check the config file being imported is in src to avoid picking up imports for other\n // project files like foundry.config.json / eslint.config.mjs when tailwind is used.\n if (\n standardizedSource.replace(/\\.[^/.]+$/, \"\").endsWith(CONFIG_FILE_SUFFIX)\n && standardizedSource.includes(\"/src/\")\n && codeEntrypoints[standardizedImporter] != null\n ) {\n const fullSourcePath = standardizePathAndFileExtension(\n getFullSourcePath(source, standardizedImporter),\n );\n configFileToEntrypoint[fullSourcePath] = standardizedImporter;\n }\n },\n };\n}\n\n/**\n * During the resolution phase source are given as relative paths to the importer\n */\nfunction getFullSourcePath(source: string, importer: string): string {\n return path.resolve(path.dirname(importer), source);\n}\n\nfunction serverPath(server: ViteDevServer, subPath: string): string {\n // Don't use Windows-style paths when constructing URL paths for the HTTP server\n return path.posix.resolve(server.config.base, subPath);\n}\n\nfunction printSetupPageUrl(server: ViteDevServer) {\n if (isCodeWorkspacesMode(server.config.mode)) {\n server.config.logger.info(\n ` ${color.green(\"➜\")} ${\n color.bold(\n \"Select a widget from the preview panel to enter developer mode\",\n )\n }`,\n );\n } else {\n const setupRoute = `${getBaseHref(server)}${SETUP_PATH}/`;\n server.config.logger.info(\n ` ${color.green(\"➜\")} ${\n color.bold(\"Click to enter developer mode for your widget set\")\n }: ${color.green(setupRoute)}`,\n );\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,IAAI,MAAM,WAAW;AAC5B,SAASC,aAAa,QAAQ,UAAU;AACxC,OAAOC,KAAK,MAAM,YAAY;AAC9B,OAAOC,IAAI,MAAM,MAAM;AAEvB,SACEC,kBAAkB,EAClBC,aAAa,EACbC,gBAAgB,EAChBC,WAAW,EACXC,sBAAsB,EACtBC,UAAU,EACVC,oBAAoB,QACf,wBAAwB;AAC/B,SAASC,uBAAuB,QAAQ,sCAAsC;AAC9E,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,oBAAoB,QAAQ,yBAAyB;AAC9D,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,eAAe,QAAQ,sBAAsB;AACtD,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,sBAAsB,QAAQ,6BAA6B;AACpE,SAASC,qBAAqB,QAAQ,6BAA6B;;AAEnE;AACA,MAAMC,QAAgB,GAAG,OAAOC,SAAS,KAAK,WAAW,GACrDA,SAAS,GACTrB,IAAI,CAACsB,OAAO,CAACrB,aAAa,CAACsB,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAEhD,OAAO,SAASC,sBAAsBA,CAAA,EAAW;EAC/C;EACA,IAAIC,eAAyB;EAC7B;EACA,MAAMC,eAAuC,GAAG,CAAC,CAAC;EAClD;EACA,MAAMC,sBAA8C,GAAG,CAAC,CAAC;EAEzD,OAAO;IACLC,IAAI,EAAEzB,aAAa;IACnB0B,OAAO,EAAE,KAAK;IACd;IACAC,KAAKA,CAACC,MAAM,EAAE;MAAEC;IAAQ,CAAC,EAAE;MACzB,IACED,MAAM,CAACE,IAAI,KAAK3B,sBAAsB,IAAI4B,OAAO,CAACC,GAAG,CAACC,MAAM,IAAI,IAAI,EACpE;QACA,OAAO,KAAK;MACd;MACA,OAAOJ,OAAO,KAAK,OAAO;IAC5B,CAAC;IAED;AACJ;AACA;AACA;IACIK,UAAUA,CAACC,OAAO,EAAE;MAClBb,eAAe,GAAGhB,uBAAuB,CAAC6B,OAAO,CAAC;IACpD,CAAC;IAED;AACJ;AACA;IACIC,cAAcA,CAACC,cAAc,EAAE;MAC7BvB,qBAAqB,CAACuB,cAAc,CAACP,IAAI,EAAEO,cAAc,CAACC,MAAM,CAAC;MACjE3B,eAAe,CAAC0B,cAAc,CAACP,IAAI,CAAC;IACtC,CAAC;IAED;AACJ;AACA;AACA;IACIS,eAAeA,CAACC,MAAM,EAAE;MACtB;MACAA,MAAM,CAACC,SAAS,GAAG,MAAMC,iBAAiB,CAACF,MAAM,CAAC;;MAElD;AACN;AACA;AACA;AACA;MACMA,MAAM,CAACG,WAAW,CAACC,GAAG,CACpBC,UAAU,CAACL,MAAM,EAAEpC,UAAU,CAAC,EAC9B,CAAC0C,GAAG,EAAEC,GAAG,EAAEC,IAAI,KAAK;QAClB,IAAIF,GAAG,CAACG,WAAW,EAAEC,QAAQ,CAACL,UAAU,CAACL,MAAM,EAAEpC,UAAU,CAAC,CAAC,EAAE;UAC7D2C,GAAG,CAACI,UAAU,GAAG,GAAG;UACpBJ,GAAG,CAACK,SAAS,CAAC,UAAU,EAAE,GAAGP,UAAU,CAACL,MAAM,EAAEpC,UAAU,CAAC,GAAG,CAAC;UAC/D2C,GAAG,CAACM,GAAG,CAAC,CAAC;QACX,CAAC,MAAM;UACLL,IAAI,CAAC,CAAC;QACR;MACF,CACF,CAAC;;MAED;AACN;AACA;AACA;MACMR,MAAM,CAACG,WAAW,CAACC,GAAG,CACpBC,UAAU,CAACL,MAAM,EAAEpC,UAAU,CAAC,EAC9BN,IAAI,CAACH,IAAI,CAAC2D,OAAO,CAACvC,QAAQ,EAAE,YAAY,CAAC,EAAE;QACzCwC,MAAM,EAAE,IAAI;QACZC,GAAG,EAAE;MACP,CAAC,CACH,CAAC;;MAED;AACN;AACA;AACA;MACMhB,MAAM,CAACG,WAAW,CAACC,GAAG,CACpBC,UAAU,CAACL,MAAM,EAAEvC,gBAAgB,CAAC,EACpC,CAACwD,CAAC,EAAEV,GAAG,KAAK;QACVA,GAAG,CAACK,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;QACjDL,GAAG,CAACM,GAAG,CACLK,IAAI,CAACC,SAAS,CACZrC,eAAe,CAACsC,GAAG,CAAEC,UAAU,IAC7BhB,UAAU,CAACL,MAAM,EAAEqB,UAAU,CAC/B,CACF,CACF,CAAC;MACH,CACF,CAAC;;MAED;AACN;AACA;MACMrB,MAAM,CAACG,WAAW,CAACC,GAAG,CACpBC,UAAU,CAACL,MAAM,EAAEtC,WAAW,CAAC,EAC/B,OAAO4C,GAAG,EAAEC,GAAG,KAAK;QAClB;QACA,IAAID,GAAG,CAAC1B,GAAG,IAAI,IAAI,EAAE;UACnB,MAAM,IAAI0C,KAAK,CAAC,0BAA0B,CAAC;QAC7C;QACA,MAAM1C,GAAG,GAAG,IAAI2C,GAAG,CAACjB,GAAG,CAAC1B,GAAG,EAAE,UAAU0B,GAAG,CAACkB,OAAO,CAACC,IAAI,EAAE,CAAC;QAC1D,MAAMC,WAAW,GAAGC,QAAQ,CAAC/C,GAAG,CAACgD,YAAY,CAACC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;QACpE,IAAIH,WAAW,IAAI,EAAE,EAAE;UACrB,MAAMI,YAAY,GAChB,mGAAmG;UACrG9B,MAAM,CAACZ,MAAM,CAACU,MAAM,CAACiC,KAAK,CAACD,YAAY,CAAC;UACxCvB,GAAG,CAACK,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;UACjDL,GAAG,CAACI,UAAU,GAAG,GAAG;UACpBJ,GAAG,CAACM,GAAG,CACLK,IAAI,CAACC,SAAS,CAAC;YACba,MAAM,EAAE,OAAO;YACfD,KAAK,EAAED;UACT,CAAC,CACH,CAAC;UACD;QACF;;QAEA;QACA,MAAMG,cAAc,GAAGnD,eAAe,CAACoD,MAAM;QAC7C,MAAMC,cAAc,GAAGC,MAAM,CAACC,IAAI,CAACrD,sBAAsB,CAAC,CAACkD,MAAM;QACjE,IAAIC,cAAc,GAAGF,cAAc,EAAE;UACnCjC,MAAM,CAACZ,MAAM,CAACU,MAAM,CAACwC,IAAI,CACvB,uDAAuDH,cAAc,sBAAsB,GACvF,IAAIF,cAAc,oBACxB,CAAC;UACD1B,GAAG,CAACK,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC;UACjDL,GAAG,CAACM,GAAG,CAACK,IAAI,CAACC,SAAS,CAAC;YAAEa,MAAM,EAAE;UAAU,CAAC,CAAC,CAAC;UAC9C;QACF;;QAEA;QACA,MAAMO,mBAAmB,GAAG,MAAMnE,sBAAsB,CACtD4B,MAAM,EACNjB,eAAe,EACfC,sBAAsB,EACtBd,WAAW,CAAC8B,MAAM,CACpB,CAAC;QACD,MAAM3B,sBAAsB,CAC1B2B,MAAM,EACNuC,mBAAmB,EACnBrE,WAAW,CAAC8B,MAAM,CAAC,EACnBO,GACF,CAAC;MACH,CACF,CAAC;;MAED;AACN;AACA;AACA;AACA;MACMP,MAAM,CAACG,WAAW,CAACC,GAAG,CACpBC,UAAU,CAACL,MAAM,EAAEnC,oBAAoB,CAAC,EACxC,OAAOoD,CAAC,EAAEV,GAAG,KAAK;QAChBA,GAAG,CAACK,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC;QACjDL,GAAG,CAACK,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC;QACvD,MAAM4B,eAAe,GAAG,MAAMvE,sBAAsB,CAAC+B,MAAM,CAAC;QAC5DO,GAAG,CAACM,GAAG,CAAC2B,eAAe,CAACC,aAAa,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MACnD,CACF,CAAC;IACH,CAAC;IAED;AACJ;AACA;AACA;IACIC,SAASA,CAACC,MAAM,EAAEC,QAAQ,EAAE;MAC1B,IAAIA,QAAQ,IAAI,IAAI,EAAE;QACpB;MACF;;MAEA;MACA,MAAMC,kBAAkB,GAAG/E,+BAA+B,CACxDgF,iBAAiB;MACf;MACAH,MAAM,CAACI,UAAU,CAAC,GAAG,CAAC,GAAG7F,IAAI,CAACuF,IAAI,CAACnD,OAAO,CAAC0D,GAAG,CAAC,CAAC,EAAEL,MAAM,CAAC,GAAGA,MAAM,EAClEC,QACF,CACF,CAAC;MACD;MACA,MAAMK,oBAAoB,GAAGnF,+BAA+B,CAAC8E,QAAQ,CAAC;;MAEtE;MACA,IACEA,QAAQ,CAACnC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAACoC,kBAAkB,CAACK,QAAQ,CAAC,KAAK;MACrE;MACA;MAAA,GACGhG,IAAI,CAACiG,OAAO,CAACN,kBAAkB,CAAC,KAAK,OAAO,EAC/C;QACA;QACA;QACA/D,eAAe,CAAC+D,kBAAkB,CAAC,GAAGF,MAAM;MAC9C;;MAEA;MACA;MACA;MACA,IACEE,kBAAkB,CAACO,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC3C,QAAQ,CAACnD,kBAAkB,CAAC,IACrEuF,kBAAkB,CAACK,QAAQ,CAAC,OAAO,CAAC,IACpCpE,eAAe,CAACmE,oBAAoB,CAAC,IAAI,IAAI,EAChD;QACA,MAAMI,cAAc,GAAGvF,+BAA+B,CACpDgF,iBAAiB,CAACH,MAAM,EAAEM,oBAAoB,CAChD,CAAC;QACDlE,sBAAsB,CAACsE,cAAc,CAAC,GAAGJ,oBAAoB;MAC/D;IACF;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAASH,iBAAiBA,CAACH,MAAc,EAAEC,QAAgB,EAAU;EACnE,OAAO1F,IAAI,CAAC2D,OAAO,CAAC3D,IAAI,CAACsB,OAAO,CAACoE,QAAQ,CAAC,EAAED,MAAM,CAAC;AACrD;AAEA,SAASvC,UAAUA,CAACL,MAAqB,EAAEuD,OAAe,EAAU;EAClE;EACA,OAAOpG,IAAI,CAACqG,KAAK,CAAC1C,OAAO,CAACd,MAAM,CAACZ,MAAM,CAACqE,IAAI,EAAEF,OAAO,CAAC;AACxD;AAEA,SAASrD,iBAAiBA,CAACF,MAAqB,EAAE;EAChD,IAAIhC,oBAAoB,CAACgC,MAAM,CAACZ,MAAM,CAACE,IAAI,CAAC,EAAE;IAC5CU,MAAM,CAACZ,MAAM,CAACU,MAAM,CAACwC,IAAI,CACvB,KAAKjF,KAAK,CAACqG,KAAK,CAAC,GAAG,CAAC,KACnBrG,KAAK,CAACsG,IAAI,CACR,gEACF,CAAC,EAEL,CAAC;EACH,CAAC,MAAM;IACL,MAAMC,UAAU,GAAG,GAAG1F,WAAW,CAAC8B,MAAM,CAAC,GAAGpC,UAAU,GAAG;IACzDoC,MAAM,CAACZ,MAAM,CAACU,MAAM,CAACwC,IAAI,CACvB,KAAKjF,KAAK,CAACqG,KAAK,CAAC,GAAG,CAAC,KACnBrG,KAAK,CAACsG,IAAI,CAAC,mDAAmD,CAAC,KAC5DtG,KAAK,CAACqG,KAAK,CAACE,UAAU,CAAC,EAC9B,CAAC;EACH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"FoundryWidgetDevPlugin.js","names":["path","fileURLToPath","color","sirv","CONFIG_FILE_SUFFIX","DEV_PLUGIN_ID","ENTRYPOINTS_PATH","FINISH_PATH","MODULE_EVALUATION_MODE","SETUP_PATH","VITE_INJECTIONS_PATH","getInputHtmlEntrypoints","standardizePathAndFileExtension","isCodeWorkspacesMode","extractInjectedScripts","getBaseHref","getFoundryToken","getWidgetIdOverrideMap","publishDevModeSettings","warnIfWrongDevCommand","DIR_DIST","__dirname","dirname","import","meta","url","FoundryWidgetDevPlugin","htmlEntrypoints","codeEntrypoints","configFileToEntrypoint","name","enforce","apply","config","command","mode","process","env","VITEST","buildStart","options","configResolved","resolvedConfig","logger","configureServer","server","printUrls","printSetupPageUrl","middlewares","use","serverPath","req","res","next","originalUrl","endsWith","statusCode","setHeader","end","resolve","single","dev","_","JSON","stringify","map","entrypoint","Error","URL","headers","host","numAttempts","parseInt","searchParams","get","errorMessage","error","status","numEntrypoints","length","numConfigFiles","Object","keys","info","widgetIdToOverrides","injectedScripts","inlineScripts","join","resolveId","source","importer","standardizedSource","getFullSourcePath","startsWith","cwd","standardizedImporter","includes","extname","replace","fullSourcePath","handleHotUpdate","file","standardizedFile","warn","yellow","subPath","posix","base","green","bold","setupRoute"],"sources":["FoundryWidgetDevPlugin.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 path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport color from \"picocolors\";\nimport sirv from \"sirv\";\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport {\n CONFIG_FILE_SUFFIX,\n DEV_PLUGIN_ID,\n ENTRYPOINTS_PATH,\n FINISH_PATH,\n MODULE_EVALUATION_MODE,\n SETUP_PATH,\n VITE_INJECTIONS_PATH,\n} from \"../common/constants.js\";\nimport { getInputHtmlEntrypoints } from \"../common/getInputHtmlEntrypoints.js\";\nimport { standardizePathAndFileExtension } from \"../common/standardizePathAndFileExtension.js\";\nimport { isCodeWorkspacesMode } from \"./codeWorkspacesMode.js\";\nimport { extractInjectedScripts } from \"./extractInjectedScripts.js\";\nimport { getBaseHref } from \"./getBaseHref.js\";\nimport { getFoundryToken } from \"./getFoundryToken.js\";\nimport { getWidgetIdOverrideMap } from \"./getWidgetIdOverrideMap.js\";\nimport { publishDevModeSettings } from \"./publishDevModeSettings.js\";\nimport { warnIfWrongDevCommand } from \"./validateDevEnvironment.js\";\n\n// Location of the setup page assets\nconst DIR_DIST: string = typeof __dirname !== \"undefined\"\n ? __dirname\n : path.dirname(fileURLToPath(import.meta.url));\n\nexport function FoundryWidgetDevPlugin(): Plugin {\n // The root HTML entrypoints of the build process\n let htmlEntrypoints: string[];\n // Fully resolved paths to the entrypoint files, mapped to relative paths\n const codeEntrypoints: Record<string, string> = {};\n // Store the map of fully resolved config file paths to entrypoint file paths\n const configFileToEntrypoint: Record<string, string> = {};\n\n return {\n name: DEV_PLUGIN_ID,\n enforce: \"pre\",\n // Only apply this plugin during development, skip during tests and build-mode module evaluation\n apply(config, { command }) {\n if (\n config.mode === MODULE_EVALUATION_MODE || process.env.VITEST != null\n ) {\n return false;\n }\n return command === \"serve\";\n },\n\n /**\n * Capture the entrypoints from the Vite config so that we can manually load them on our\n * setup page and trigger module parsing.\n */\n buildStart(options) {\n htmlEntrypoints = getInputHtmlEntrypoints(options);\n },\n\n /**\n * Check for the required token environment variable in dev mode.\n */\n configResolved(resolvedConfig) {\n warnIfWrongDevCommand(resolvedConfig.mode, resolvedConfig.logger);\n getFoundryToken(resolvedConfig.mode);\n },\n\n /**\n * Configure the Vite server to serve the setup page and handle the finish endpoint. This\n * endpoint will set the widget overrides in Foundry and enable dev mode.\n */\n configureServer(server) {\n // Override the printUrls function to print the setup page URL\n server.printUrls = () => printSetupPageUrl(server);\n\n /**\n * Redirect `./.palantir/setup` to `./.palantir/setup/` to ensure that relative paths work\n * correctly. Relative paths must be used so that the dev server UI can be accessed on\n * non-root paths.\n */\n server.middlewares.use(\n serverPath(server, SETUP_PATH),\n (req, res, next) => {\n if (req.originalUrl?.endsWith(serverPath(server, SETUP_PATH))) {\n res.statusCode = 301;\n res.setHeader(\"Location\", `${serverPath(server, SETUP_PATH)}/`);\n res.end();\n } else {\n next();\n }\n },\n );\n\n /**\n * Serve the setup page that will load the entrypoints in iframes and trigger the finish\n * endpoint once widgets have been loaded.\n */\n server.middlewares.use(\n serverPath(server, SETUP_PATH),\n sirv(path.resolve(DIR_DIST, \"../../site\"), {\n single: true,\n dev: true,\n }),\n );\n\n /**\n * Make the entrypoints available to the setup page so that it can load them in iframes in\n * order to trigger module parsing.\n */\n server.middlewares.use(\n serverPath(server, ENTRYPOINTS_PATH),\n (_, res) => {\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(\n JSON.stringify(\n htmlEntrypoints.map((entrypoint) =>\n serverPath(server, entrypoint)\n ),\n ),\n );\n },\n );\n\n /**\n * Finish the setup process by setting the widget overrides in Foundry and enabling dev mode.\n */\n server.middlewares.use(\n serverPath(server, FINISH_PATH),\n async (req, res) => {\n // Check for too many attempts\n if (req.url == null) {\n throw new Error(\"Request URL is undefined\");\n }\n const url = new URL(req.url, `http://${req.headers.host}`);\n const numAttempts = parseInt(url.searchParams.get(\"attempt\") ?? \"0\");\n if (numAttempts >= 10) {\n const errorMessage =\n \"Timed out waiting for widget config files to be parsed. Are you sure a widget config is imported?\";\n server.config.logger.error(errorMessage);\n res.setHeader(\"Content-Type\", \"application/json\");\n res.statusCode = 500;\n res.end(\n JSON.stringify({\n status: \"error\",\n error: errorMessage,\n }),\n );\n return;\n }\n\n // Wait for the setup page to trigger the parsing of the config files\n const numEntrypoints = htmlEntrypoints.length;\n const numConfigFiles = Object.keys(configFileToEntrypoint).length;\n if (numConfigFiles < numEntrypoints) {\n server.config.logger.info(\n `Waiting for widget config files to be parsed, found ${numConfigFiles} config files out of`\n + ` ${numEntrypoints} HTML entrypoints.`,\n );\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ status: \"pending\" }));\n return;\n }\n\n // Prepare the widget overrides and finish the setup process\n const widgetIdToOverrides = await getWidgetIdOverrideMap(\n server,\n codeEntrypoints,\n configFileToEntrypoint,\n getBaseHref(server),\n );\n await publishDevModeSettings(\n server,\n widgetIdToOverrides,\n getBaseHref(server),\n res,\n );\n },\n );\n\n /**\n * Serve scripts that would usually be injected into the HTML if Vite had control over the\n * serving of index HTML pages. This is necessary to ensure that plugins like React refresh\n * work correctly.\n */\n server.middlewares.use(\n serverPath(server, VITE_INJECTIONS_PATH),\n async (_, res) => {\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\"Content-Type\", \"application/javascript\");\n const injectedScripts = await extractInjectedScripts(server);\n res.end(injectedScripts.inlineScripts.join(\"\\n\"));\n },\n );\n },\n\n /**\n * As module imports are resolved, we need to capture the entrypoint file paths and the config\n * file paths that are imported from them.\n */\n resolveId(source, importer) {\n if (importer == null) {\n return;\n }\n\n // Standardize the source file extension and get the full path\n const standardizedSource = standardizePathAndFileExtension(\n getFullSourcePath(\n // If the source path is absolute, resolve it against the current working directory\n source.startsWith(\"/\") ? path.join(process.cwd(), source) : source,\n importer,\n ),\n );\n // Importers are already full paths, so just standardize the extension\n const standardizedImporter = standardizePathAndFileExtension(importer);\n\n // In dev mode all entrypoints have a generic HTML importer value\n if (\n importer.endsWith(\"index.html\") && !standardizedSource.includes(\"@fs\")\n // In a cold start, Vite may try to resolve files (e.g. a widget.html) before the user even accesses the dev mode server.\n // These files are not valid code entrypoints, so we ignore them here.\n && path.extname(standardizedSource) !== \".html\"\n ) {\n // Store the fully resolved path and the relative path, as we need the former for mapping\n // config files to entrypoints and the latter as a dev mode override script\n codeEntrypoints[standardizedSource] = source;\n }\n\n // Look for config files that are imported from an entrypoint file\n // Also check the config file being imported is in src to avoid picking up imports for other\n // project files like foundry.config.json / eslint.config.mjs when tailwind is used.\n if (\n standardizedSource.replace(/\\.[^/.]+$/, \"\").endsWith(CONFIG_FILE_SUFFIX)\n && standardizedSource.includes(\"/src/\")\n && codeEntrypoints[standardizedImporter] != null\n ) {\n const fullSourcePath = standardizePathAndFileExtension(\n getFullSourcePath(source, standardizedImporter),\n );\n configFileToEntrypoint[fullSourcePath] = standardizedImporter;\n }\n },\n\n handleHotUpdate({ file, server }) {\n const standardizedFile = standardizePathAndFileExtension(file);\n if (configFileToEntrypoint[standardizedFile] != null) {\n server.config.logger.warn(\n color.yellow(\n `Detected a change to widget config file ${file}. Make sure to publish your changes in order to use the changes you've made.`,\n ),\n );\n return [];\n }\n },\n };\n}\n\n/**\n * During the resolution phase source are given as relative paths to the importer\n */\nfunction getFullSourcePath(source: string, importer: string): string {\n return path.resolve(path.dirname(importer), source);\n}\n\nfunction serverPath(server: ViteDevServer, subPath: string): string {\n // Don't use Windows-style paths when constructing URL paths for the HTTP server\n return path.posix.resolve(server.config.base, subPath);\n}\n\nfunction printSetupPageUrl(server: ViteDevServer) {\n if (isCodeWorkspacesMode(server.config.mode)) {\n server.config.logger.info(\n ` ${color.green(\"➜\")} ${\n color.bold(\n \"Select a widget from the preview panel to enter developer mode\",\n )\n }`,\n );\n } else {\n const setupRoute = `${getBaseHref(server)}${SETUP_PATH}/`;\n server.config.logger.info(\n ` ${color.green(\"➜\")} ${\n color.bold(\"Click to enter developer mode for your widget set\")\n }: ${color.green(setupRoute)}`,\n );\n }\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 +1 @@
1
- import{I as n}from"./index-DLOviMB1.js";import{I as e}from"./index-B-fsa5Ru.js";import{p as r,I as s}from"./index-D6Sm-vP3.js";function I(o,t){var a=r(o);return t===s.STANDARD?n[a]:e[a]}function p(o){return r(o)}export{n as IconSvgPaths16,e as IconSvgPaths20,I as getIconPaths,p as iconNameToPathsRecordKey};
1
+ import{I as n}from"./index-DLOviMB1.js";import{I as e}from"./index-B-fsa5Ru.js";import{p as r,I as s}from"./index-y3oyBPN4.js";function I(o,t){var a=r(o);return t===s.STANDARD?n[a]:e[a]}function p(o){return r(o)}export{n as IconSvgPaths16,e as IconSvgPaths20,I as getIconPaths,p as iconNameToPathsRecordKey};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./allPaths-DIfrnzgS.js","./index-DLOviMB1.js","./index-B-fsa5Ru.js","./index-D6Sm-vP3.js","./index-7niI6nVb.css"])))=>i.map(i=>d[i]);
2
- import{_ as o,a as i,b as n}from"./index-D6Sm-vP3.js";var _=function(e,a){return o(void 0,void 0,void 0,function(){var t;return i(this,function(r){switch(r.label){case 0:return[4,n(()=>import("./allPaths-DIfrnzgS.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)];case 1:return t=r.sent().getIconPaths,[2,t(e,a)]}})})};export{_ as allPathsLoader};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./allPaths-DQ44lpsR.js","./index-DLOviMB1.js","./index-B-fsa5Ru.js","./index-y3oyBPN4.js","./index-BAmk2r3A.css"])))=>i.map(i=>d[i]);
2
+ import{_ as o,a as i,b as n}from"./index-y3oyBPN4.js";var _=function(e,a){return o(void 0,void 0,void 0,function(){var t;return i(this,function(r){switch(r.label){case 0:return[4,n(()=>import("./allPaths-DQ44lpsR.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url)];case 1:return t=r.sent().getIconPaths,[2,t(e,a)]}})})};export{_ as allPathsLoader};