@osdk/widget.vite-plugin 3.5.0-beta.9 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js +2 -2
  3. package/build/esm/build-plugin/FoundryWidgetBuildPlugin.js.map +1 -1
  4. package/build/esm/build-plugin/buildWidgetSetManifest.js +5 -4
  5. package/build/esm/build-plugin/buildWidgetSetManifest.js.map +1 -1
  6. package/build/esm/index.js +2 -2
  7. package/build/esm/index.js.map +1 -1
  8. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts +2 -1
  9. package/build/types/build-plugin/FoundryWidgetBuildPlugin.d.ts.map +1 -1
  10. package/build/types/build-plugin/buildWidgetSetManifest.d.ts +2 -1
  11. package/build/types/build-plugin/buildWidgetSetManifest.d.ts.map +1 -1
  12. package/build/types/index.d.ts +13 -1
  13. package/build/types/index.d.ts.map +1 -1
  14. package/package.json +6 -6
  15. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js +0 -186
  16. package/build/esm/build-plugin/__tests__/buildWidgetSetManifest.test.js.map +0 -1
  17. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js +0 -133
  18. package/build/esm/build-plugin/__tests__/extractBuildOutputs.test.js.map +0 -1
  19. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js +0 -153
  20. package/build/esm/build-plugin/__tests__/getWidgetBuildOutputs.test.js.map +0 -1
  21. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js +0 -96
  22. package/build/esm/build-plugin/__tests__/getWidgetSetInputSpec.test.js.map +0 -1
  23. package/build/esm/build-plugin/__tests__/isConfigFile.test.js +0 -26
  24. package/build/esm/build-plugin/__tests__/isConfigFile.test.js.map +0 -1
  25. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js +0 -44
  26. package/build/esm/build-plugin/__tests__/validateWidgetSet.test.js.map +0 -1
  27. package/build/esm/common/__tests__/extractWidgetConfig.test.js +0 -95
  28. package/build/esm/common/__tests__/extractWidgetConfig.test.js.map +0 -1
  29. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js +0 -38
  30. package/build/esm/common/__tests__/getInputHtmlEntrypoints.test.js.map +0 -1
  31. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js +0 -77
  32. package/build/esm/common/__tests__/standardizePathAndFileExtension.test.js.map +0 -1
  33. package/build/esm/common/__tests__/validateWidgetConfig.test.js +0 -151
  34. package/build/esm/common/__tests__/validateWidgetConfig.test.js.map +0 -1
  35. package/build/esm/common/__tests__/visitNpmPackages.test.js +0 -74
  36. package/build/esm/common/__tests__/visitNpmPackages.test.js.map +0 -1
  37. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js +0 -87
  38. package/build/esm/dev-plugin/__tests__/codeWorkspacesMode.test.js.map +0 -1
  39. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js +0 -34
  40. package/build/esm/dev-plugin/__tests__/extractInjectedScripts.test.js.map +0 -1
  41. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js +0 -48
  42. package/build/esm/dev-plugin/__tests__/getBaseHref.test.js.map +0 -1
  43. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js +0 -71
  44. package/build/esm/dev-plugin/__tests__/getWidgetIdOverrideMap.test.js.map +0 -1
  45. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js +0 -66
  46. package/build/esm/dev-plugin/__tests__/validateDevEnvironment.test.js.map +0 -1
  47. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts +0 -1
  48. package/build/types/build-plugin/__tests__/buildWidgetSetManifest.test.d.ts.map +0 -1
  49. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts +0 -1
  50. package/build/types/build-plugin/__tests__/extractBuildOutputs.test.d.ts.map +0 -1
  51. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts +0 -1
  52. package/build/types/build-plugin/__tests__/getWidgetBuildOutputs.test.d.ts.map +0 -1
  53. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts +0 -1
  54. package/build/types/build-plugin/__tests__/getWidgetSetInputSpec.test.d.ts.map +0 -1
  55. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts +0 -1
  56. package/build/types/build-plugin/__tests__/isConfigFile.test.d.ts.map +0 -1
  57. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts +0 -1
  58. package/build/types/build-plugin/__tests__/validateWidgetSet.test.d.ts.map +0 -1
  59. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts +0 -1
  60. package/build/types/common/__tests__/extractWidgetConfig.test.d.ts.map +0 -1
  61. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts +0 -1
  62. package/build/types/common/__tests__/getInputHtmlEntrypoints.test.d.ts.map +0 -1
  63. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts +0 -1
  64. package/build/types/common/__tests__/standardizePathAndFileExtension.test.d.ts.map +0 -1
  65. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts +0 -1
  66. package/build/types/common/__tests__/validateWidgetConfig.test.d.ts.map +0 -1
  67. package/build/types/common/__tests__/visitNpmPackages.test.d.ts +0 -1
  68. package/build/types/common/__tests__/visitNpmPackages.test.d.ts.map +0 -1
  69. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts +0 -1
  70. package/build/types/dev-plugin/__tests__/codeWorkspacesMode.test.d.ts.map +0 -1
  71. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts +0 -1
  72. package/build/types/dev-plugin/__tests__/extractInjectedScripts.test.d.ts.map +0 -1
  73. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts +0 -1
  74. package/build/types/dev-plugin/__tests__/getBaseHref.test.d.ts.map +0 -1
  75. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts +0 -1
  76. package/build/types/dev-plugin/__tests__/getWidgetIdOverrideMap.test.d.ts.map +0 -1
  77. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts +0 -1
  78. package/build/types/dev-plugin/__tests__/validateDevEnvironment.test.d.ts.map +0 -1
