@osdk/widget.vite-plugin 3.89.0 → 3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @osdk/widget.vite-plugin
|
|
2
2
|
|
|
3
|
+
## 3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9ca39db: Fail widget builds that set Vite's `base` to anything other than `/`, with an error saying how to fix it. Foundry serves widget files from the root path, so other bases can't load.
|
|
8
|
+
- @osdk/widget.api@3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b
|
|
9
|
+
|
|
3
10
|
## 3.89.0
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -45,6 +45,9 @@ export function FoundryWidgetBuildPlugin(options) {
|
|
|
45
45
|
*/
|
|
46
46
|
configResolved(_config) {
|
|
47
47
|
config = _config;
|
|
48
|
+
if (config.base !== "/") {
|
|
49
|
+
throw new Error(`Foundry serves widget files from the root path, so Vite's base must be "/". Remove base from your Vite config or set it to "/". Found base "${config.base}".`);
|
|
50
|
+
}
|
|
48
51
|
},
|
|
49
52
|
/**
|
|
50
53
|
* Once the build is complete, generate the widget set manifest based on the entrypoints and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FoundryWidgetBuildPlugin.js","names":["fs","path","autoVersion","loadFoundryConfig","MANIFEST_FILE_LOCATION","createServer","BUILD_PLUGIN_ID","MODULE_EVALUATION_MODE","getInputHtmlEntrypoints","buildWidgetSetManifest","getWidgetBuildOutputs","getWidgetSetInputSpec","FoundryWidgetBuildPlugin","options","htmlEntrypoints","config","name","enforce","apply","buildStart","configResolved","_config","writeBundle","_","bundle","foundryConfig","
|
|
1
|
+
{"version":3,"file":"FoundryWidgetBuildPlugin.js","names":["fs","path","autoVersion","loadFoundryConfig","MANIFEST_FILE_LOCATION","createServer","BUILD_PLUGIN_ID","MODULE_EVALUATION_MODE","getInputHtmlEntrypoints","buildWidgetSetManifest","getWidgetBuildOutputs","getWidgetSetInputSpec","FoundryWidgetBuildPlugin","options","htmlEntrypoints","config","name","enforce","apply","buildStart","configResolved","_config","base","Error","writeBundle","_","bundle","foundryConfig","server","createModuleEvaluationServer","widgetSetVersion","computeWidgetSetVersion","widgetBuilds","Promise","all","map","input","build","outDir","widgetSetInputSpec","resolve","process","cwd","widgetSetManifest","widgetSet","rid","writeManifest","close","configFile","mode","type","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 fs from \"fs\";\nimport path from \"path\";\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 type { Plugin, ResolvedConfig, ViteDevServer } from \"vite\";\nimport { createServer } from \"vite\";\n\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 if (config.base !== \"/\") {\n throw new Error(\n `Foundry serves widget files from the root path, so Vite's base must be \"/\". Remove base from your Vite config or set it to \"/\". Found base \"${config.base}\".`,\n );\n }\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(bundle, input, config.build.outDir, server),\n ),\n );\n const widgetSetInputSpec = await getWidgetSetInputSpec(\n path.resolve(process.cwd(), \"package.json\"),\n path.resolve(process.cwd(), \"resources.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\n// TODO(oxc type-aware): the type-aware typescript/require-await rule does not flag this (it returns a Promise); remove this disable once type-aware linting is enabled.\n// oxlint-disable-next-line require-await -- intentionally async: returns a Promise to satisfy its declared/contract type; no await needed\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}\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(manifestPath, JSON.stringify(widgetSetManifest, null, 2));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { getFoundryToken } from "./getFoundryToken.js";
|
|
18
|
-
const USER_AGENT = `osdk-widget.vite-plugin/${"3.89.
|
|
18
|
+
const USER_AGENT = `osdk-widget.vite-plugin/${"3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b"}`;
|
|
19
19
|
export function setWidgetSetManifest(foundryUrl, widgetSetRid, manifest, viteMode) {
|
|
20
20
|
const url = new URL("api/v2/widgets/devModeSettingsV2/setWidgetSetManifest", foundryUrl);
|
|
21
21
|
url.searchParams.set("preview", "true");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","names":["getFoundryToken","USER_AGENT","setWidgetSetManifest","foundryUrl","widgetSetRid","manifest","viteMode","url","URL","searchParams","set","fetch","body","JSON","stringify","method","headers","authorization","accept","enableDevMode"],"sources":["network.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 { DevModeManifest } from \"./buildDevModeManifest.js\";\nimport { getFoundryToken } from \"./getFoundryToken.js\";\n\nconst USER_AGENT = `osdk-widget.vite-plugin/${process.env.PACKAGE_VERSION}`;\n\nexport function setWidgetSetManifest(\n foundryUrl: string,\n widgetSetRid: string,\n manifest: DevModeManifest,\n viteMode: string | undefined,\n): Promise<Response> {\n const url = new URL(\n \"api/v2/widgets/devModeSettingsV2/setWidgetSetManifest\",\n foundryUrl,\n );\n url.searchParams.set(\"preview\", \"true\");\n return fetch(url, {\n body: JSON.stringify({\n widgetSetRid,\n manifest,\n }),\n method: \"POST\",\n headers: {\n authorization: `Bearer ${getFoundryToken(viteMode)}`,\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"Fetch-User-Agent\": USER_AGENT,\n },\n });\n}\n\nexport function enableDevMode(\n foundryUrl: string,\n viteMode: string | undefined,\n): Promise<Response> {\n const url = new URL(\"api/v2/widgets/devModeSettingsV2/enable\", foundryUrl);\n url.searchParams.set(\"preview\", \"true\");\n return fetch(url, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${getFoundryToken(viteMode)}`,\n accept: \"application/json\",\n \"Fetch-User-Agent\": USER_AGENT,\n },\n });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,eAAe,QAAQ,sBAAsB;AAEtD,MAAMC,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"network.js","names":["getFoundryToken","USER_AGENT","setWidgetSetManifest","foundryUrl","widgetSetRid","manifest","viteMode","url","URL","searchParams","set","fetch","body","JSON","stringify","method","headers","authorization","accept","enableDevMode"],"sources":["network.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 { DevModeManifest } from \"./buildDevModeManifest.js\";\nimport { getFoundryToken } from \"./getFoundryToken.js\";\n\nconst USER_AGENT = `osdk-widget.vite-plugin/${process.env.PACKAGE_VERSION}`;\n\nexport function setWidgetSetManifest(\n foundryUrl: string,\n widgetSetRid: string,\n manifest: DevModeManifest,\n viteMode: string | undefined,\n): Promise<Response> {\n const url = new URL(\n \"api/v2/widgets/devModeSettingsV2/setWidgetSetManifest\",\n foundryUrl,\n );\n url.searchParams.set(\"preview\", \"true\");\n return fetch(url, {\n body: JSON.stringify({\n widgetSetRid,\n manifest,\n }),\n method: \"POST\",\n headers: {\n authorization: `Bearer ${getFoundryToken(viteMode)}`,\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n \"Fetch-User-Agent\": USER_AGENT,\n },\n });\n}\n\nexport function enableDevMode(\n foundryUrl: string,\n viteMode: string | undefined,\n): Promise<Response> {\n const url = new URL(\"api/v2/widgets/devModeSettingsV2/enable\", foundryUrl);\n url.searchParams.set(\"preview\", \"true\");\n return fetch(url, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${getFoundryToken(viteMode)}`,\n accept: \"application/json\",\n \"Fetch-User-Agent\": USER_AGENT,\n },\n });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,eAAe,QAAQ,sBAAsB;AAEtD,MAAMC,UAAU,GAAG,mFAAwD;AAE3E,OAAO,SAASC,oBAAoBA,CAClCC,UAAkB,EAClBC,YAAoB,EACpBC,QAAyB,EACzBC,QAA4B,EACT;EACnB,MAAMC,GAAG,GAAG,IAAIC,GAAG,CACjB,uDAAuD,EACvDL,UACF,CAAC;EACDI,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACvC,OAAOC,KAAK,CAACJ,GAAG,EAAE;IAChBK,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;MACnBV,YAAY;MACZC;IACF,CAAC,CAAC;IACFU,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACPC,aAAa,EAAE,UAAUjB,eAAe,CAACM,QAAQ,CAAC,EAAE;MACpDY,MAAM,EAAE,kBAAkB;MAC1B,cAAc,EAAE,kBAAkB;MAClC,kBAAkB,EAAEjB;IACtB;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASkB,aAAaA,CAC3BhB,UAAkB,EAClBG,QAA4B,EACT;EACnB,MAAMC,GAAG,GAAG,IAAIC,GAAG,CAAC,yCAAyC,EAAEL,UAAU,CAAC;EAC1EI,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACvC,OAAOC,KAAK,CAACJ,GAAG,EAAE;IAChBQ,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE;MACPC,aAAa,EAAE,UAAUjB,eAAe,CAACM,QAAQ,CAAC,EAAE;MACpDY,MAAM,EAAE,kBAAkB;MAC1B,kBAAkB,EAAEjB;IACtB;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osdk/widget.vite-plugin",
|
|
3
|
-
"version": "3.89.
|
|
3
|
+
"version": "3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b",
|
|
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",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"resolve-package-path": "^4.0.3",
|
|
32
32
|
"sirv": "^3.0.2",
|
|
33
33
|
"@osdk/foundry-config-json": "~1.14.0",
|
|
34
|
-
"@osdk/widget.api": "~3.89.
|
|
34
|
+
"@osdk/widget.api": "~3.89.1-main-9ca39db0f0511d2cbd2fc753113d4dbd6174c03b"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"vite": "^6.3.6 || ^7.3.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.
|
|
53
|
-
"@osdk/monorepo.
|
|
52
|
+
"@osdk/monorepo.tsconfig": "~0.7.0",
|
|
53
|
+
"@osdk/monorepo.api-extractor": "~0.7.0"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
|
56
56
|
"access": "public"
|