@vizhub/runtime 0.1.4 → 0.2.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 (287) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -194
  3. package/dist/common/packageJson.d.ts +39 -0
  4. package/dist/common/packageJson.js +71 -0
  5. package/dist/common/packageJson.test.d.ts +1 -0
  6. package/dist/common/packageJson.test.js +146 -0
  7. package/dist/common/sucrasePlugin.d.ts +2 -0
  8. package/dist/common/sucrasePlugin.js +24 -0
  9. package/dist/common/virtualFileSystem.d.ts +3 -0
  10. package/dist/common/virtualFileSystem.js +75 -0
  11. package/dist/determineRuntimeVersion.d.ts +2 -0
  12. package/dist/determineRuntimeVersion.js +22 -0
  13. package/dist/determineRuntimeVersion.test.d.ts +1 -0
  14. package/dist/determineRuntimeVersion.test.js +101 -0
  15. package/dist/fixtures/basicHTML.d.ts +2 -0
  16. package/dist/fixtures/basicHTML.js +22 -0
  17. package/dist/fixtures/fetchProxy.d.ts +2 -0
  18. package/dist/fixtures/fetchProxy.js +25 -0
  19. package/dist/fixtures/index.d.ts +3 -0
  20. package/dist/fixtures/index.js +9 -0
  21. package/dist/fixtures/jsScriptTag.d.ts +2 -0
  22. package/dist/fixtures/jsScriptTag.js +19 -0
  23. package/dist/index.d.ts +14 -8
  24. package/dist/index.js +59 -24882
  25. package/dist/index.test.d.ts +1 -0
  26. package/dist/index.test.js +50 -0
  27. package/dist/magicSandbox/fixProtocollessUrls.d.ts +4 -0
  28. package/dist/magicSandbox/fixProtocollessUrls.js +10 -0
  29. package/dist/magicSandbox/generateInterceptorScript.d.ts +4 -0
  30. package/dist/magicSandbox/generateInterceptorScript.js +178 -0
  31. package/dist/magicSandbox/index.d.ts +19 -0
  32. package/dist/magicSandbox/index.js +48 -0
  33. package/dist/test/fixtures/basicHTML.d.ts +2 -0
  34. package/dist/test/fixtures/basicHTML.js +19 -0
  35. package/dist/test/fixtures/fetchProxy.d.ts +2 -0
  36. package/dist/test/fixtures/fetchProxy.js +22 -0
  37. package/dist/test/fixtures/index.d.ts +6 -0
  38. package/dist/test/fixtures/index.js +6 -0
  39. package/dist/test/fixtures/jsScriptTag.d.ts +2 -0
  40. package/dist/test/fixtures/jsScriptTag.js +16 -0
  41. package/dist/test/fixtures/magicSandbox/basicHTML.d.ts +5 -0
  42. package/dist/test/fixtures/magicSandbox/basicHTML.js +17 -0
  43. package/dist/test/fixtures/magicSandbox/fetchProxy.d.ts +11 -0
  44. package/dist/test/fixtures/magicSandbox/fetchProxy.js +18 -0
  45. package/dist/test/fixtures/magicSandbox/index.d.ts +6 -0
  46. package/dist/test/fixtures/magicSandbox/index.js +6 -0
  47. package/dist/test/fixtures/magicSandbox/jsScriptTag.d.ts +8 -0
  48. package/dist/test/fixtures/magicSandbox/jsScriptTag.js +13 -0
  49. package/dist/test/fixtures/magicSandbox/protocolTest.d.ts +5 -0
  50. package/dist/test/fixtures/magicSandbox/protocolTest.js +17 -0
  51. package/dist/test/fixtures/magicSandbox/styleTest.d.ts +8 -0
  52. package/dist/test/fixtures/magicSandbox/styleTest.js +19 -0
  53. package/dist/test/fixtures/magicSandbox/xmlTest.d.ts +8 -0
  54. package/dist/test/fixtures/magicSandbox/xmlTest.js +23 -0
  55. package/dist/test/fixtures/protocolTest.d.ts +2 -0
  56. package/dist/test/fixtures/protocolTest.js +19 -0
  57. package/dist/test/fixtures/styleTest.d.ts +2 -0
  58. package/dist/test/fixtures/styleTest.js +22 -0
  59. package/dist/test/fixtures/v1/basicHTML.d.ts +3 -0
  60. package/dist/test/fixtures/v1/basicHTML.js +15 -0
  61. package/dist/test/fixtures/v1/fetchProxy.d.ts +5 -0
  62. package/dist/test/fixtures/v1/fetchProxy.js +12 -0
  63. package/dist/test/fixtures/v1/index.d.ts +6 -0
  64. package/dist/test/fixtures/v1/index.js +6 -0
  65. package/dist/test/fixtures/v1/jsScriptTag.d.ts +4 -0
  66. package/dist/test/fixtures/v1/jsScriptTag.js +9 -0
  67. package/dist/test/fixtures/v1/protocolTest.d.ts +3 -0
  68. package/dist/test/fixtures/v1/protocolTest.js +15 -0
  69. package/dist/test/fixtures/v1/styleTest.d.ts +4 -0
  70. package/dist/test/fixtures/v1/styleTest.js +15 -0
  71. package/dist/test/fixtures/v1/xmlTest.d.ts +4 -0
  72. package/dist/test/fixtures/v1/xmlTest.js +19 -0
  73. package/dist/test/fixtures/v2/basicBundle.d.ts +5 -0
  74. package/dist/test/fixtures/v2/basicBundle.js +5 -0
  75. package/dist/test/fixtures/v2/basicBundleNoExtension.d.ts +5 -0
  76. package/dist/test/fixtures/v2/basicBundleNoExtension.js +5 -0
  77. package/dist/test/fixtures/v2/d3Import.d.ts +4 -0
  78. package/dist/test/fixtures/v2/d3Import.js +7 -0
  79. package/dist/test/fixtures/v2/d3ImportPkg.d.ts +5 -0
  80. package/dist/test/fixtures/v2/d3ImportPkg.js +19 -0
  81. package/dist/test/fixtures/v2/d3RosettaImportPkg.d.ts +5 -0
  82. package/dist/test/fixtures/v2/d3RosettaImportPkg.js +19 -0
  83. package/dist/test/fixtures/v2/es6Preserve.d.ts +4 -0
  84. package/dist/test/fixtures/v2/es6Preserve.js +6 -0
  85. package/dist/test/fixtures/v2/generatorSupport.d.ts +4 -0
  86. package/dist/test/fixtures/v2/generatorSupport.js +6 -0
  87. package/dist/test/fixtures/v2/index.d.ts +14 -0
  88. package/dist/test/fixtures/v2/index.js +15 -0
  89. package/dist/test/fixtures/v2/jsxTranspile.d.ts +4 -0
  90. package/dist/test/fixtures/v2/jsxTranspile.js +6 -0
  91. package/dist/test/fixtures/v2/reactDomImport.d.ts +4 -0
  92. package/dist/test/fixtures/v2/reactDomImport.js +8 -0
  93. package/dist/test/fixtures/v2/reactDomImportPkg.d.ts +5 -0
  94. package/dist/test/fixtures/v2/reactDomImportPkg.js +24 -0
  95. package/dist/test/fixtures/v2/reactImport.d.ts +4 -0
  96. package/dist/test/fixtures/v2/reactImport.js +7 -0
  97. package/dist/test/fixtures/v2/reactImportPkg.d.ts +5 -0
  98. package/dist/test/fixtures/v2/reactImportPkg.js +17 -0
  99. package/dist/test/fixtures/v2/sourceMapErrorFixture.d.ts +5 -0
  100. package/dist/test/fixtures/v2/sourceMapErrorFixture.js +19 -0
  101. package/dist/test/fixtures/v2/unicodeSupport.d.ts +4 -0
  102. package/dist/test/fixtures/v2/unicodeSupport.js +6 -0
  103. package/dist/test/fixtures/v3/basicIndexJS.d.ts +3 -0
  104. package/dist/test/fixtures/v3/basicIndexJS.js +7 -0
  105. package/dist/test/fixtures/v3/cssImport.d.ts +4 -0
  106. package/dist/test/fixtures/v3/cssImport.js +9 -0
  107. package/dist/test/fixtures/v3/csvImport.d.ts +4 -0
  108. package/dist/test/fixtures/v3/csvImport.js +11 -0
  109. package/dist/test/fixtures/v3/csvStrangeChars.d.ts +4 -0
  110. package/dist/test/fixtures/v3/csvStrangeChars.js +12 -0
  111. package/dist/test/fixtures/v3/index.d.ts +9 -0
  112. package/dist/test/fixtures/v3/index.js +9 -0
  113. package/dist/test/fixtures/v3/jsExport.d.ts +4 -0
  114. package/dist/test/fixtures/v3/jsExport.js +10 -0
  115. package/dist/test/fixtures/v3/sourcemap.d.ts +3 -0
  116. package/dist/test/fixtures/v3/sourcemap.js +10 -0
  117. package/dist/test/fixtures/v3/svelte.d.ts +4 -0
  118. package/dist/test/fixtures/v3/svelte.js +18 -0
  119. package/dist/test/fixtures/v3/vizContent.d.ts +2 -0
  120. package/dist/test/fixtures/v3/vizContent.js +11 -0
  121. package/dist/test/fixtures/v3/vizImport.d.ts +6 -0
  122. package/dist/test/fixtures/v3/vizImport.js +85 -0
  123. package/dist/test/fixtures/v4/d3Usage.d.ts +5 -0
  124. package/dist/test/fixtures/v4/d3Usage.js +31 -0
  125. package/dist/test/fixtures/v4/esmBuild.d.ts +5 -0
  126. package/dist/test/fixtures/v4/esmBuild.js +18 -0
  127. package/dist/test/fixtures/v4/fetchInterception.d.ts +5 -0
  128. package/dist/test/fixtures/v4/fetchInterception.js +18 -0
  129. package/dist/test/fixtures/v4/index.d.ts +9 -0
  130. package/dist/test/fixtures/v4/index.js +9 -0
  131. package/dist/test/fixtures/v4/jsScriptTagTypeModule.d.ts +4 -0
  132. package/dist/test/fixtures/v4/jsScriptTagTypeModule.js +18 -0
  133. package/dist/test/fixtures/v4/jsScriptTagTypeModules.d.ts +5 -0
  134. package/dist/test/fixtures/v4/jsScriptTagTypeModules.js +12 -0
  135. package/dist/test/fixtures/v4/reactHooks.d.ts +6 -0
  136. package/dist/test/fixtures/v4/reactHooks.js +47 -0
  137. package/dist/test/fixtures/v4/reactJsx.d.ts +6 -0
  138. package/dist/test/fixtures/v4/reactJsx.js +34 -0
  139. package/dist/test/fixtures/v4/threeJsUsage.d.ts +4 -0
  140. package/dist/test/fixtures/v4/threeJsUsage.js +24 -0
  141. package/dist/test/fixtures/v4/typeScriptSupport.d.ts +5 -0
  142. package/dist/test/fixtures/v4/typeScriptSupport.js +29 -0
  143. package/dist/test/fixtures/xmlTest.d.ts +2 -0
  144. package/dist/test/fixtures/xmlTest.js +26 -0
  145. package/dist/test/index.test.d.ts +1 -0
  146. package/dist/test/index.test.js +40 -0
  147. package/dist/test/testInBrowser.d.ts +16 -0
  148. package/dist/test/testInBrowser.js +47 -0
  149. package/dist/test/testStackTrace.d.ts +9 -0
  150. package/dist/test/testStackTrace.js +55 -0
  151. package/dist/test/v1.test.d.ts +1 -0
  152. package/dist/test/v1.test.js +65 -0
  153. package/dist/test/v2.test.d.ts +1 -0
  154. package/dist/test/v2.test.js +121 -0
  155. package/dist/test/v3.test.d.ts +1 -0
  156. package/dist/test/v3.test.js +114 -0
  157. package/dist/test/v4.test.d.ts +1 -0
  158. package/dist/test/v4.test.js +100 -0
  159. package/dist/types.d.ts +2 -0
  160. package/dist/types.js +1 -0
  161. package/dist/utils/getFileText.d.ts +2 -0
  162. package/dist/utils/getFileText.js +13 -0
  163. package/dist/utils/getFileText.test.d.ts +1 -0
  164. package/dist/utils/getFileText.test.js +72 -0
  165. package/dist/utils/vizContentToFileCollection.d.ts +8 -0
  166. package/dist/utils/vizContentToFileCollection.js +19 -0
  167. package/dist/utils/vizContentToFileCollection.test.d.ts +1 -0
  168. package/dist/utils/vizContentToFileCollection.test.js +75 -0
  169. package/dist/v2/computeBundleJSV2.d.ts +7 -0
  170. package/dist/v2/computeBundleJSV2.js +29 -0
  171. package/dist/v2/getComputedIndexHtml.d.ts +4 -0
  172. package/dist/v2/getComputedIndexHtml.js +81 -0
  173. package/dist/v2/getComputedIndexHtml.test.d.ts +1 -0
  174. package/dist/v2/getComputedIndexHtml.test.js +134 -0
  175. package/dist/v2/index.d.ts +1 -0
  176. package/dist/v2/index.js +1 -0
  177. package/dist/v2/v2Build.d.ts +7 -0
  178. package/dist/v2/v2Build.js +11 -0
  179. package/dist/v3/computeBundleJSV3.d.ts +18 -0
  180. package/dist/v3/computeBundleJSV3.js +48 -0
  181. package/dist/v3/createVizContent.d.ts +9 -0
  182. package/dist/v3/createVizContent.js +23 -0
  183. package/dist/{v3Runtime → v3}/extractVizImport.d.ts +2 -3
  184. package/dist/v3/extractVizImport.js +23 -0
  185. package/dist/v3/extractVizImport.test.d.ts +1 -0
  186. package/dist/v3/extractVizImport.test.js +30 -0
  187. package/dist/v3/htmlTemplate.d.ts +5 -0
  188. package/dist/v3/htmlTemplate.js +89 -0
  189. package/dist/v3/index.d.ts +1 -0
  190. package/dist/v3/index.js +1 -0
  191. package/dist/v3/parseId.d.ts +6 -0
  192. package/dist/v3/parseId.js +5 -0
  193. package/dist/v3/parseId.test.d.ts +1 -0
  194. package/dist/v3/parseId.test.js +25 -0
  195. package/dist/v3/slugCache.d.ts +11 -0
  196. package/dist/v3/slugCache.js +35 -0
  197. package/dist/v3/slugCache.test.d.ts +1 -0
  198. package/dist/v3/slugCache.test.js +105 -0
  199. package/dist/v3/transformDSV/dsvParseSrc.d.ts +1 -0
  200. package/dist/v3/transformDSV/dsvParseSrc.js +121 -0
  201. package/dist/v3/transformDSV/index.d.ts +2 -0
  202. package/dist/v3/transformDSV/index.js +40 -0
  203. package/dist/{v3Runtime → v3}/transformSvelte.d.ts +4 -2
  204. package/dist/v3/transformSvelte.js +77 -0
  205. package/dist/{v3Runtime → v3}/types.d.ts +18 -18
  206. package/dist/v3/types.js +1 -0
  207. package/dist/v3/v3Build.d.ts +15 -0
  208. package/dist/v3/v3Build.js +30 -0
  209. package/dist/v3/vizCache.d.ts +10 -0
  210. package/dist/v3/vizCache.js +36 -0
  211. package/dist/v3/vizCache.test.d.ts +1 -0
  212. package/dist/v3/vizCache.test.js +98 -0
  213. package/dist/{v3Runtime → v3}/vizLoad.d.ts +3 -4
  214. package/dist/v3/vizLoad.js +46 -0
  215. package/dist/v3/vizResolve.d.ts +7 -0
  216. package/dist/v3/vizResolve.js +69 -0
  217. package/dist/v4/index.d.ts +10 -0
  218. package/dist/v4/index.js +134 -0
  219. package/package.json +35 -38
  220. package/dist/assets/setupV3Runtime-BVr5lyKp.js +0 -240
  221. package/dist/computeSrcDoc.d.ts +0 -13
  222. package/dist/computeSrcDoc.d.ts.map +0 -1
  223. package/dist/computeSrcDoc.test.d.ts +0 -2
  224. package/dist/computeSrcDoc.test.d.ts.map +0 -1
  225. package/dist/index.d.ts.map +0 -1
  226. package/dist/useRuntime.d.ts +0 -13
  227. package/dist/useRuntime.d.ts.map +0 -1
  228. package/dist/v2Runtime/bundle/bubleJSXOnly.d.ts +0 -5
  229. package/dist/v2Runtime/bundle/bubleJSXOnly.d.ts.map +0 -1
  230. package/dist/v2Runtime/bundle/packageJson.d.ts +0 -10
  231. package/dist/v2Runtime/bundle/packageJson.d.ts.map +0 -1
  232. package/dist/v2Runtime/computeSrcDocV2.d.ts +0 -3
  233. package/dist/v2Runtime/computeSrcDocV2.d.ts.map +0 -1
  234. package/dist/v2Runtime/computeSrcDocV2.test.d.ts +0 -2
  235. package/dist/v2Runtime/computeSrcDocV2.test.d.ts.map +0 -1
  236. package/dist/v2Runtime/getComputedIndexHtml.d.ts +0 -4
  237. package/dist/v2Runtime/getComputedIndexHtml.d.ts.map +0 -1
  238. package/dist/v2Runtime/getComputedIndexHtml.test.d.ts +0 -2
  239. package/dist/v2Runtime/getComputedIndexHtml.test.d.ts.map +0 -1
  240. package/dist/v2Runtime/getText.d.ts +0 -3
  241. package/dist/v2Runtime/getText.d.ts.map +0 -1
  242. package/dist/v2Runtime/transformFiles.d.ts +0 -3
  243. package/dist/v2Runtime/transformFiles.d.ts.map +0 -1
  244. package/dist/v2Runtime/v3FilesToV2Files.d.ts +0 -3
  245. package/dist/v2Runtime/v3FilesToV2Files.d.ts.map +0 -1
  246. package/dist/v2Runtime/v3FilesToV2Files.test.d.ts +0 -2
  247. package/dist/v2Runtime/v3FilesToV2Files.test.d.ts.map +0 -1
  248. package/dist/v3Runtime/build.d.ts +0 -14
  249. package/dist/v3Runtime/build.d.ts.map +0 -1
  250. package/dist/v3Runtime/build.test.d.ts +0 -2
  251. package/dist/v3Runtime/build.test.d.ts.map +0 -1
  252. package/dist/v3Runtime/cleanRollupErrorMessage.d.ts +0 -5
  253. package/dist/v3Runtime/cleanRollupErrorMessage.d.ts.map +0 -1
  254. package/dist/v3Runtime/computeSrcDocV3.d.ts +0 -7
  255. package/dist/v3Runtime/computeSrcDocV3.d.ts.map +0 -1
  256. package/dist/v3Runtime/extractVizImport.d.ts.map +0 -1
  257. package/dist/v3Runtime/extractVizImport.test.d.ts +0 -2
  258. package/dist/v3Runtime/extractVizImport.test.d.ts.map +0 -1
  259. package/dist/v3Runtime/generateRollupErrorMessage.d.ts +0 -5
  260. package/dist/v3Runtime/generateRollupErrorMessage.d.ts.map +0 -1
  261. package/dist/v3Runtime/importFromViz.d.ts +0 -1
  262. package/dist/v3Runtime/importFromViz.d.ts.map +0 -1
  263. package/dist/v3Runtime/index.d.ts +0 -2
  264. package/dist/v3Runtime/index.d.ts.map +0 -1
  265. package/dist/v3Runtime/parseId.d.ts +0 -7
  266. package/dist/v3Runtime/parseId.d.ts.map +0 -1
  267. package/dist/v3Runtime/setupV3Runtime.d.ts +0 -15
  268. package/dist/v3Runtime/setupV3Runtime.d.ts.map +0 -1
  269. package/dist/v3Runtime/transformDSV/index.d.ts +0 -3
  270. package/dist/v3Runtime/transformDSV/index.d.ts.map +0 -1
  271. package/dist/v3Runtime/transformSvelte.d.ts.map +0 -1
  272. package/dist/v3Runtime/types.d.ts.map +0 -1
  273. package/dist/v3Runtime/urlLoad.d.ts +0 -1
  274. package/dist/v3Runtime/urlLoad.d.ts.map +0 -1
  275. package/dist/v3Runtime/virtual.d.ts +0 -1
  276. package/dist/v3Runtime/virtual.d.ts.map +0 -1
  277. package/dist/v3Runtime/vizCache.d.ts +0 -11
  278. package/dist/v3Runtime/vizCache.d.ts.map +0 -1
  279. package/dist/v3Runtime/vizCache.test.d.ts +0 -2
  280. package/dist/v3Runtime/vizCache.test.d.ts.map +0 -1
  281. package/dist/v3Runtime/vizLoad.d.ts.map +0 -1
  282. package/dist/v3Runtime/vizLoadSvelte.d.ts +0 -1
  283. package/dist/v3Runtime/vizLoadSvelte.d.ts.map +0 -1
  284. package/dist/v3Runtime/vizResolve.d.ts +0 -10
  285. package/dist/v3Runtime/vizResolve.d.ts.map +0 -1
  286. package/dist/v3Runtime/worker.d.ts +0 -2
  287. package/dist/v3Runtime/worker.d.ts.map +0 -1