@@ -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":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,EAAE,MAAM,IAAI;AACnB,SAASC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAQ,QAAQ;AACzC,SAASC,mBAAmB,QAAQ,2BAA2B;AAE/DD,EAAE,CAACE,IAAI,CAAC,IAAI,CAAC;AAEb,MAAMC,YAAY,GAAG;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAEDJ,IAAI,CAAC,kDAAkD,EAAE,MAAM;EAC7DC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAACH,YAAY,CAAC;EACxD,MAAMI,MAAM,GAAGN,mBAAmB,CAAC,iBAAiB,CAAC;EACrDH,MAAM,CAACS,MAAM,CAAC,CAACC,OAAO,CAAC;IACrBC,OAAO,EAAE,CACP;MAAEC,IAAI,EAAE,QAAQ;MAAEC,GAAG,EAAE,aAAa;MAAEC,UAAU,EAAE;IAAkB,CAAC,EACrE;MAAEF,IAAI,EAAE,QAAQ;MAAEC,GAAG,EAAE,aAAa;MAAEC,UAAU,EAAE;IAAS,CAAC,EAC5D;MAAEF,IAAI,EAAE,QAAQ;MAAEC,GAAG,EAAE,aAAa;MAAEC,UAAU,EAAE;IAAkB,CAAC,EACrE;MAAEF,IAAI,EAAE,QAAQ;MAAEC,GAAG,EAAE,aAAa;MAAEC,UAAU,EAAE;IAAkB,CAAC,CACtE;IACDC,WAAW,EAAE,CAAC,aAAa,EAAE,kBAAkB;EACjD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFd,IAAI,CAAC,oDAAoD,EAAE,MAAM;EAC/DC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC,4BAA4B,CAAC;EACxE,MAAMC,MAAM,GAAGN,mBAAmB,CAAC,iBAAiB,CAAC;EACrDH,MAAM,CAACS,MAAM,CAAC,CAACC,OAAO,CAAC;IACrBC,OAAO,EAAE,EAAE;IACXI,WAAW,EAAE;EACf,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFd,IAAI,CAAC,qDAAqD,EAAE,MAAM;EAChEC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACFR,MAAM,CAAC,MAAMG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAACa,OAAO,CAC1D,qDACF,CAAC;AACH,CAAC,CAAC;AAEFf,IAAI,CAAC,0DAA0D,EAAE,MAAM;EACrEC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACFR,MAAM,CAAC,MAAMG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAACa,OAAO,CAC1D,uEACF,CAAC;AACH,CAAC,CAAC;AAEFf,IAAI,CAAC,mEAAmE,EAAE,MAAM;EAC9EC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACFR,MAAM,CAAC,MAAMG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAACa,OAAO,CAC1D,sDACF,CAAC;AACH,CAAC,CAAC;AAEFf,IAAI,CAAC,8DAA8D,EAAE,MAAM;EACzEC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACFR,MAAM,CAAC,MAAMG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAACa,OAAO,CAC1D,4CACF,CAAC;AACH,CAAC,CAAC;AAEFf,IAAI,CAAC,kDAAkD,EAAE,MAAM;EAC7DC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACF,MAAMC,MAAM,GAAGN,mBAAmB,CAAC,iBAAiB,CAAC;EACrDH,MAAM,CAACS,MAAM,CAAC,CAACC,OAAO,CAAC;IACrBC,OAAO,EAAE,EAAE;IACXI,WAAW,EAAE,CAAC,aAAa;EAC7B,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFd,IAAI,CAAC,iEAAiE,EAAE,MAAM;EAC5EC,EAAE,CAACI,MAAM,CAACP,EAAE,CAACQ,YAAY,CAAC,CAACC,eAAe,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACFR,MAAM,CAAC,MAAMG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAACa,OAAO,CAC1D,sDACF,CAAC;AACH,CAAC,CAAC","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":[]}
@@ -1,96 +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 { resolve } from "path";
18
- import { expect, test, vi } from "vitest";
19
- import { visitNpmPackages } from "../../common/visitNpmPackages.js";
20
- import { getWidgetSetInputSpec } from "../getWidgetSetInputSpec.js";
21
- vi.mock("../../common/visitNpmPackages.ts");
22
- test("getWidgetSetInputSpec successfully discovers OSDK packages", async () => {
23
- const packageJson1 = {
24
- name: "package1",
25
- version: "0.1.0",
26
- dependencies: {
27
- "package2": "0.2.0",
28
- "package3": "0.3.0"
29
- }
30
- };
31
- const packageJson2 = {
32
- name: "package2",
33
- version: "0.2.0",
34
- dependencies: {
35
- "package3": "0.3.0",
36
- "package4": "0.4.0"
37
- },
38
- osdk: {
39
- packageRid: "ridPackage2"
40
- }
41
- };
42
- const packageJson3 = {
43
- name: "package3",
44
- version: "0.3.0",
45
- dependencies: {
46
- "package4": "0.4.1"
47
- },
48
- osdk: {
49
- packageRid: "ridPackage3"
50
- }
51
- };
52
- const packageJson4 = {
53
- name: "package4",
54
- version: "0.4.0",
55
- osdk: {
56
- packageRid: "ridPackage4"
57
- }
58
- };
59
- const packageJson4_1 = {
60
- name: "package4",
61
- version: "0.4.1",
62
- osdk: {
63
- packageRid: "ridPackage4"
64
- }
65
- };
66
- vi.mocked(visitNpmPackages).mockImplementation((packageJsonPath, onVisit) => {
67
- onVisit(packageJsonPath, packageJson1);
68
- onVisit(resolve(packageJsonPath, "/node_modules/package2@0.2.0/package.json"), packageJson2);
69
- onVisit(resolve(packageJsonPath, "/node_modules/package3@0.3.0/package.json"), packageJson3);
70
- // Handle multiple versions of same OSDK package
71
- onVisit(resolve(packageJsonPath, "/node_modules/package4@0.4.0/package.json"), packageJson4);
72
- onVisit(resolve(packageJsonPath, "/node_modules/package4@0.4.1/package.json"), packageJson4_1);
73
- // Handle multiple occurrences of same version of OSDK package
74
- onVisit(resolve(packageJsonPath, "/node_modules/package4@0.4.1/package.json"), packageJson4_1);
75
- return Promise.resolve();
76
- });
77
- const widgetSetInputSpec = await getWidgetSetInputSpec("/path/to/package.json");
78
- expect(widgetSetInputSpec).toEqual({
79
- discovered: {
80
- sdks: [{
81
- rid: "ridPackage2",
82
- version: "0.2.0"
83
- }, {
84
- rid: "ridPackage3",
85
- version: "0.3.0"
86
- }, {
87
- rid: "ridPackage4",
88
- version: "0.4.0"
89
- }, {
90
- rid: "ridPackage4",
91
- version: "0.4.1"
92
- }]
93
- }
94
- });
95
- });
96
- //# sourceMappingURL=getWidgetSetInputSpec.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getWidgetSetInputSpec.test.js","names":["resolve","expect","test","vi","visitNpmPackages","getWidgetSetInputSpec","mock","packageJson1","name","version","dependencies","packageJson2","osdk","packageRid","packageJson3","packageJson4","packageJson4_1","mocked","mockImplementation","packageJsonPath","onVisit","Promise","widgetSetInputSpec","toEqual","discovered","sdks","rid"],"sources":["getWidgetSetInputSpec.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 { resolve } from \"path\";\nimport { expect, test, vi } from \"vitest\";\nimport type { PackageJson } from \"../../common/PackageJson.js\";\nimport { visitNpmPackages } from \"../../common/visitNpmPackages.js\";\nimport { getWidgetSetInputSpec } from \"../getWidgetSetInputSpec.js\";\n\nvi.mock(\"../../common/visitNpmPackages.ts\");\n\ntest(\"getWidgetSetInputSpec successfully discovers OSDK packages\", async () => {\n const packageJson1: PackageJson = {\n name: \"package1\",\n version: \"0.1.0\",\n dependencies: {\n \"package2\": \"0.2.0\",\n \"package3\": \"0.3.0\",\n },\n };\n const packageJson2: PackageJson = {\n name: \"package2\",\n version: \"0.2.0\",\n dependencies: {\n \"package3\": \"0.3.0\",\n \"package4\": \"0.4.0\",\n },\n osdk: {\n packageRid: \"ridPackage2\",\n },\n };\n const packageJson3: PackageJson = {\n name: \"package3\",\n version: \"0.3.0\",\n dependencies: {\n \"package4\": \"0.4.1\",\n },\n osdk: {\n packageRid: \"ridPackage3\",\n },\n };\n const packageJson4: PackageJson = {\n name: \"package4\",\n version: \"0.4.0\",\n osdk: {\n packageRid: \"ridPackage4\",\n },\n };\n const packageJson4_1: PackageJson = {\n name: \"package4\",\n version: \"0.4.1\",\n osdk: {\n packageRid: \"ridPackage4\",\n },\n };\n\n vi.mocked(visitNpmPackages).mockImplementation(\n (packageJsonPath, onVisit) => {\n onVisit(packageJsonPath, packageJson1);\n onVisit(\n resolve(packageJsonPath, \"/node_modules/package2@0.2.0/package.json\"),\n packageJson2,\n );\n onVisit(\n resolve(packageJsonPath, \"/node_modules/package3@0.3.0/package.json\"),\n packageJson3,\n );\n // Handle multiple versions of same OSDK package\n onVisit(\n resolve(packageJsonPath, \"/node_modules/package4@0.4.0/package.json\"),\n packageJson4,\n );\n onVisit(\n resolve(packageJsonPath, \"/node_modules/package4@0.4.1/package.json\"),\n packageJson4_1,\n );\n // Handle multiple occurrences of same version of OSDK package\n onVisit(\n resolve(packageJsonPath, \"/node_modules/package4@0.4.1/package.json\"),\n packageJson4_1,\n );\n return Promise.resolve();\n },\n );\n const widgetSetInputSpec = await getWidgetSetInputSpec(\n \"/path/to/package.json\",\n );\n\n expect(widgetSetInputSpec).toEqual({\n discovered: {\n sdks: [\n { rid: \"ridPackage2\", version: \"0.2.0\" },\n { rid: \"ridPackage3\", version: \"0.3.0\" },\n { rid: \"ridPackage4\", version: \"0.4.0\" },\n { rid: \"ridPackage4\", version: \"0.4.1\" },\n ],\n },\n });\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,MAAM;AAC9B,SAASC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAQ,QAAQ;AAEzC,SAASC,gBAAgB,QAAQ,kCAAkC;AACnE,SAASC,qBAAqB,QAAQ,6BAA6B;AAEnEF,EAAE,CAACG,IAAI,CAAC,kCAAkC,CAAC;AAE3CJ,IAAI,CAAC,4DAA4D,EAAE,YAAY;EAC7E,MAAMK,YAAyB,GAAG;IAChCC,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE,OAAO;IAChBC,YAAY,EAAE;MACZ,UAAU,EAAE,OAAO;MACnB,UAAU,EAAE;IACd;EACF,CAAC;EACD,MAAMC,YAAyB,GAAG;IAChCH,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE,OAAO;IAChBC,YAAY,EAAE;MACZ,UAAU,EAAE,OAAO;MACnB,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJC,UAAU,EAAE;IACd;EACF,CAAC;EACD,MAAMC,YAAyB,GAAG;IAChCN,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE,OAAO;IAChBC,YAAY,EAAE;MACZ,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJC,UAAU,EAAE;IACd;EACF,CAAC;EACD,MAAME,YAAyB,GAAG;IAChCP,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE,OAAO;IAChBG,IAAI,EAAE;MACJC,UAAU,EAAE;IACd;EACF,CAAC;EACD,MAAMG,cAA2B,GAAG;IAClCR,IAAI,EAAE,UAAU;IAChBC,OAAO,EAAE,OAAO;IAChBG,IAAI,EAAE;MACJC,UAAU,EAAE;IACd;EACF,CAAC;EAEDV,EAAE,CAACc,MAAM,CAACb,gBAAgB,CAAC,CAACc,kBAAkB,CAC5C,CAACC,eAAe,EAAEC,OAAO,KAAK;IAC5BA,OAAO,CAACD,eAAe,EAAEZ,YAAY,CAAC;IACtCa,OAAO,CACLpB,OAAO,CAACmB,eAAe,EAAE,2CAA2C,CAAC,EACrER,YACF,CAAC;IACDS,OAAO,CACLpB,OAAO,CAACmB,eAAe,EAAE,2CAA2C,CAAC,EACrEL,YACF,CAAC;IACD;IACAM,OAAO,CACLpB,OAAO,CAACmB,eAAe,EAAE,2CAA2C,CAAC,EACrEJ,YACF,CAAC;IACDK,OAAO,CACLpB,OAAO,CAACmB,eAAe,EAAE,2CAA2C,CAAC,EACrEH,cACF,CAAC;IACD;IACAI,OAAO,CACLpB,OAAO,CAACmB,eAAe,EAAE,2CAA2C,CAAC,EACrEH,cACF,CAAC;IACD,OAAOK,OAAO,CAACrB,OAAO,CAAC,CAAC;EAC1B,CACF,CAAC;EACD,MAAMsB,kBAAkB,GAAG,MAAMjB,qBAAqB,CACpD,uBACF,CAAC;EAEDJ,MAAM,CAACqB,kBAAkB,CAAC,CAACC,OAAO,CAAC;IACjCC,UAAU,EAAE;MACVC,IAAI,EAAE,CACJ;QAAEC,GAAG,EAAE,aAAa;QAAEjB,OAAO,EAAE;MAAQ,CAAC,EACxC;QAAEiB,GAAG,EAAE,aAAa;QAAEjB,OAAO,EAAE;MAAQ,CAAC,EACxC;QAAEiB,GAAG,EAAE,aAAa;QAAEjB,OAAO,EAAE;MAAQ,CAAC,EACxC;QAAEiB,GAAG,EAAE,aAAa;QAAEjB,OAAO,EAAE;MAAQ,CAAC;IAE5C;EACF,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,26 +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 { expect, test } from "vitest";
18
- import { isConfigFile } from "../isConfigFile.js";
19
- test("isConfigFile identifies config files", () => {
20
- expect(isConfigFile("./widget.config.ts")).toBe(true);
21
- expect(isConfigFile("./widget.config.js")).toBe(true);
22
- expect(isConfigFile("/my-assets/widget.config")).toBe(true);
23
- expect(isConfigFile("/assets/config")).toBe(false);
24
- expect(isConfigFile("")).toBe(false);
25
- });
26
- //# sourceMappingURL=isConfigFile.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isConfigFile.test.js","names":["expect","test","isConfigFile","toBe"],"sources":["isConfigFile.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 { expect, test } from \"vitest\";\nimport { isConfigFile } from \"../isConfigFile.js\";\n\ntest(\"isConfigFile identifies config files\", () => {\n expect(isConfigFile(\"./widget.config.ts\")).toBe(true);\n expect(isConfigFile(\"./widget.config.js\")).toBe(true);\n expect(isConfigFile(\"/my-assets/widget.config\")).toBe(true);\n\n expect(isConfigFile(\"/assets/config\")).toBe(false);\n expect(isConfigFile(\"\")).toBe(false);\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,IAAI,QAAQ,QAAQ;AACrC,SAASC,YAAY,QAAQ,oBAAoB;AAEjDD,IAAI,CAAC,sCAAsC,EAAE,MAAM;EACjDD,MAAM,CAACE,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrDH,MAAM,CAACE,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EACrDH,MAAM,CAACE,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC;EAE3DH,MAAM,CAACE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;EAClDH,MAAM,CAACE,YAAY,CAAC,EAAE,CAAC,CAAC,CAACC,IAAI,CAAC,KAAK,CAAC;AACtC,CAAC,CAAC","ignoreList":[]}
@@ -1,44 +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, it } from "vitest";
18
- import { validateWidgetSet } from "../validateWidgetSet.js";
19
- describe("validateWidgetSet", () => {
20
- describe("validateWidgetIds", () => {
21
- it("should not throw when all widget IDs are unique", () => {
22
- const widgetBuilds = [createWidgetBuild("widget1"), createWidgetBuild("widget2"), createWidgetBuild("widget3")];
23
- expect(() => validateWidgetSet(widgetBuilds)).not.toThrow();
24
- });
25
- it("should throw when duplicate widget IDs are found", () => {
26
- const widgetBuilds = [createWidgetBuild("widget1"), createWidgetBuild("widget2"), createWidgetBuild("widget1")];
27
- expect(() => validateWidgetSet(widgetBuilds)).toThrow("Duplicate widget ID: widget1. Each widget must have a unique ID.");
28
- });
29
- });
30
- });
31
- function createWidgetBuild(id) {
32
- return {
33
- widgetConfig: {
34
- id,
35
- name: `Widget ${id}`,
36
- type: "workshop",
37
- parameters: {},
38
- events: {}
39
- },
40
- scripts: [],
41
- stylesheets: []
42
- };
43
- }
44
- //# sourceMappingURL=validateWidgetSet.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateWidgetSet.test.js","names":["describe","expect","it","validateWidgetSet","widgetBuilds","createWidgetBuild","not","toThrow","id","widgetConfig","name","type","parameters","events","scripts","stylesheets"],"sources":["validateWidgetSet.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 { describe, expect, it } from \"vitest\";\nimport type { WidgetBuildOutputs } from \"../getWidgetBuildOutputs.js\";\nimport { validateWidgetSet } from \"../validateWidgetSet.js\";\n\ndescribe(\"validateWidgetSet\", () => {\n describe(\"validateWidgetIds\", () => {\n it(\"should not throw when all widget IDs are unique\", () => {\n const widgetBuilds: WidgetBuildOutputs[] = [\n createWidgetBuild(\"widget1\"),\n createWidgetBuild(\"widget2\"),\n createWidgetBuild(\"widget3\"),\n ];\n\n expect(() => validateWidgetSet(widgetBuilds)).not.toThrow();\n });\n\n it(\"should throw when duplicate widget IDs are found\", () => {\n const widgetBuilds: WidgetBuildOutputs[] = [\n createWidgetBuild(\"widget1\"),\n createWidgetBuild(\"widget2\"),\n createWidgetBuild(\"widget1\"),\n ];\n\n expect(() => validateWidgetSet(widgetBuilds)).toThrow(\n \"Duplicate widget ID: widget1. Each widget must have a unique ID.\",\n );\n });\n });\n});\n\nfunction createWidgetBuild(id: string): WidgetBuildOutputs {\n return {\n widgetConfig: {\n id,\n name: `Widget ${id}`,\n type: \"workshop\",\n parameters: {},\n events: {},\n },\n scripts: [],\n stylesheets: [],\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,iBAAiB,QAAQ,yBAAyB;AAE3DH,QAAQ,CAAC,mBAAmB,EAAE,MAAM;EAClCA,QAAQ,CAAC,mBAAmB,EAAE,MAAM;IAClCE,EAAE,CAAC,iDAAiD,EAAE,MAAM;MAC1D,MAAME,YAAkC,GAAG,CACzCC,iBAAiB,CAAC,SAAS,CAAC,EAC5BA,iBAAiB,CAAC,SAAS,CAAC,EAC5BA,iBAAiB,CAAC,SAAS,CAAC,CAC7B;MAEDJ,MAAM,CAAC,MAAME,iBAAiB,CAACC,YAAY,CAAC,CAAC,CAACE,GAAG,CAACC,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEFL,EAAE,CAAC,kDAAkD,EAAE,MAAM;MAC3D,MAAME,YAAkC,GAAG,CACzCC,iBAAiB,CAAC,SAAS,CAAC,EAC5BA,iBAAiB,CAAC,SAAS,CAAC,EAC5BA,iBAAiB,CAAC,SAAS,CAAC,CAC7B;MAEDJ,MAAM,CAAC,MAAME,iBAAiB,CAACC,YAAY,CAAC,CAAC,CAACG,OAAO,CACnD,kEACF,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,SAASF,iBAAiBA,CAACG,EAAU,EAAsB;EACzD,OAAO;IACLC,YAAY,EAAE;MACZD,EAAE;MACFE,IAAI,EAAE,UAAUF,EAAE,EAAE;MACpBG,IAAI,EAAE,UAAU;MAChBC,UAAU,EAAE,CAAC,CAAC;MACdC,MAAM,EAAE,CAAC;IACX,CAAC;IACDC,OAAO,EAAE,EAAE;IACXC,WAAW,EAAE;EACf,CAAC;AACH","ignoreList":[]}
@@ -1,95 +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, describe, expect, test, vi } from "vitest";
18
- import { extractWidgetConfig } from "../extractWidgetConfig.js";
19
- import * as validateWidgetConfigModule from "../validateWidgetConfig.js";
20
- const MOCK_SERVER = {
21
- ssrLoadModule: vi.fn()
22
- };
23
- describe("extractWidgetConfig", () => {
24
- beforeEach(() => {
25
- vi.restoreAllMocks();
26
- });
27
- test("extracts valid widget configuration", async () => {
28
- vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({
29
- default: MOCK_CONFIG
30
- });
31
- const validateSpy = vi.spyOn(validateWidgetConfigModule, "validateWidgetConfig");
32
- const result = await extractWidgetConfig("/path/to/config.ts", MOCK_SERVER);
33
- expect(result).toEqual(MOCK_CONFIG);
34
- expect(validateSpy).toHaveBeenCalledWith(MOCK_CONFIG);
35
- });
36
- test("throws for invalid widget configuration", async () => {
37
- vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({
38
- default: {
39
- id: "Invalid-Id",
40
- name: "Test Widget",
41
- type: "workshop",
42
- parameters: {}
43
- }
44
- });
45
- vi.spyOn(validateWidgetConfigModule, "validateWidgetConfig").mockImplementation(config => {
46
- throw new Error(`Widget id "${config.id}" does not match allowed pattern (must be camelCase)`);
47
- });
48
- await expect(extractWidgetConfig("/path/to/config.ts", MOCK_SERVER)).rejects.toThrow(expect.objectContaining({
49
- message: "Encountered error: 'Widget id \"Invalid-Id\" does not match allowed pattern (must be camelCase)' while loading widget config from /path/to/config.ts",
50
- cause: expect.objectContaining({
51
- message: `Widget id "Invalid-Id" does not match allowed pattern (must be camelCase)`
52
- })
53
- }));
54
- });
55
- test("throws for missing default export", async () => {
56
- vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({
57
- notDefault: {
58
- id: "test"
59
- }
60
- });
61
- await expect(extractWidgetConfig("/path/to/config.ts", MOCK_SERVER)).rejects.toThrow(expect.objectContaining({
62
- message: "Encountered error: 'No default export found in /path/to/config.ts' while loading widget config from /path/to/config.ts",
63
- cause: expect.objectContaining({
64
- message: "No default export found in /path/to/config.ts"
65
- })
66
- }));
67
- });
68
- test("throws for invalid module path", async () => {
69
- vi.mocked(MOCK_SERVER.ssrLoadModule).mockRejectedValue(new Error("Module loading failed"));
70
- await expect(extractWidgetConfig("/invalid/path/config.ts", MOCK_SERVER)).rejects.toThrow("Encountered error: 'Module loading failed' while loading widget config from /invalid/path/config.ts");
71
- });
72
- });
73
- const MOCK_CONFIG = {
74
- id: "testWidget",
75
- name: "Test Widget",
76
- description: "A test widget",
77
- type: "workshop",
78
- parameters: {
79
- paramOne: {
80
- displayName: "Parameter One",
81
- type: "string"
82
- },
83
- paramTwo: {
84
- displayName: "Parameter Two",
85
- type: "string"
86
- }
87
- },
88
- events: {
89
- updateParameters: {
90
- displayName: "Update Parameters",
91
- parameterUpdateIds: ["paramOne", "paramTwo"]
92
- }
93
- }
94
- };
95
- //# sourceMappingURL=extractWidgetConfig.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractWidgetConfig.test.js","names":["beforeEach","describe","expect","test","vi","extractWidgetConfig","validateWidgetConfigModule","MOCK_SERVER","ssrLoadModule","fn","restoreAllMocks","mocked","mockResolvedValue","default","MOCK_CONFIG","validateSpy","spyOn","result","toEqual","toHaveBeenCalledWith","id","name","type","parameters","mockImplementation","config","Error","rejects","toThrow","objectContaining","message","cause","notDefault","mockRejectedValue","description","paramOne","displayName","paramTwo","events","updateParameters","parameterUpdateIds"],"sources":["extractWidgetConfig.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 { ViteDevServer } from \"vite\";\nimport { beforeEach, describe, expect, test, vi } from \"vitest\";\nimport { extractWidgetConfig } from \"../extractWidgetConfig.js\";\nimport * as validateWidgetConfigModule from \"../validateWidgetConfig.js\";\n\nconst MOCK_SERVER = {\n ssrLoadModule: vi.fn(),\n} as unknown as ViteDevServer;\n\ndescribe(\"extractWidgetConfig\", () => {\n beforeEach(() => {\n vi.restoreAllMocks();\n });\n\n test(\"extracts valid widget configuration\", async () => {\n vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({\n default: MOCK_CONFIG,\n });\n\n const validateSpy = vi.spyOn(\n validateWidgetConfigModule,\n \"validateWidgetConfig\",\n );\n\n const result = await extractWidgetConfig(\"/path/to/config.ts\", MOCK_SERVER);\n expect(result).toEqual(MOCK_CONFIG);\n expect(validateSpy).toHaveBeenCalledWith(MOCK_CONFIG);\n });\n\n test(\"throws for invalid widget configuration\", async () => {\n const INVALID_CONFIG = {\n id: \"Invalid-Id\",\n name: \"Test Widget\",\n type: \"workshop\",\n parameters: {},\n };\n\n vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({\n default: INVALID_CONFIG,\n });\n\n vi.spyOn(validateWidgetConfigModule, \"validateWidgetConfig\")\n .mockImplementation(config => {\n throw new Error(\n `Widget id \"${config.id}\" does not match allowed pattern (must be camelCase)`,\n );\n });\n\n await expect(extractWidgetConfig(\"/path/to/config.ts\", MOCK_SERVER))\n .rejects.toThrow(\n expect.objectContaining({\n message:\n \"Encountered error: 'Widget id \\\"Invalid-Id\\\" does not match allowed pattern (must be camelCase)' while loading widget config from /path/to/config.ts\",\n cause: expect.objectContaining({\n message:\n `Widget id \"Invalid-Id\" does not match allowed pattern (must be camelCase)`,\n }),\n }),\n );\n });\n\n test(\"throws for missing default export\", async () => {\n vi.mocked(MOCK_SERVER.ssrLoadModule).mockResolvedValue({\n notDefault: { id: \"test\" },\n });\n\n await expect(extractWidgetConfig(\"/path/to/config.ts\", MOCK_SERVER))\n .rejects.toThrow(\n expect.objectContaining({\n message:\n \"Encountered error: 'No default export found in /path/to/config.ts' while loading widget config from /path/to/config.ts\",\n cause: expect.objectContaining({\n message: \"No default export found in /path/to/config.ts\",\n }),\n }),\n );\n });\n\n test(\"throws for invalid module path\", async () => {\n vi.mocked(MOCK_SERVER.ssrLoadModule).mockRejectedValue(\n new Error(\"Module loading failed\"),\n );\n\n await expect(extractWidgetConfig(\"/invalid/path/config.ts\", MOCK_SERVER))\n .rejects.toThrow(\n \"Encountered error: 'Module loading failed' while loading widget config from /invalid/path/config.ts\",\n );\n });\n});\n\nconst MOCK_CONFIG = {\n id: \"testWidget\",\n name: \"Test Widget\",\n description: \"A test widget\",\n type: \"workshop\",\n parameters: {\n paramOne: {\n displayName: \"Parameter One\",\n type: \"string\",\n },\n paramTwo: {\n displayName: \"Parameter Two\",\n type: \"string\",\n },\n },\n events: {\n updateParameters: {\n displayName: \"Update Parameters\",\n parameterUpdateIds: [\"paramOne\", \"paramTwo\"],\n },\n },\n};\n"],"mappings":"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","ignoreList":[]}