@osdk/widget.vite-plugin 3.5.0-beta.2 → 3.5.0-beta.21
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 +145 -0
- package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js +2 -2
- package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js.map +1 -1
- package/build/esm/build-plugin/buildWidgetSetManifest.js +8 -6
- package/build/esm/build-plugin/buildWidgetSetManifest.js.map +1 -1
- package/build/esm/common/validateWidgetConfig.js +2 -2
- package/build/esm/common/validateWidgetConfig.js.map +1 -1
- package/build/esm/dev-plugin/FoundryWidgetDevPlugin.js +10 -0
- package/build/esm/dev-plugin/FoundryWidgetDevPlugin.js.map +1 -1
- package/build/esm/index.js +2 -2
- package/build/esm/index.js.map +1 -1
- package/build/site/assets/{allPaths-DIfrnzgS.js → allPaths-DQ44lpsR.js} +1 -1
- package/build/site/assets/{allPathsLoader-D2qNtTEN.js → allPathsLoader-DxfybG1q.js} +2 -2
- package/build/site/assets/index-BAmk2r3A.css +1 -0
- package/build/site/assets/index-y3oyBPN4.js +8 -0
- package/build/site/assets/{splitPathsBySizeLoader-CuGV5Hrn.js → splitPathsBySizeLoader-B7rF-lK3.js} +1 -1
- package/build/site/index.html +2 -2
- package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts +2 -1
- package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts.map +1 -1
- package/build/types/build-plugin/buildWidgetSetManifest.d.ts +2 -1
- package/build/types/build-plugin/buildWidgetSetManifest.d.ts.map +1 -1
- package/build/types/index.d.ts +13 -1
- package/build/types/index.d.ts.map +1 -1
- package/package.json +5 -5
- package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js +0 -163
- package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js.map +0 -1
- package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js +0 -133
- package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js.map +0 -1
- package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js +0 -153
- package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js.map +0 -1
- package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js +0 -96
- package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js.map +0 -1
- package/build/esm/build-plugin/__tests__/isConfigFile.test.js +0 -26
- package/build/esm/build-plugin/__tests__/isConfigFile.test.js.map +0 -1
- package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js +0 -44
- package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js.map +0 -1
- package/build/esm/common/__tests__/extractWidgetConfig.test.js +0 -95
- package/build/esm/common/__tests__/extractWidgetConfig.test.js.map +0 -1
- package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js +0 -38
- package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js.map +0 -1
- package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js +0 -77
- package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js.map +0 -1
- package/build/esm/common/__tests__/validateWidgetConfig.test.js +0 -136
- package/build/esm/common/__tests__/validateWidgetConfig.test.js.map +0 -1
- package/build/esm/common/__tests__/visitNpmPackages.test.js +0 -74
- package/build/esm/common/__tests__/visitNpmPackages.test.js.map +0 -1
- package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js +0 -87
- package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js.map +0 -1
- package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js +0 -34
- package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js.map +0 -1
- package/build/esm/dev-plugin/__tests__/getBaseHref.test.js +0 -48
- package/build/esm/dev-plugin/__tests__/getBaseHref.test.js.map +0 -1
- package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js +0 -71
- package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js.map +0 -1
- package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js +0 -66
- package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js.map +0 -1
- package/build/site/assets/index-7niI6nVb.css +0 -1
- package/build/site/assets/index-D6Sm-vP3.js +0 -44
- package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts.map +0 -1
- package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts.map +0 -1
- package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts.map +0 -1
- package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts.map +0 -1
- package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts.map +0 -1
- package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts +0 -1
- package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts.map +0 -1
- package/build/types/common/__tests__/extractWidgetConfig.test.d.ts +0 -1
- package/build/types/common/__tests__/extractWidgetConfig.test.d.ts.map +0 -1
- package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts +0 -1
- package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts.map +0 -1
- package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts +0 -1
- package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts.map +0 -1
- package/build/types/common/__tests__/validateWidgetConfig.test.d.ts +0 -1
- package/build/types/common/__tests__/validateWidgetConfig.test.d.ts.map +0 -1
- package/build/types/common/__tests__/visitNpmPackages.test.d.ts +0 -1
- package/build/types/common/__tests__/visitNpmPackages.test.d.ts.map +0 -1
- package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts +0 -1
- package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts.map +0 -1
- package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts +0 -1
- package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts.map +0 -1
- package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts +0 -1
- package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts.map +0 -1
- package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts +0 -1
- package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts.map +0 -1
- package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts +0 -1
- package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts.map +0 -1
package/build/types/index.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
1
|
import type { PluginOption } from "vite";
|
|
2
|
-
export
|
|
2
|
+
export interface FoundryWidgetPluginOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Default values for widget configuration. Individual widget configs can override these values.
|
|
5
|
+
*/
|
|
6
|
+
defaults?: {
|
|
7
|
+
/**
|
|
8
|
+
* When set to `true`, the host will refresh any Ontology data passed to the widget
|
|
9
|
+
* when the widget is thought to have updated the Ontology by applying an action.
|
|
10
|
+
*/
|
|
11
|
+
refreshHostDataOnAction?: boolean
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export default function FoundryWidgetPlugin(options?: FoundryWidgetPluginOptions): PluginOption;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cAAc,oBAAoB,MAAO;
|
|
1
|
+
{"mappings":"AAgBA,cAAc,oBAAoB,MAAO;AAIzC,iBAAiB,2BAA2B;;;;CAI1C,WAAW;;;;;EAKT;CACD;AACF;eAEc,SAAS,oBACtBA,UAAU,6BACT","names":["options?: FoundryWidgetPluginOptions"],"sources":["../../src/index.ts"],"version":3,"file":"index.d.ts"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osdk/widget.vite-plugin",
|
|
3
|
-
"version": "3.5.0-beta.
|
|
3
|
+
"version": "3.5.0-beta.21",
|
|
4
4
|
"description": "A vite plugin that will extract parameter definitions from TS/JS files + entrypoint info into a manifest file to be uploaded to Foundry ",
|
|
5
5
|
"access": "public",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"picocolors": "^1.1.1",
|
|
31
31
|
"resolve-package-path": "^4.0.3",
|
|
32
32
|
"sirv": "^3.0.2",
|
|
33
|
-
"@osdk/
|
|
34
|
-
"@osdk/
|
|
33
|
+
"@osdk/foundry-config-json": "~1.7.0-beta.2",
|
|
34
|
+
"@osdk/widget.api": "~3.5.0-beta.21"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"vite": "^6.3.
|
|
37
|
+
"vite": "^6.3.6 || ^7.3.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@blueprintjs/core": "^5.19.1",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"react-dom": "^18.3.1",
|
|
48
48
|
"ts-expect": "^1.3.0",
|
|
49
49
|
"typescript": "~5.5.4",
|
|
50
|
-
"vite": "^
|
|
50
|
+
"vite": "^7.3.1",
|
|
51
51
|
"vitest": "^3.2.4",
|
|
52
52
|
"@osdk/monorepo.api-extractor": "~0.7.0-beta.1",
|
|
53
53
|
"@osdk/monorepo.tsconfig": "~0.7.0-beta.1"
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { describe, expect, test } from "vitest";
|
|
18
|
-
import { buildWidgetSetManifest } from "../buildWidgetSetManifest.js";
|
|
19
|
-
describe("buildWidgetSetManifest", () => {
|
|
20
|
-
const WIDGET_SET_RID = "ri.widgetregistry..widget-set.test-widget-set";
|
|
21
|
-
const WIDGET_SET_VERSION = "1.0.0";
|
|
22
|
-
test("builds a valid manifest with multiple widgets", () => {
|
|
23
|
-
const widgetBuilds = [createMockWidgetBuild("widgetOne"), createMockWidgetBuild("widgetTwo")];
|
|
24
|
-
const widgetSetInputSpec = {
|
|
25
|
-
discovered: {
|
|
26
|
-
sdks: [{
|
|
27
|
-
rid: "ri.foundry.main.sdk.test-sdk",
|
|
28
|
-
version: "2.0.0"
|
|
29
|
-
}]
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, widgetBuilds, widgetSetInputSpec);
|
|
33
|
-
expect(manifest).toEqual({
|
|
34
|
-
manifestVersion: "1.0.0",
|
|
35
|
-
widgetSet: {
|
|
36
|
-
rid: WIDGET_SET_RID,
|
|
37
|
-
version: WIDGET_SET_VERSION,
|
|
38
|
-
widgets: {
|
|
39
|
-
widgetOne: {
|
|
40
|
-
id: "widgetOne",
|
|
41
|
-
name: "Widget widgetOne",
|
|
42
|
-
description: "Widget widgetOne Description",
|
|
43
|
-
type: "workshopWidgetV1",
|
|
44
|
-
entrypointJs: [{
|
|
45
|
-
path: "scripts/widgetOne.js",
|
|
46
|
-
type: "module"
|
|
47
|
-
}],
|
|
48
|
-
entrypointCss: [{
|
|
49
|
-
path: "styles/widgetOne.css"
|
|
50
|
-
}],
|
|
51
|
-
parameters: {
|
|
52
|
-
stringParam: {
|
|
53
|
-
type: "string",
|
|
54
|
-
displayName: "String Parameter"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
events: {
|
|
58
|
-
updateParameters: {
|
|
59
|
-
displayName: "Update Parameters",
|
|
60
|
-
parameterUpdateIds: ["stringParam"]
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
permissions: ["camera"]
|
|
64
|
-
},
|
|
65
|
-
widgetTwo: {
|
|
66
|
-
id: "widgetTwo",
|
|
67
|
-
name: "Widget widgetTwo",
|
|
68
|
-
description: "Widget widgetTwo Description",
|
|
69
|
-
type: "workshopWidgetV1",
|
|
70
|
-
entrypointJs: [{
|
|
71
|
-
path: "scripts/widgetTwo.js",
|
|
72
|
-
type: "module"
|
|
73
|
-
}],
|
|
74
|
-
entrypointCss: [{
|
|
75
|
-
path: "styles/widgetTwo.css"
|
|
76
|
-
}],
|
|
77
|
-
parameters: {
|
|
78
|
-
stringParam: {
|
|
79
|
-
type: "string",
|
|
80
|
-
displayName: "String Parameter"
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
events: {
|
|
84
|
-
updateParameters: {
|
|
85
|
-
displayName: "Update Parameters",
|
|
86
|
-
parameterUpdateIds: ["stringParam"]
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
permissions: ["camera"]
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
inputSpec: widgetSetInputSpec
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
test("converts object set parameters correctly", () => {
|
|
97
|
-
const widgetBuild = createMockWidgetBuild("widget", {
|
|
98
|
-
objectSetParam: {
|
|
99
|
-
type: "objectSet",
|
|
100
|
-
displayName: "Object Set Parameter",
|
|
101
|
-
objectType: {
|
|
102
|
-
type: "object",
|
|
103
|
-
apiName: "employee",
|
|
104
|
-
internalDoNotUseMetadata: {
|
|
105
|
-
rid: "ri.ontology.main.object-type.employee"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
|
|
111
|
-
expect(manifest.widgetSet.widgets.widget.parameters.objectSetParam).toEqual({
|
|
112
|
-
type: "objectSet",
|
|
113
|
-
displayName: "Object Set Parameter",
|
|
114
|
-
objectTypeRids: ["ri.ontology.main.object-type.employee"]
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
test("trims leading slashes from paths", () => {
|
|
118
|
-
const widgetBuild = createMockWidgetBuild("widget", undefined, ["/scripts/widget.js"], ["/styles/widget.css"]);
|
|
119
|
-
const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
|
|
120
|
-
expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe("scripts/widget.js");
|
|
121
|
-
expect(manifest.widgetSet.widgets.widget.entrypointCss[0].path).toBe("styles/widget.css");
|
|
122
|
-
});
|
|
123
|
-
test("handles paths without leading slashes", () => {
|
|
124
|
-
const widgetBuild = createMockWidgetBuild("widget", undefined, ["scripts/widget.js"], ["styles/widget.css"]);
|
|
125
|
-
const manifest = buildWidgetSetManifest(WIDGET_SET_RID, WIDGET_SET_VERSION, [widgetBuild], {});
|
|
126
|
-
expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe("scripts/widget.js");
|
|
127
|
-
expect(manifest.widgetSet.widgets.widget.entrypointCss[0].path).toBe("styles/widget.css");
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
function createMockWidgetBuild(id, parameters = {
|
|
131
|
-
stringParam: {
|
|
132
|
-
type: "string",
|
|
133
|
-
displayName: "String Parameter"
|
|
134
|
-
}
|
|
135
|
-
}, scripts, stylesheets) {
|
|
136
|
-
return {
|
|
137
|
-
scripts: scripts?.map(src => ({
|
|
138
|
-
type: "script",
|
|
139
|
-
scriptType: "module",
|
|
140
|
-
src
|
|
141
|
-
})) ?? [{
|
|
142
|
-
type: "script",
|
|
143
|
-
scriptType: "module",
|
|
144
|
-
src: `/scripts/${id}.js`
|
|
145
|
-
}],
|
|
146
|
-
stylesheets: stylesheets ?? [`/styles/${id}.css`],
|
|
147
|
-
widgetConfig: {
|
|
148
|
-
id,
|
|
149
|
-
name: `Widget ${id}`,
|
|
150
|
-
description: `Widget ${id} Description`,
|
|
151
|
-
type: "workshop",
|
|
152
|
-
parameters,
|
|
153
|
-
events: {
|
|
154
|
-
updateParameters: {
|
|
155
|
-
displayName: "Update Parameters",
|
|
156
|
-
parameterUpdateIds: ["stringParam"]
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
permissions: ["camera"]
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
//# sourceMappingURL=buildWidgetSetManifest.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildWidgetSetManifest.test.js","names":["describe","expect","test","buildWidgetSetManifest","WIDGET_SET_RID","WIDGET_SET_VERSION","widgetBuilds","createMockWidgetBuild","widgetSetInputSpec","discovered","sdks","rid","version","manifest","toEqual","manifestVersion","widgetSet","widgets","widgetOne","id","name","description","type","entrypointJs","path","entrypointCss","parameters","stringParam","displayName","events","updateParameters","parameterUpdateIds","permissions","widgetTwo","inputSpec","widgetBuild","objectSetParam","objectType","apiName","internalDoNotUseMetadata","widget","objectTypeRids","undefined","toBe","scripts","stylesheets","map","src","scriptType","widgetConfig"],"sources":["buildWidgetSetManifest.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ParameterDefinition, WidgetSetInputSpec } from \"@osdk/widget.api\";\nimport { describe, expect, test } from \"vitest\";\nimport { buildWidgetSetManifest } from \"../buildWidgetSetManifest.js\";\nimport type { WidgetBuildOutputs } from \"../getWidgetBuildOutputs.js\";\n\ndescribe(\"buildWidgetSetManifest\", () => {\n const WIDGET_SET_RID = \"ri.widgetregistry..widget-set.test-widget-set\";\n const WIDGET_SET_VERSION = \"1.0.0\";\n\n test(\"builds a valid manifest with multiple widgets\", () => {\n const widgetBuilds: WidgetBuildOutputs[] = [\n createMockWidgetBuild(\"widgetOne\"),\n createMockWidgetBuild(\"widgetTwo\"),\n ];\n\n const widgetSetInputSpec: WidgetSetInputSpec = {\n discovered: {\n sdks: [\n {\n rid: \"ri.foundry.main.sdk.test-sdk\",\n version: \"2.0.0\",\n },\n ],\n },\n };\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest).toEqual({\n manifestVersion: \"1.0.0\",\n widgetSet: {\n rid: WIDGET_SET_RID,\n version: WIDGET_SET_VERSION,\n widgets: {\n widgetOne: {\n id: \"widgetOne\",\n name: \"Widget widgetOne\",\n description: \"Widget widgetOne Description\",\n type: \"workshopWidgetV1\",\n entrypointJs: [\n { path: \"scripts/widgetOne.js\", type: \"module\" },\n ],\n entrypointCss: [\n { path: \"styles/widgetOne.css\" },\n ],\n parameters: {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n widgetTwo: {\n id: \"widgetTwo\",\n name: \"Widget widgetTwo\",\n description: \"Widget widgetTwo Description\",\n type: \"workshopWidgetV1\",\n entrypointJs: [\n { path: \"scripts/widgetTwo.js\", type: \"module\" },\n ],\n entrypointCss: [\n { path: \"styles/widgetTwo.css\" },\n ],\n parameters: {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n },\n inputSpec: widgetSetInputSpec,\n },\n });\n });\n\n test(\"converts object set parameters correctly\", () => {\n const widgetBuild = createMockWidgetBuild(\"widget\", {\n objectSetParam: {\n type: \"objectSet\",\n displayName: \"Object Set Parameter\",\n objectType: {\n type: \"object\",\n apiName: \"employee\",\n internalDoNotUseMetadata: {\n rid: \"ri.ontology.main.object-type.employee\",\n },\n },\n },\n });\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.parameters.objectSetParam).toEqual(\n {\n type: \"objectSet\",\n displayName: \"Object Set Parameter\",\n objectTypeRids: [\"ri.ontology.main.object-type.employee\"],\n },\n );\n });\n\n test(\"trims leading slashes from paths\", () => {\n const widgetBuild = createMockWidgetBuild(\n \"widget\",\n undefined,\n [\"/scripts/widget.js\"],\n [\"/styles/widget.css\"],\n );\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe(\n \"scripts/widget.js\",\n );\n expect(manifest.widgetSet.widgets.widget.entrypointCss![0].path).toBe(\n \"styles/widget.css\",\n );\n });\n\n test(\"handles paths without leading slashes\", () => {\n const widgetBuild = createMockWidgetBuild(\n \"widget\",\n undefined,\n [\"scripts/widget.js\"],\n [\"styles/widget.css\"],\n );\n\n const widgetBuilds: WidgetBuildOutputs[] = [widgetBuild];\n const widgetSetInputSpec: WidgetSetInputSpec = {};\n\n const manifest = buildWidgetSetManifest(\n WIDGET_SET_RID,\n WIDGET_SET_VERSION,\n widgetBuilds,\n widgetSetInputSpec,\n );\n\n expect(manifest.widgetSet.widgets.widget.entrypointJs[0].path).toBe(\n \"scripts/widget.js\",\n );\n expect(manifest.widgetSet.widgets.widget.entrypointCss![0].path).toBe(\n \"styles/widget.css\",\n );\n });\n});\n\nfunction createMockWidgetBuild(\n id: string,\n parameters: Record<string, ParameterDefinition> = {\n stringParam: {\n type: \"string\",\n displayName: \"String Parameter\",\n },\n },\n scripts?: string[],\n stylesheets?: string[],\n): WidgetBuildOutputs {\n return {\n scripts: scripts?.map(src => ({\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src,\n }))\n ?? [\n {\n type: \"script\",\n scriptType: \"module\",\n src: `/scripts/${id}.js`,\n },\n ],\n stylesheets: stylesheets ?? [`/styles/${id}.css`],\n widgetConfig: {\n id,\n name: `Widget ${id}`,\n description: `Widget ${id} Description`,\n type: \"workshop\",\n parameters,\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"stringParam\"],\n },\n },\n permissions: [\"camera\"],\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import fs from "fs";
|
|
18
|
-
import { expect, test, vi } from "vitest";
|
|
19
|
-
import { extractBuildOutputs } from "../extractBuildOutputs.js";
|
|
20
|
-
vi.mock("fs");
|
|
21
|
-
const EXAMPLE_HTML = `
|
|
22
|
-
<!DOCTYPE html>
|
|
23
|
-
<html>
|
|
24
|
-
<head>
|
|
25
|
-
<script src="/script1.js" type="text/javascript"></script>
|
|
26
|
-
<script src="/script2.js" type="module"></script>
|
|
27
|
-
<script src="/script3.js"></script>
|
|
28
|
-
<link rel="stylesheet" href="/styles.css">
|
|
29
|
-
<link rel="stylesheet" href="/more-styles.css">
|
|
30
|
-
</head>
|
|
31
|
-
<body>
|
|
32
|
-
<script src="/script4.js" type="text/javascript"></script>
|
|
33
|
-
</body>
|
|
34
|
-
</html>
|
|
35
|
-
`;
|
|
36
|
-
test("extractBuildOutputs with scripts and stylesheets", () => {
|
|
37
|
-
vi.mocked(fs.readFileSync).mockReturnValue(EXAMPLE_HTML);
|
|
38
|
-
const result = extractBuildOutputs("dummy/path.html");
|
|
39
|
-
expect(result).toEqual({
|
|
40
|
-
scripts: [{
|
|
41
|
-
type: "script",
|
|
42
|
-
src: "/script1.js",
|
|
43
|
-
scriptType: "text/javascript"
|
|
44
|
-
}, {
|
|
45
|
-
type: "script",
|
|
46
|
-
src: "/script2.js",
|
|
47
|
-
scriptType: "module"
|
|
48
|
-
}, {
|
|
49
|
-
type: "script",
|
|
50
|
-
src: "/script3.js",
|
|
51
|
-
scriptType: "text/javascript"
|
|
52
|
-
}, {
|
|
53
|
-
type: "script",
|
|
54
|
-
src: "/script4.js",
|
|
55
|
-
scriptType: "text/javascript"
|
|
56
|
-
}],
|
|
57
|
-
stylesheets: ["/styles.css", "/more-styles.css"]
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
test("extractBuildOutputs with no scripts or stylesheets", () => {
|
|
61
|
-
vi.mocked(fs.readFileSync).mockReturnValue("<html><body></body></html>");
|
|
62
|
-
const result = extractBuildOutputs("dummy/path.html");
|
|
63
|
-
expect(result).toEqual({
|
|
64
|
-
scripts: [],
|
|
65
|
-
stylesheets: []
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
test("extractBuildOutputs throws error for inline scripts", () => {
|
|
69
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
70
|
-
<html>
|
|
71
|
-
<body>
|
|
72
|
-
<script>console.log("inline");</script>
|
|
73
|
-
</body>
|
|
74
|
-
</html>
|
|
75
|
-
`);
|
|
76
|
-
expect(() => extractBuildOutputs("dummy/path.html")).toThrow("Unexpected inline content found in Vite HTML output");
|
|
77
|
-
});
|
|
78
|
-
test("extractBuildOutputs throws error for invalid script type", () => {
|
|
79
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
80
|
-
<html>
|
|
81
|
-
<head>
|
|
82
|
-
<script src="/script.js" type="text/unknown"></script>
|
|
83
|
-
</head>
|
|
84
|
-
</html>
|
|
85
|
-
`);
|
|
86
|
-
expect(() => extractBuildOutputs("dummy/path.html")).toThrow("Invalid script type attribute found in Vite HTML output: text/unknown");
|
|
87
|
-
});
|
|
88
|
-
test("extractBuildOutputs throws error for unexpected script attributes", () => {
|
|
89
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
90
|
-
<html>
|
|
91
|
-
<head>
|
|
92
|
-
<script src="/script.js" type="module" async></script>
|
|
93
|
-
</head>
|
|
94
|
-
</html>
|
|
95
|
-
`);
|
|
96
|
-
expect(() => extractBuildOutputs("dummy/path.html")).toThrow("Unexpected async attribute found in Vite HTML output");
|
|
97
|
-
});
|
|
98
|
-
test("extractBuildOutputs throws error for stylesheet without href", () => {
|
|
99
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
100
|
-
<html>
|
|
101
|
-
<head>
|
|
102
|
-
<link rel="stylesheet">
|
|
103
|
-
</head>
|
|
104
|
-
</html>
|
|
105
|
-
`);
|
|
106
|
-
expect(() => extractBuildOutputs("dummy/path.html")).toThrow("Missing href attribute in Vite HTML output");
|
|
107
|
-
});
|
|
108
|
-
test("extractBuildOutputs ignores non-stylesheet links", () => {
|
|
109
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
110
|
-
<html>
|
|
111
|
-
<head>
|
|
112
|
-
<link rel="icon" href="/favicon.ico">
|
|
113
|
-
<link rel="stylesheet" href="/styles.css">
|
|
114
|
-
</head>
|
|
115
|
-
</html>
|
|
116
|
-
`);
|
|
117
|
-
const result = extractBuildOutputs("dummy/path.html");
|
|
118
|
-
expect(result).toEqual({
|
|
119
|
-
scripts: [],
|
|
120
|
-
stylesheets: ["/styles.css"]
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
test("extractBuildOutputs throws error for unexpected link attributes", () => {
|
|
124
|
-
vi.mocked(fs.readFileSync).mockReturnValue(`
|
|
125
|
-
<html>
|
|
126
|
-
<head>
|
|
127
|
-
<link rel="stylesheet" href="/styles.css" async>
|
|
128
|
-
</head>
|
|
129
|
-
</html>
|
|
130
|
-
`);
|
|
131
|
-
expect(() => extractBuildOutputs("dummy/path.html")).toThrow("Unexpected async attribute found in Vite HTML output");
|
|
132
|
-
});
|
|
133
|
-
//# sourceMappingURL=extractBuildOutputs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extractBuildOutputs.test.js","names":["fs","expect","test","vi","extractBuildOutputs","mock","EXAMPLE_HTML","mocked","readFileSync","mockReturnValue","result","toEqual","scripts","type","src","scriptType","stylesheets","toThrow"],"sources":["extractBuildOutputs.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport fs from \"fs\";\nimport { expect, test, vi } from \"vitest\";\nimport { extractBuildOutputs } from \"../extractBuildOutputs.js\";\n\nvi.mock(\"fs\");\n\nconst EXAMPLE_HTML = `\n<!DOCTYPE html>\n<html>\n<head>\n <script src=\"/script1.js\" type=\"text/javascript\"></script>\n <script src=\"/script2.js\" type=\"module\"></script>\n <script src=\"/script3.js\"></script>\n <link rel=\"stylesheet\" href=\"/styles.css\">\n <link rel=\"stylesheet\" href=\"/more-styles.css\">\n</head>\n<body>\n <script src=\"/script4.js\" type=\"text/javascript\"></script>\n</body>\n</html>\n`;\n\ntest(\"extractBuildOutputs with scripts and stylesheets\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(EXAMPLE_HTML);\n const result = extractBuildOutputs(\"dummy/path.html\");\n expect(result).toEqual({\n scripts: [\n { type: \"script\", src: \"/script1.js\", scriptType: \"text/javascript\" },\n { type: \"script\", src: \"/script2.js\", scriptType: \"module\" },\n { type: \"script\", src: \"/script3.js\", scriptType: \"text/javascript\" },\n { type: \"script\", src: \"/script4.js\", scriptType: \"text/javascript\" },\n ],\n stylesheets: [\"/styles.css\", \"/more-styles.css\"],\n });\n});\n\ntest(\"extractBuildOutputs with no scripts or stylesheets\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(\"<html><body></body></html>\");\n const result = extractBuildOutputs(\"dummy/path.html\");\n expect(result).toEqual({\n scripts: [],\n stylesheets: [],\n });\n});\n\ntest(\"extractBuildOutputs throws error for inline scripts\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <body>\n <script>console.log(\"inline\");</script>\n </body>\n </html>\n `);\n expect(() => extractBuildOutputs(\"dummy/path.html\")).toThrow(\n \"Unexpected inline content found in Vite HTML output\",\n );\n});\n\ntest(\"extractBuildOutputs throws error for invalid script type\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <head>\n <script src=\"/script.js\" type=\"text/unknown\"></script>\n </head>\n </html>\n `);\n expect(() => extractBuildOutputs(\"dummy/path.html\")).toThrow(\n \"Invalid script type attribute found in Vite HTML output: text/unknown\",\n );\n});\n\ntest(\"extractBuildOutputs throws error for unexpected script attributes\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <head>\n <script src=\"/script.js\" type=\"module\" async></script>\n </head>\n </html>\n `);\n expect(() => extractBuildOutputs(\"dummy/path.html\")).toThrow(\n \"Unexpected async attribute found in Vite HTML output\",\n );\n});\n\ntest(\"extractBuildOutputs throws error for stylesheet without href\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <head>\n <link rel=\"stylesheet\">\n </head>\n </html>\n `);\n expect(() => extractBuildOutputs(\"dummy/path.html\")).toThrow(\n \"Missing href attribute in Vite HTML output\",\n );\n});\n\ntest(\"extractBuildOutputs ignores non-stylesheet links\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <head>\n <link rel=\"icon\" href=\"/favicon.ico\">\n <link rel=\"stylesheet\" href=\"/styles.css\">\n </head>\n </html>\n `);\n const result = extractBuildOutputs(\"dummy/path.html\");\n expect(result).toEqual({\n scripts: [],\n stylesheets: [\"/styles.css\"],\n });\n});\n\ntest(\"extractBuildOutputs throws error for unexpected link attributes\", () => {\n vi.mocked(fs.readFileSync).mockReturnValue(`\n <html>\n <head>\n <link rel=\"stylesheet\" href=\"/styles.css\" async>\n </head>\n </html>\n `);\n expect(() => extractBuildOutputs(\"dummy/path.html\")).toThrow(\n \"Unexpected async attribute found in Vite HTML output\",\n );\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { beforeEach, expect, test, vi } from "vitest";
|
|
18
|
-
import * as extractWidgetConfigModule from "../../common/extractWidgetConfig.js";
|
|
19
|
-
import * as extractBuildOutputsModule from "../extractBuildOutputs.js";
|
|
20
|
-
import { getWidgetBuildOutputs } from "../getWidgetBuildOutputs.js";
|
|
21
|
-
vi.mock("../extractBuildOutputs.js");
|
|
22
|
-
vi.mock("../../common/extractWidgetConfig.js");
|
|
23
|
-
const MOCK_BUILD_DIR = "/build";
|
|
24
|
-
const MOCK_INPUT = "index.html";
|
|
25
|
-
const MOCK_WIDGET_ID = "widget-id";
|
|
26
|
-
const MOCK_SERVER = {};
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
vi.clearAllMocks();
|
|
29
|
-
});
|
|
30
|
-
test("getWidgetBuildOutputs successfully matches widget build outputs", async () => {
|
|
31
|
-
const mockBuildOutputs = {
|
|
32
|
-
scripts: [{
|
|
33
|
-
type: "script",
|
|
34
|
-
scriptType: "module",
|
|
35
|
-
src: "/chunk.js"
|
|
36
|
-
}],
|
|
37
|
-
stylesheets: ["/styles.css"]
|
|
38
|
-
};
|
|
39
|
-
vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue(mockBuildOutputs);
|
|
40
|
-
const widgetConfig = mockWidgetConfig(MOCK_WIDGET_ID);
|
|
41
|
-
vi.mocked(extractWidgetConfigModule.extractWidgetConfig).mockResolvedValue(widgetConfig);
|
|
42
|
-
const entryChunk = mockChunk({
|
|
43
|
-
fileName: "chunk.js",
|
|
44
|
-
isEntry: true,
|
|
45
|
-
facadeModuleId: "/src/widget.js",
|
|
46
|
-
moduleIds: ["/src/widget.config.js"]
|
|
47
|
-
});
|
|
48
|
-
const result = await getWidgetBuildOutputs({
|
|
49
|
-
"chunk.js": entryChunk
|
|
50
|
-
}, MOCK_INPUT, MOCK_BUILD_DIR, MOCK_SERVER);
|
|
51
|
-
expect(result).toEqual({
|
|
52
|
-
...mockBuildOutputs,
|
|
53
|
-
widgetConfig
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
test("getWidgetBuildOutputs throws error when entrypoint chunk not found", async () => {
|
|
57
|
-
vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({
|
|
58
|
-
scripts: [{
|
|
59
|
-
type: "script",
|
|
60
|
-
scriptType: "module",
|
|
61
|
-
src: "/non-existent.js"
|
|
62
|
-
}],
|
|
63
|
-
stylesheets: []
|
|
64
|
-
});
|
|
65
|
-
const nonEntryChunk = mockChunk({
|
|
66
|
-
fileName: "chunk.js",
|
|
67
|
-
isEntry: true,
|
|
68
|
-
facadeModuleId: "/src/widget.js",
|
|
69
|
-
moduleIds: []
|
|
70
|
-
});
|
|
71
|
-
await expect(() => getWidgetBuildOutputs({
|
|
72
|
-
"chunk.js": nonEntryChunk
|
|
73
|
-
}, MOCK_INPUT, MOCK_BUILD_DIR, MOCK_SERVER)).rejects.toThrow("Entrypoint chunk not found for input file: index.html");
|
|
74
|
-
});
|
|
75
|
-
test("getWidgetBuildOutputs throws error when no config file found", async () => {
|
|
76
|
-
vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({
|
|
77
|
-
scripts: [{
|
|
78
|
-
type: "script",
|
|
79
|
-
scriptType: "module",
|
|
80
|
-
src: "/chunk.js"
|
|
81
|
-
}],
|
|
82
|
-
stylesheets: []
|
|
83
|
-
});
|
|
84
|
-
const entryChunk = mockChunk({
|
|
85
|
-
fileName: "chunk.js",
|
|
86
|
-
isEntry: true,
|
|
87
|
-
facadeModuleId: "/src/widget.js",
|
|
88
|
-
moduleIds: []
|
|
89
|
-
});
|
|
90
|
-
await expect(() => getWidgetBuildOutputs({
|
|
91
|
-
"chunk.js": entryChunk
|
|
92
|
-
}, MOCK_INPUT, MOCK_BUILD_DIR, MOCK_SERVER)).rejects.toThrow("No widget config files found for entrypoint /src/widget.js");
|
|
93
|
-
});
|
|
94
|
-
test("getWidgetBuildOutputs throws error when multiple config files found", async () => {
|
|
95
|
-
vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({
|
|
96
|
-
scripts: [{
|
|
97
|
-
type: "script",
|
|
98
|
-
scriptType: "module",
|
|
99
|
-
src: "/chunk.js"
|
|
100
|
-
}],
|
|
101
|
-
stylesheets: []
|
|
102
|
-
});
|
|
103
|
-
const entryChunk = mockChunk({
|
|
104
|
-
fileName: "chunk.js",
|
|
105
|
-
isEntry: true,
|
|
106
|
-
facadeModuleId: "/src/widget.js",
|
|
107
|
-
moduleIds: ["/src/widget.config.js", "/src/widget.config.ts"]
|
|
108
|
-
});
|
|
109
|
-
await expect(() => getWidgetBuildOutputs({
|
|
110
|
-
"chunk.js": entryChunk
|
|
111
|
-
}, MOCK_INPUT, MOCK_BUILD_DIR, MOCK_SERVER)).rejects.toThrow("Multiple widget config files found for entrypoint /src/widget.js");
|
|
112
|
-
});
|
|
113
|
-
test("getWidgetBuildOutputs throws error when extractWidgetConfig fails", async () => {
|
|
114
|
-
vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({
|
|
115
|
-
scripts: [{
|
|
116
|
-
type: "script",
|
|
117
|
-
scriptType: "module",
|
|
118
|
-
src: "/chunk.js"
|
|
119
|
-
}],
|
|
120
|
-
stylesheets: []
|
|
121
|
-
});
|
|
122
|
-
const entryChunk = mockChunk({
|
|
123
|
-
fileName: "chunk.js",
|
|
124
|
-
isEntry: true,
|
|
125
|
-
facadeModuleId: "/src/widget.js",
|
|
126
|
-
moduleIds: ["/src/widget.config.js"]
|
|
127
|
-
});
|
|
128
|
-
vi.mocked(extractWidgetConfigModule.extractWidgetConfig).mockRejectedValue(new Error("Config extraction failed"));
|
|
129
|
-
await expect(() => getWidgetBuildOutputs({
|
|
130
|
-
"chunk.js": entryChunk
|
|
131
|
-
}, MOCK_INPUT, MOCK_BUILD_DIR, MOCK_SERVER)).rejects.toThrow("Config extraction failed");
|
|
132
|
-
});
|
|
133
|
-
function mockChunk(props) {
|
|
134
|
-
return {
|
|
135
|
-
type: "chunk",
|
|
136
|
-
fileName: "chunk.js",
|
|
137
|
-
isEntry: false,
|
|
138
|
-
facadeModuleId: null,
|
|
139
|
-
moduleIds: [],
|
|
140
|
-
...props
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
function mockWidgetConfig(id) {
|
|
144
|
-
return {
|
|
145
|
-
id,
|
|
146
|
-
name: id,
|
|
147
|
-
description: id,
|
|
148
|
-
type: "workshop",
|
|
149
|
-
parameters: {},
|
|
150
|
-
events: {}
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=getWidgetBuildOutputs.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getWidgetBuildOutputs.test.js","names":["beforeEach","expect","test","vi","extractWidgetConfigModule","extractBuildOutputsModule","getWidgetBuildOutputs","mock","MOCK_BUILD_DIR","MOCK_INPUT","MOCK_WIDGET_ID","MOCK_SERVER","clearAllMocks","mockBuildOutputs","scripts","type","scriptType","src","stylesheets","mocked","extractBuildOutputs","mockReturnValue","widgetConfig","mockWidgetConfig","extractWidgetConfig","mockResolvedValue","entryChunk","mockChunk","fileName","isEntry","facadeModuleId","moduleIds","result","toEqual","nonEntryChunk","rejects","toThrow","mockRejectedValue","Error","props","id","name","description","parameters","events"],"sources":["getWidgetBuildOutputs.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ParameterConfig, WidgetConfig } from \"@osdk/widget.api\";\nimport type { Rollup, ViteDevServer } from \"vite\";\nimport { beforeEach, expect, test, vi } from \"vitest\";\nimport * as extractWidgetConfigModule from \"../../common/extractWidgetConfig.js\";\nimport * as extractBuildOutputsModule from \"../extractBuildOutputs.js\";\nimport { getWidgetBuildOutputs } from \"../getWidgetBuildOutputs.js\";\n\nvi.mock(\"../extractBuildOutputs.js\");\nvi.mock(\"../../common/extractWidgetConfig.js\");\n\nconst MOCK_BUILD_DIR = \"/build\";\nconst MOCK_INPUT = \"index.html\";\nconst MOCK_WIDGET_ID = \"widget-id\";\nconst MOCK_SERVER = {} as ViteDevServer;\n\nbeforeEach(() => {\n vi.clearAllMocks();\n});\n\ntest(\"getWidgetBuildOutputs successfully matches widget build outputs\", async () => {\n const mockBuildOutputs = {\n scripts: [{\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src: \"/chunk.js\",\n }],\n stylesheets: [\"/styles.css\"],\n };\n vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue(\n mockBuildOutputs,\n );\n\n const configFile = \"/src/widget.config.js\";\n const widgetConfig = mockWidgetConfig(MOCK_WIDGET_ID);\n vi.mocked(extractWidgetConfigModule.extractWidgetConfig).mockResolvedValue(\n widgetConfig,\n );\n\n const entryChunk = mockChunk({\n fileName: \"chunk.js\",\n isEntry: true,\n facadeModuleId: \"/src/widget.js\",\n moduleIds: [configFile],\n });\n\n const result = await getWidgetBuildOutputs(\n { \"chunk.js\": entryChunk },\n MOCK_INPUT,\n MOCK_BUILD_DIR,\n MOCK_SERVER,\n );\n expect(result).toEqual({\n ...mockBuildOutputs,\n widgetConfig,\n });\n});\n\ntest(\"getWidgetBuildOutputs throws error when entrypoint chunk not found\", async () => {\n vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({\n scripts: [{\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src: \"/non-existent.js\",\n }],\n stylesheets: [],\n });\n\n const nonEntryChunk = mockChunk({\n fileName: \"chunk.js\",\n isEntry: true,\n facadeModuleId: \"/src/widget.js\",\n moduleIds: [],\n });\n\n await expect(() =>\n getWidgetBuildOutputs(\n { \"chunk.js\": nonEntryChunk },\n MOCK_INPUT,\n MOCK_BUILD_DIR,\n MOCK_SERVER,\n )\n )\n .rejects.toThrow(\"Entrypoint chunk not found for input file: index.html\");\n});\n\ntest(\"getWidgetBuildOutputs throws error when no config file found\", async () => {\n vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({\n scripts: [{\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src: \"/chunk.js\",\n }],\n stylesheets: [],\n });\n\n const entryChunk = mockChunk({\n fileName: \"chunk.js\",\n isEntry: true,\n facadeModuleId: \"/src/widget.js\",\n moduleIds: [],\n });\n\n await expect(() =>\n getWidgetBuildOutputs(\n { \"chunk.js\": entryChunk },\n MOCK_INPUT,\n MOCK_BUILD_DIR,\n MOCK_SERVER,\n )\n )\n .rejects.toThrow(\n \"No widget config files found for entrypoint /src/widget.js\",\n );\n});\n\ntest(\"getWidgetBuildOutputs throws error when multiple config files found\", async () => {\n vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({\n scripts: [{\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src: \"/chunk.js\",\n }],\n stylesheets: [],\n });\n\n const entryChunk = mockChunk({\n fileName: \"chunk.js\",\n isEntry: true,\n facadeModuleId: \"/src/widget.js\",\n moduleIds: [\"/src/widget.config.js\", \"/src/widget.config.ts\"],\n });\n\n await expect(() =>\n getWidgetBuildOutputs(\n { \"chunk.js\": entryChunk },\n MOCK_INPUT,\n MOCK_BUILD_DIR,\n MOCK_SERVER,\n )\n )\n .rejects.toThrow(\n \"Multiple widget config files found for entrypoint /src/widget.js\",\n );\n});\n\ntest(\"getWidgetBuildOutputs throws error when extractWidgetConfig fails\", async () => {\n vi.mocked(extractBuildOutputsModule.extractBuildOutputs).mockReturnValue({\n scripts: [{\n type: \"script\" as const,\n scriptType: \"module\" as const,\n src: \"/chunk.js\",\n }],\n stylesheets: [],\n });\n\n const configFile = \"/src/widget.config.js\";\n const entryChunk = mockChunk({\n fileName: \"chunk.js\",\n isEntry: true,\n facadeModuleId: \"/src/widget.js\",\n moduleIds: [configFile],\n });\n\n vi.mocked(extractWidgetConfigModule.extractWidgetConfig).mockRejectedValue(\n new Error(\"Config extraction failed\"),\n );\n\n await expect(() =>\n getWidgetBuildOutputs(\n { \"chunk.js\": entryChunk },\n MOCK_INPUT,\n MOCK_BUILD_DIR,\n MOCK_SERVER,\n )\n )\n .rejects.toThrow(\"Config extraction failed\");\n});\n\nfunction mockChunk(props: Partial<Rollup.OutputChunk>): Rollup.OutputChunk {\n return {\n type: \"chunk\",\n fileName: \"chunk.js\",\n isEntry: false,\n facadeModuleId: null,\n moduleIds: [],\n ...props,\n } as Rollup.OutputChunk;\n}\n\nfunction mockWidgetConfig(id: string): WidgetConfig<ParameterConfig> {\n return {\n id,\n name: id,\n description: id,\n type: \"workshop\",\n parameters: {},\n events: {},\n };\n}\n"],"mappings":"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","ignoreList":[]}
|