@@ -0,0 +1,146 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { packageJSON, dependencies, getConfiguredLibraries, dependencySource, getLicense, } from "./packageJson";
3
+ describe("packageJson", () => {
4
+ const mockFiles = {
5
+ "package.json": JSON.stringify({
6
+ dependencies: {
7
+ react: "17.0.2",
8
+ d3: "7.0.0",
9
+ },
10
+ vizhub: {
11
+ libraries: {
12
+ d3: { path: "/dist/d3.min.js" },
13
+ },
14
+ },
15
+ license: "Apache-2.0",
16
+ }),
17
+ };
18
+ const emptyFiles = {};
19
+ const invalidFiles = {
20
+ "package.json": "invalid json",
21
+ };
22
+ describe("packageJSON", () => {
23
+ it("should parse valid package.json", () => {
24
+ const result = packageJSON(mockFiles);
25
+ expect(result).toHaveProperty("dependencies");
26
+ expect(result.dependencies).toHaveProperty("react", "17.0.2");
27
+ });
28
+ it("should return empty object for missing package.json", () => {
29
+ const result = packageJSON(emptyFiles);
30
+ expect(result).toEqual({
31
+ dependencies: {},
32
+ vizhub: {},
33
+ license: "MIT",
34
+ });
35
+ });
36
+ it("should handle invalid JSON", () => {
37
+ const result = packageJSON(invalidFiles);
38
+ expect(result).toEqual({
39
+ dependencies: {},
40
+ vizhub: {},
41
+ license: "MIT",
42
+ });
43
+ });
44
+ });
45
+ describe("dependencies", () => {
46
+ it("should return dependencies from package.json", () => {
47
+ const result = dependencies(mockFiles);
48
+ expect(result).toEqual({
49
+ react: "17.0.2",
50
+ d3: "7.0.0",
51
+ });
52
+ });
53
+ it("should return empty object when no dependencies", () => {
54
+ const result = dependencies(emptyFiles);
55
+ expect(result).toEqual({});
56
+ });
57
+ });
58
+ describe("getConfiguredLibraries", () => {
59
+ it("should return configured libraries", () => {
60
+ const result = getConfiguredLibraries(mockFiles);
61
+ expect(result).toEqual({
62
+ d3: { path: "/dist/d3.min.js" },
63
+ });
64
+ });
65
+ it("should return empty object when no libraries configured", () => {
66
+ const result = getConfiguredLibraries(emptyFiles);
67
+ expect(result).toEqual({});
68
+ });
69
+ });
70
+ describe("dependencySource", () => {
71
+ it("should generate correct URL with path - jsdelivr", () => {
72
+ const dependency = { name: "d3", version: "7.0.0" };
73
+ const libraries = { d3: { path: "/dist/d3.min.js" } };
74
+ const result = dependencySource(dependency, libraries);
75
+ expect(result).toBe("https://cdn.jsdelivr.net/npm/d3@7.0.0/dist/d3.min.js");
76
+ });
77
+ it("should generate correct URL without path - jsdelivr", () => {
78
+ const dependency = {
79
+ name: "react",
80
+ version: "17.0.2",
81
+ };
82
+ const libraries = {};
83
+ const result = dependencySource(dependency, libraries);
84
+ expect(result).toBe("https://cdn.jsdelivr.net/npm/react@17.0.2");
85
+ });
86
+ it("should generate correct URL with path - unpkg", () => {
87
+ const dependency = { name: "d3", version: "7.0.0" };
88
+ const libraries = { d3: { path: "/dist/d3.min.js" } };
89
+ const result = dependencySource(dependency, libraries, "unpkg");
90
+ expect(result).toBe("https://unpkg.com/d3@7.0.0/dist/d3.min.js");
91
+ });
92
+ it("should generate correct URL without path - unpkg", () => {
93
+ const dependency = {
94
+ name: "react",
95
+ version: "17.0.2",
96
+ };
97
+ const libraries = {};
98
+ const result = dependencySource(dependency, libraries, "unpkg");
99
+ expect(result).toBe("https://unpkg.com/react@17.0.2");
100
+ });
101
+ });
102
+ describe("getLicense", () => {
103
+ it("should return license from package.json", () => {
104
+ const result = getLicense(mockFiles);
105
+ expect(result).toBe("Apache-2.0");
106
+ });
107
+ it("should return default MIT license when not specified", () => {
108
+ const result = getLicense(emptyFiles);
109
+ expect(result).toBe("MIT");
110
+ });
111
+ });
112
+ describe("Edge cases", () => {
113
+ it("should handle malformed library configuration", () => {
114
+ const malformedFiles = {
115
+ "package.json": JSON.stringify({
116
+ dependencies: { d3: "7.0.0" },
117
+ vizhub: { libraries: { d3: null } },
118
+ }),
119
+ };
120
+ const result = getConfiguredLibraries(malformedFiles);
121
+ expect(result).toEqual({ d3: null });
122
+ });
123
+ it("should handle empty version strings", () => {
124
+ const dependency = { name: "react", version: "" };
125
+ const result = dependencySource(dependency, {});
126
+ expect(result).toBe("https://cdn.jsdelivr.net/npm/react@");
127
+ });
128
+ it("should handle special characters in dependency names", () => {
129
+ const specialCharDep = {
130
+ name: "@angular/core",
131
+ version: "14.0.0",
132
+ };
133
+ const result = dependencySource(specialCharDep, {});
134
+ expect(result).toBe("https://cdn.jsdelivr.net/npm/@angular/core@14.0.0");
135
+ });
136
+ it("should handle unusual license formats", () => {
137
+ const unusualLicenseFiles = {
138
+ "package.json": JSON.stringify({
139
+ license: { type: "MIT" },
140
+ }),
141
+ };
142
+ const result = getLicense(unusualLicenseFiles);
143
+ expect(result).toBe("MIT");
144
+ });
145
+ });
146
+ });
@@ -0,0 +1,2 @@
1
+ import type { Plugin } from "rollup";
2
+ export declare function sucrasePlugin(): Plugin;
@@ -0,0 +1,24 @@
1
+ import { transform } from "sucrase";
2
+ export function sucrasePlugin() {
3
+ return {
4
+ name: "sucrase",
5
+ transform(code, id) {
6
+ // Transform .js, .jsx, and .tsx files
7
+ if (!id.match(/\.(?:js|[jt]sx)$/)) {
8
+ return null;
9
+ }
10
+ const result = transform(code, {
11
+ transforms: ["jsx", "typescript"],
12
+ filePath: id, // For source maps
13
+ sourceMapOptions: {
14
+ compiledFilename: "bundle.js",
15
+ },
16
+ production: true,
17
+ });
18
+ return {
19
+ code: result.code,
20
+ map: result.sourceMap,
21
+ };
22
+ },
23
+ };
24
+ }
@@ -0,0 +1,3 @@
1
+ import { Plugin } from "rollup";
2
+ import { FileCollection } from "../types";
3
+ export declare const virtualFileSystem: (files: FileCollection) => Plugin;
@@ -0,0 +1,75 @@
1
+ const normalizePath = (filepath) => {
2
+ // Remove leading ./
3
+ let normalized = filepath.replace(/^\.\//, "");
4
+ // Replace multiple slashes with single slash
5
+ normalized = normalized.replace(/\/+/g, "/");
6
+ // Remove trailing slash
7
+ normalized = normalized.replace(/\/$/, "");
8
+ return normalized;
9
+ };
10
+ const joinPaths = (base, relative) => {
11
+ // Get directory name of base path
12
+ const baseDir = base.includes("/")
13
+ ? base.slice(0, base.lastIndexOf("/"))
14
+ : "";
15
+ // Handle .. by removing one directory level
16
+ const parts = relative.split("/");
17
+ const resultParts = baseDir
18
+ ? baseDir.split("/")
19
+ : [];
20
+ for (const part of parts) {
21
+ if (part === "..") {
22
+ resultParts.pop();
23
+ }
24
+ else if (part !== "." && part !== "") {
25
+ resultParts.push(part);
26
+ }
27
+ }
28
+ return resultParts.join("/");
29
+ };
30
+ export const virtualFileSystem = (files) => {
31
+ return {
32
+ name: "virtual-file-system",
33
+ resolveId(source, importer) {
34
+ // Handle relative paths
35
+ if (source.startsWith("./") ||
36
+ source.startsWith("../")) {
37
+ const resolvedPath = importer
38
+ ? normalizePath(joinPaths(importer, source))
39
+ : normalizePath(source);
40
+ // Try exact match first
41
+ if (files[resolvedPath]) {
42
+ return resolvedPath;
43
+ }
44
+ // Try with extensions if no exact match is found
45
+ const extensions = [".js", ".jsx", ".ts", ".tsx"];
46
+ for (const ext of extensions) {
47
+ const pathWithExt = resolvedPath + ext;
48
+ if (files[pathWithExt]) {
49
+ return pathWithExt;
50
+ }
51
+ }
52
+ }
53
+ // Handle bare module imports
54
+ if (files[source]) {
55
+ return source;
56
+ }
57
+ // Try bare imports with extensions
58
+ const extensions = [".js", ".jsx", ".ts", ".tsx"];
59
+ for (const ext of extensions) {
60
+ const pathWithExt = source + ext;
61
+ if (files[pathWithExt]) {
62
+ return pathWithExt;
63
+ }
64
+ }
65
+ return null;
66
+ },
67
+ load(id) {
68
+ // Return the contents if the file exists in our virtual system
69
+ if (files[id]) {
70
+ return files[id];
71
+ }
72
+ return null;
73
+ },
74
+ };
75
+ };
@@ -0,0 +1,2 @@
1
+ import { FileCollection, runtimeVersion } from "./types";
2
+ export declare const determineRuntimeVersion: (files: FileCollection) => runtimeVersion | null;
@@ -0,0 +1,22 @@
1
+ export const determineRuntimeVersion = (files) => {
2
+ if (Object.keys(files).length === 0) {
3
+ return null;
4
+ }
5
+ const hasIndexHTML = "index.html" in files;
6
+ const hasIndexJS = "index.js" in files;
7
+ const hasIndexJSX = "index.jsx" in files;
8
+ if (hasIndexHTML) {
9
+ const hasModuleScript = files["index.html"].includes('type="module"');
10
+ if (hasModuleScript) {
11
+ return "v4";
12
+ }
13
+ if (hasIndexJS || hasIndexJSX) {
14
+ return "v2";
15
+ }
16
+ return "v1";
17
+ }
18
+ if (!hasIndexHTML && hasIndexJS) {
19
+ return "v3";
20
+ }
21
+ return null;
22
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { determineRuntimeVersion } from "./determineRuntimeVersion";
3
+ import { jsScriptTagTypeModule, jsScriptTagTypeModules, fetchInterception, esmBuild, } from "./test/fixtures/v4";
4
+ describe("determineRuntimeVersion", () => {
5
+ it("should return null when there are no files", () => {
6
+ const mockFiles = {};
7
+ const result = determineRuntimeVersion(mockFiles);
8
+ expect(result).toBe(null);
9
+ });
10
+ it("should return v1 when only index.html exists", () => {
11
+ const mockFiles = {
12
+ "index.html": "<html></html>",
13
+ };
14
+ const result = determineRuntimeVersion(mockFiles);
15
+ expect(result).toBe("v1");
16
+ });
17
+ it("should return v2 when both index.html and index.js exist", () => {
18
+ const mockFiles = {
19
+ "index.html": "<html></html>",
20
+ "index.js": 'console.log("Hello");',
21
+ };
22
+ const result = determineRuntimeVersion(mockFiles);
23
+ expect(result).toBe("v2");
24
+ });
25
+ it("should return v2 when both index.html and index.jsx exist", () => {
26
+ const mockFiles = {
27
+ "index.html": "<html></html>",
28
+ "index.jsx": 'console.log("Hello");',
29
+ };
30
+ const result = determineRuntimeVersion(mockFiles);
31
+ expect(result).toBe("v2");
32
+ });
33
+ it("should return v3 when only index.js exists", () => {
34
+ const mockFiles = {
35
+ "index.js": 'console.log("Hello");',
36
+ };
37
+ const result = determineRuntimeVersion(mockFiles);
38
+ expect(result).toBe("v3");
39
+ });
40
+ it("should return null when only index.jsx exists (no v3 support for JSX)", () => {
41
+ const mockFiles = {
42
+ "index.jsx": 'console.log("Hello");',
43
+ };
44
+ const result = determineRuntimeVersion(mockFiles);
45
+ expect(result).toBe(null);
46
+ });
47
+ it("should return v4 when index.html contains script type=module with importmap", () => {
48
+ const mockFiles = {
49
+ "index.html": `
50
+ <!DOCTYPE html>
51
+ <html>
52
+ <head>
53
+ <script type="importmap">
54
+ { "imports": { "test": "./test.js" } }
55
+ </script>
56
+ </head>
57
+ <body>
58
+ <script type="module" src="index.js"></script>
59
+ </body>
60
+ </html>
61
+ `,
62
+ "index.js": 'import { hello } from "test"; console.log(hello);',
63
+ "test.js": 'export const hello = "world";',
64
+ };
65
+ const result = determineRuntimeVersion(mockFiles);
66
+ expect(result).toBe("v4");
67
+ });
68
+ it("should return v4 when multiple module scripts are present", () => {
69
+ const mockFiles = {
70
+ "index.html": `
71
+ <!DOCTYPE html>
72
+ <html>
73
+ <body>
74
+ <script type="module" src="index.js"></script>
75
+ </body>
76
+ </html>
77
+ `,
78
+ "index.js": 'import { hello } from "./utils.js"; console.log(hello);',
79
+ "utils.js": 'export const hello = "world";',
80
+ };
81
+ const result = determineRuntimeVersion(mockFiles);
82
+ expect(result).toBe("v4");
83
+ });
84
+ // Test v4 fixtures
85
+ it("should detect v4 for jsScriptTagTypeModule fixture", () => {
86
+ const result = determineRuntimeVersion(jsScriptTagTypeModule);
87
+ expect(result).toBe("v4");
88
+ });
89
+ it("should detect v4 for jsScriptTagTypeModules fixture", () => {
90
+ const result = determineRuntimeVersion(jsScriptTagTypeModules);
91
+ expect(result).toBe("v4");
92
+ });
93
+ it("should detect v4 for fetchInterception fixture", () => {
94
+ const result = determineRuntimeVersion(fetchInterception);
95
+ expect(result).toBe("v4");
96
+ });
97
+ it("should detect v4 for esmBuild fixture", () => {
98
+ const result = determineRuntimeVersion(esmBuild);
99
+ expect(result).toBe("v4");
100
+ });
101
+ });
@@ -0,0 +1,2 @@
1
+ import { VizFiles } from "@vizhub/viz-types";
2
+ export declare const basicHTML: VizFiles;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.basicHTML = void 0;
4
+ const viz_types_1 = require("@vizhub/viz-types");
5
+ exports.basicHTML = {
6
+ [(0, viz_types_1.generateVizFileId)()]: {
7
+ name: "index.html",
8
+ text: `<!DOCTYPE html>
9
+ <html>
10
+ <head>
11
+ <title>My HTML Document</title>
12
+ </head>
13
+ <body>
14
+ <h1>Hello, World!</h1>
15
+ <p>This is my first HTML document.</p>
16
+ <script>
17
+ console.log('Hello, World!');
18
+ </script>
19
+ </body>
20
+ </html>`,
21
+ },
22
+ };
@@ -0,0 +1,2 @@
1
+ import { VizFiles } from "@vizhub/viz-types";
2
+ export declare const fetchProxy: VizFiles;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchProxy = void 0;
4
+ const viz_types_1 = require("@vizhub/viz-types");
5
+ exports.fetchProxy = {
6
+ [(0, viz_types_1.generateVizFileId)()]: {
7
+ name: "index.html",
8
+ text: `<!DOCTYPE html>
9
+ <html>
10
+ <body>
11
+ <script src="index.js"></script>
12
+ </body>
13
+ </html>`,
14
+ },
15
+ [(0, viz_types_1.generateVizFileId)()]: {
16
+ name: "index.js",
17
+ text: `fetch("data.csv")
18
+ .then((response) => response.text())
19
+ .then(console.log);`,
20
+ },
21
+ [(0, viz_types_1.generateVizFileId)()]: {
22
+ name: "data.csv",
23
+ text: `Hello, Fetch!`,
24
+ },
25
+ };
@@ -0,0 +1,3 @@
1
+ export { basicHTML } from "./basicHTML";
2
+ export { jsScriptTag } from "./jsScriptTag";
3
+ export { fetchProxy } from "./fetchProxy";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchProxy = exports.jsScriptTag = exports.basicHTML = void 0;
4
+ var basicHTML_1 = require("./basicHTML");
5
+ Object.defineProperty(exports, "basicHTML", { enumerable: true, get: function () { return basicHTML_1.basicHTML; } });
6
+ var jsScriptTag_1 = require("./jsScriptTag");
7
+ Object.defineProperty(exports, "jsScriptTag", { enumerable: true, get: function () { return jsScriptTag_1.jsScriptTag; } });
8
+ var fetchProxy_1 = require("./fetchProxy");
9
+ Object.defineProperty(exports, "fetchProxy", { enumerable: true, get: function () { return fetchProxy_1.fetchProxy; } });
@@ -0,0 +1,2 @@
1
+ import { VizFiles } from "@vizhub/viz-types";
2
+ export declare const jsScriptTag: VizFiles;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsScriptTag = void 0;
4
+ const viz_types_1 = require("@vizhub/viz-types");
5
+ exports.jsScriptTag = {
6
+ [(0, viz_types_1.generateVizFileId)()]: {
7
+ name: "index.html",
8
+ text: `<!DOCTYPE html>
9
+ <html>
10
+ <body>
11
+ <script src="index.js"></script>
12
+ </body>
13
+ </html>`,
14
+ },
15
+ [(0, viz_types_1.generateVizFileId)()]: {
16
+ name: "index.js",
17
+ text: `console.log('Hello, JS!');`,
18
+ },
19
+ };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,14 @@
1
- export type { V3BuildResult } from './v3Runtime';
2
- export type { VizCache } from './v3Runtime/vizCache';
3
- export { computeSrcDoc } from './computeSrcDoc';
4
- export { setJSDOM } from './v2Runtime/getComputedIndexHtml';
5
- export { useRuntime } from './useRuntime';
6
- export { createVizCache } from './v3Runtime/vizCache';
7
- export { cleanRollupErrorMessage } from './v3Runtime/cleanRollupErrorMessage';
8
- //# sourceMappingURL=index.d.ts.map
1
+ import { FileCollection } from "magic-sandbox";
2
+ import type { RollupBuild, RollupOptions } from "rollup";
3
+ import { VizCache } from "./v3/vizCache";
4
+ import { SlugCache } from "./v3/slugCache";
5
+ import { SvelteCompiler } from "./v3/transformSvelte";
6
+ export declare const buildHTML: ({ files, rollup, enableSourcemap, vizCache, vizId, slugCache, getSvelteCompiler, }: {
7
+ files?: FileCollection;
8
+ rollup?: (options: RollupOptions) => Promise<RollupBuild>;
9
+ enableSourcemap?: boolean;
10
+ vizCache?: VizCache;
11
+ vizId?: string;
12
+ slugCache?: SlugCache;
13
+ getSvelteCompiler?: () => Promise<SvelteCompiler>;
14
+ }) => Promise<string>;