@vizhub/runtime 0.1.4 → 0.3.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 (291) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +376 -178
  3. package/dist/buildHTML.d.ts +14 -0
  4. package/dist/buildHTML.js +67 -0
  5. package/dist/common/packageJson.d.ts +39 -0
  6. package/dist/common/packageJson.js +71 -0
  7. package/dist/common/packageJson.test.d.ts +1 -0
  8. package/dist/common/packageJson.test.js +146 -0
  9. package/dist/common/sucrasePlugin.d.ts +2 -0
  10. package/dist/common/sucrasePlugin.js +24 -0
  11. package/dist/common/virtualFileSystem.d.ts +3 -0
  12. package/dist/common/virtualFileSystem.js +75 -0
  13. package/dist/determineRuntimeVersion.d.ts +3 -0
  14. package/dist/determineRuntimeVersion.js +22 -0
  15. package/dist/determineRuntimeVersion.test.d.ts +1 -0
  16. package/dist/determineRuntimeVersion.test.js +101 -0
  17. package/dist/fixtures/basicHTML.d.ts +2 -0
  18. package/dist/fixtures/basicHTML.js +22 -0
  19. package/dist/fixtures/fetchProxy.d.ts +2 -0
  20. package/dist/fixtures/fetchProxy.js +25 -0
  21. package/dist/fixtures/index.d.ts +3 -0
  22. package/dist/fixtures/index.js +9 -0
  23. package/dist/fixtures/jsScriptTag.d.ts +2 -0
  24. package/dist/fixtures/jsScriptTag.js +19 -0
  25. package/dist/index.d.ts +3 -8
  26. package/dist/index.js +3 -24890
  27. package/dist/index.test.d.ts +1 -0
  28. package/dist/index.test.js +50 -0
  29. package/dist/magicSandbox/fixProtocollessUrls.d.ts +4 -0
  30. package/dist/magicSandbox/fixProtocollessUrls.js +10 -0
  31. package/dist/magicSandbox/generateInterceptorScript.d.ts +4 -0
  32. package/dist/magicSandbox/generateInterceptorScript.js +178 -0
  33. package/dist/magicSandbox/index.d.ts +19 -0
  34. package/dist/magicSandbox/index.js +48 -0
  35. package/dist/test/fixtures/basicHTML.d.ts +2 -0
  36. package/dist/test/fixtures/basicHTML.js +19 -0
  37. package/dist/test/fixtures/fetchProxy.d.ts +2 -0
  38. package/dist/test/fixtures/fetchProxy.js +22 -0
  39. package/dist/test/fixtures/index.d.ts +6 -0
  40. package/dist/test/fixtures/index.js +6 -0
  41. package/dist/test/fixtures/jsScriptTag.d.ts +2 -0
  42. package/dist/test/fixtures/jsScriptTag.js +16 -0
  43. package/dist/test/fixtures/magicSandbox/basicHTML.d.ts +5 -0
  44. package/dist/test/fixtures/magicSandbox/basicHTML.js +17 -0
  45. package/dist/test/fixtures/magicSandbox/fetchProxy.d.ts +11 -0
  46. package/dist/test/fixtures/magicSandbox/fetchProxy.js +18 -0
  47. package/dist/test/fixtures/magicSandbox/index.d.ts +6 -0
  48. package/dist/test/fixtures/magicSandbox/index.js +6 -0
  49. package/dist/test/fixtures/magicSandbox/jsScriptTag.d.ts +8 -0
  50. package/dist/test/fixtures/magicSandbox/jsScriptTag.js +13 -0
  51. package/dist/test/fixtures/magicSandbox/protocolTest.d.ts +5 -0
  52. package/dist/test/fixtures/magicSandbox/protocolTest.js +17 -0
  53. package/dist/test/fixtures/magicSandbox/styleTest.d.ts +8 -0
  54. package/dist/test/fixtures/magicSandbox/styleTest.js +19 -0
  55. package/dist/test/fixtures/magicSandbox/xmlTest.d.ts +8 -0
  56. package/dist/test/fixtures/magicSandbox/xmlTest.js +23 -0
  57. package/dist/test/fixtures/protocolTest.d.ts +2 -0
  58. package/dist/test/fixtures/protocolTest.js +19 -0
  59. package/dist/test/fixtures/styleTest.d.ts +2 -0
  60. package/dist/test/fixtures/styleTest.js +22 -0
  61. package/dist/test/fixtures/v1/basicHTML.d.ts +3 -0
  62. package/dist/test/fixtures/v1/basicHTML.js +15 -0
  63. package/dist/test/fixtures/v1/fetchProxy.d.ts +5 -0
  64. package/dist/test/fixtures/v1/fetchProxy.js +12 -0
  65. package/dist/test/fixtures/v1/index.d.ts +6 -0
  66. package/dist/test/fixtures/v1/index.js +6 -0
  67. package/dist/test/fixtures/v1/jsScriptTag.d.ts +4 -0
  68. package/dist/test/fixtures/v1/jsScriptTag.js +9 -0
  69. package/dist/test/fixtures/v1/protocolTest.d.ts +3 -0
  70. package/dist/test/fixtures/v1/protocolTest.js +15 -0
  71. package/dist/test/fixtures/v1/styleTest.d.ts +4 -0
  72. package/dist/test/fixtures/v1/styleTest.js +15 -0
  73. package/dist/test/fixtures/v1/xmlTest.d.ts +4 -0
  74. package/dist/test/fixtures/v1/xmlTest.js +19 -0
  75. package/dist/test/fixtures/v2/basicBundle.d.ts +5 -0
  76. package/dist/test/fixtures/v2/basicBundle.js +5 -0
  77. package/dist/test/fixtures/v2/basicBundleNoExtension.d.ts +5 -0
  78. package/dist/test/fixtures/v2/basicBundleNoExtension.js +5 -0
  79. package/dist/test/fixtures/v2/d3Import.d.ts +4 -0
  80. package/dist/test/fixtures/v2/d3Import.js +7 -0
  81. package/dist/test/fixtures/v2/d3ImportPkg.d.ts +5 -0
  82. package/dist/test/fixtures/v2/d3ImportPkg.js +19 -0
  83. package/dist/test/fixtures/v2/d3RosettaImportPkg.d.ts +5 -0
  84. package/dist/test/fixtures/v2/d3RosettaImportPkg.js +19 -0
  85. package/dist/test/fixtures/v2/es6Preserve.d.ts +4 -0
  86. package/dist/test/fixtures/v2/es6Preserve.js +6 -0
  87. package/dist/test/fixtures/v2/generatorSupport.d.ts +4 -0
  88. package/dist/test/fixtures/v2/generatorSupport.js +6 -0
  89. package/dist/test/fixtures/v2/index.d.ts +14 -0
  90. package/dist/test/fixtures/v2/index.js +15 -0
  91. package/dist/test/fixtures/v2/jsxTranspile.d.ts +4 -0
  92. package/dist/test/fixtures/v2/jsxTranspile.js +6 -0
  93. package/dist/test/fixtures/v2/reactDomImport.d.ts +4 -0
  94. package/dist/test/fixtures/v2/reactDomImport.js +8 -0
  95. package/dist/test/fixtures/v2/reactDomImportPkg.d.ts +5 -0
  96. package/dist/test/fixtures/v2/reactDomImportPkg.js +24 -0
  97. package/dist/test/fixtures/v2/reactImport.d.ts +4 -0
  98. package/dist/test/fixtures/v2/reactImport.js +7 -0
  99. package/dist/test/fixtures/v2/reactImportPkg.d.ts +5 -0
  100. package/dist/test/fixtures/v2/reactImportPkg.js +17 -0
  101. package/dist/test/fixtures/v2/sourceMapErrorFixture.d.ts +5 -0
  102. package/dist/test/fixtures/v2/sourceMapErrorFixture.js +19 -0
  103. package/dist/test/fixtures/v2/unicodeSupport.d.ts +4 -0
  104. package/dist/test/fixtures/v2/unicodeSupport.js +6 -0
  105. package/dist/test/fixtures/v3/basicIndexJS.d.ts +3 -0
  106. package/dist/test/fixtures/v3/basicIndexJS.js +7 -0
  107. package/dist/test/fixtures/v3/cssImport.d.ts +4 -0
  108. package/dist/test/fixtures/v3/cssImport.js +9 -0
  109. package/dist/test/fixtures/v3/csvImport.d.ts +4 -0
  110. package/dist/test/fixtures/v3/csvImport.js +11 -0
  111. package/dist/test/fixtures/v3/csvStrangeChars.d.ts +4 -0
  112. package/dist/test/fixtures/v3/csvStrangeChars.js +12 -0
  113. package/dist/test/fixtures/v3/index.d.ts +9 -0
  114. package/dist/test/fixtures/v3/index.js +9 -0
  115. package/dist/test/fixtures/v3/jsExport.d.ts +4 -0
  116. package/dist/test/fixtures/v3/jsExport.js +10 -0
  117. package/dist/test/fixtures/v3/sourcemap.d.ts +3 -0
  118. package/dist/test/fixtures/v3/sourcemap.js +10 -0
  119. package/dist/test/fixtures/v3/svelte.d.ts +4 -0
  120. package/dist/test/fixtures/v3/svelte.js +18 -0
  121. package/dist/test/fixtures/v3/vizContent.d.ts +2 -0
  122. package/dist/test/fixtures/v3/vizContent.js +11 -0
  123. package/dist/test/fixtures/v3/vizImport.d.ts +6 -0
  124. package/dist/test/fixtures/v3/vizImport.js +85 -0
  125. package/dist/test/fixtures/v4/d3Usage.d.ts +5 -0
  126. package/dist/test/fixtures/v4/d3Usage.js +31 -0
  127. package/dist/test/fixtures/v4/esmBuild.d.ts +5 -0
  128. package/dist/test/fixtures/v4/esmBuild.js +18 -0
  129. package/dist/test/fixtures/v4/fetchInterception.d.ts +5 -0
  130. package/dist/test/fixtures/v4/fetchInterception.js +18 -0
  131. package/dist/test/fixtures/v4/index.d.ts +9 -0
  132. package/dist/test/fixtures/v4/index.js +9 -0
  133. package/dist/test/fixtures/v4/jsScriptTagTypeModule.d.ts +4 -0
  134. package/dist/test/fixtures/v4/jsScriptTagTypeModule.js +18 -0
  135. package/dist/test/fixtures/v4/jsScriptTagTypeModules.d.ts +5 -0
  136. package/dist/test/fixtures/v4/jsScriptTagTypeModules.js +12 -0
  137. package/dist/test/fixtures/v4/reactHooks.d.ts +6 -0
  138. package/dist/test/fixtures/v4/reactHooks.js +47 -0
  139. package/dist/test/fixtures/v4/reactJsx.d.ts +6 -0
  140. package/dist/test/fixtures/v4/reactJsx.js +34 -0
  141. package/dist/test/fixtures/v4/threeJsUsage.d.ts +4 -0
  142. package/dist/test/fixtures/v4/threeJsUsage.js +24 -0
  143. package/dist/test/fixtures/v4/typeScriptSupport.d.ts +5 -0
  144. package/dist/test/fixtures/v4/typeScriptSupport.js +29 -0
  145. package/dist/test/fixtures/xmlTest.d.ts +2 -0
  146. package/dist/test/fixtures/xmlTest.js +26 -0
  147. package/dist/test/index.test.d.ts +1 -0
  148. package/dist/test/index.test.js +40 -0
  149. package/dist/test/testInBrowser.d.ts +15 -0
  150. package/dist/test/testInBrowser.js +47 -0
  151. package/dist/test/testStackTrace.d.ts +9 -0
  152. package/dist/test/testStackTrace.js +55 -0
  153. package/dist/test/v1.test.d.ts +1 -0
  154. package/dist/test/v1.test.js +65 -0
  155. package/dist/test/v2.test.d.ts +1 -0
  156. package/dist/test/v2.test.js +121 -0
  157. package/dist/test/v3.test.d.ts +1 -0
  158. package/dist/test/v3.test.js +114 -0
  159. package/dist/test/v4.test.d.ts +1 -0
  160. package/dist/test/v4.test.js +100 -0
  161. package/dist/types.d.ts +1 -0
  162. package/dist/types.js +1 -0
  163. package/dist/utils/getFileText.d.ts +2 -0
  164. package/dist/utils/getFileText.js +13 -0
  165. package/dist/utils/getFileText.test.d.ts +1 -0
  166. package/dist/utils/getFileText.test.js +72 -0
  167. package/dist/utils/vizContentToFileCollection.d.ts +7 -0
  168. package/dist/utils/vizContentToFileCollection.js +19 -0
  169. package/dist/utils/vizContentToFileCollection.test.d.ts +1 -0
  170. package/dist/utils/vizContentToFileCollection.test.js +75 -0
  171. package/dist/v2/computeBundleJSV2.d.ts +7 -0
  172. package/dist/v2/computeBundleJSV2.js +29 -0
  173. package/dist/v2/getComputedIndexHtml.d.ts +4 -0
  174. package/dist/v2/getComputedIndexHtml.js +81 -0
  175. package/dist/v2/getComputedIndexHtml.test.d.ts +1 -0
  176. package/dist/v2/getComputedIndexHtml.test.js +134 -0
  177. package/dist/v2/index.d.ts +1 -0
  178. package/dist/v2/index.js +1 -0
  179. package/dist/v2/v2Build.d.ts +7 -0
  180. package/dist/v2/v2Build.js +11 -0
  181. package/dist/{v3Runtime → v3}/cleanRollupErrorMessage.d.ts +0 -1
  182. package/dist/v3/cleanRollupErrorMessage.js +9 -0
  183. package/dist/v3/computeBundleJSV3.d.ts +17 -0
  184. package/dist/v3/computeBundleJSV3.js +48 -0
  185. package/dist/v3/createVizContent.d.ts +8 -0
  186. package/dist/v3/createVizContent.js +23 -0
  187. package/dist/{v3Runtime → v3}/extractVizImport.d.ts +2 -3
  188. package/dist/v3/extractVizImport.js +23 -0
  189. package/dist/v3/extractVizImport.test.d.ts +1 -0
  190. package/dist/v3/extractVizImport.test.js +30 -0
  191. package/dist/v3/htmlTemplate.d.ts +5 -0
  192. package/dist/v3/htmlTemplate.js +89 -0
  193. package/dist/v3/index.d.ts +1 -0
  194. package/dist/v3/index.js +1 -0
  195. package/dist/v3/parseId.d.ts +6 -0
  196. package/dist/v3/parseId.js +5 -0
  197. package/dist/v3/parseId.test.d.ts +1 -0
  198. package/dist/v3/parseId.test.js +25 -0
  199. package/dist/{v3Runtime → v3}/setupV3Runtime.d.ts +5 -5
  200. package/dist/v3/setupV3Runtime.js +341 -0
  201. package/dist/v3/slugCache.d.ts +11 -0
  202. package/dist/v3/slugCache.js +35 -0
  203. package/dist/v3/slugCache.test.d.ts +1 -0
  204. package/dist/v3/slugCache.test.js +105 -0
  205. package/dist/v3/transformDSV/dsvParseSrc.d.ts +1 -0
  206. package/dist/v3/transformDSV/dsvParseSrc.js +121 -0
  207. package/dist/v3/transformDSV/index.d.ts +2 -0
  208. package/dist/v3/transformDSV/index.js +40 -0
  209. package/dist/{v3Runtime → v3}/transformSvelte.d.ts +4 -2
  210. package/dist/v3/transformSvelte.js +77 -0
  211. package/dist/{v3Runtime → v3}/types.d.ts +18 -18
  212. package/dist/v3/types.js +1 -0
  213. package/dist/v3/v3Build.d.ts +14 -0
  214. package/dist/v3/v3Build.js +30 -0
  215. package/dist/v3/vizCache.d.ts +10 -0
  216. package/dist/v3/vizCache.js +36 -0
  217. package/dist/v3/vizCache.test.d.ts +1 -0
  218. package/dist/v3/vizCache.test.js +98 -0
  219. package/dist/{v3Runtime → v3}/vizLoad.d.ts +3 -4
  220. package/dist/v3/vizLoad.js +46 -0
  221. package/dist/v3/vizResolve.d.ts +7 -0
  222. package/dist/v3/vizResolve.js +69 -0
  223. package/dist/v4/index.d.ts +10 -0
  224. package/dist/v4/index.js +134 -0
  225. package/package.json +37 -38
  226. package/dist/assets/setupV3Runtime-BVr5lyKp.js +0 -240
  227. package/dist/computeSrcDoc.d.ts +0 -13
  228. package/dist/computeSrcDoc.d.ts.map +0 -1
  229. package/dist/computeSrcDoc.test.d.ts +0 -2
  230. package/dist/computeSrcDoc.test.d.ts.map +0 -1
  231. package/dist/index.d.ts.map +0 -1
  232. package/dist/useRuntime.d.ts +0 -13
  233. package/dist/useRuntime.d.ts.map +0 -1
  234. package/dist/v2Runtime/bundle/bubleJSXOnly.d.ts +0 -5
  235. package/dist/v2Runtime/bundle/bubleJSXOnly.d.ts.map +0 -1
  236. package/dist/v2Runtime/bundle/packageJson.d.ts +0 -10
  237. package/dist/v2Runtime/bundle/packageJson.d.ts.map +0 -1
  238. package/dist/v2Runtime/computeSrcDocV2.d.ts +0 -3
  239. package/dist/v2Runtime/computeSrcDocV2.d.ts.map +0 -1
  240. package/dist/v2Runtime/computeSrcDocV2.test.d.ts +0 -2
  241. package/dist/v2Runtime/computeSrcDocV2.test.d.ts.map +0 -1
  242. package/dist/v2Runtime/getComputedIndexHtml.d.ts +0 -4
  243. package/dist/v2Runtime/getComputedIndexHtml.d.ts.map +0 -1
  244. package/dist/v2Runtime/getComputedIndexHtml.test.d.ts +0 -2
  245. package/dist/v2Runtime/getComputedIndexHtml.test.d.ts.map +0 -1
  246. package/dist/v2Runtime/getText.d.ts +0 -3
  247. package/dist/v2Runtime/getText.d.ts.map +0 -1
  248. package/dist/v2Runtime/transformFiles.d.ts +0 -3
  249. package/dist/v2Runtime/transformFiles.d.ts.map +0 -1
  250. package/dist/v2Runtime/v3FilesToV2Files.d.ts +0 -3
  251. package/dist/v2Runtime/v3FilesToV2Files.d.ts.map +0 -1
  252. package/dist/v2Runtime/v3FilesToV2Files.test.d.ts +0 -2
  253. package/dist/v2Runtime/v3FilesToV2Files.test.d.ts.map +0 -1
  254. package/dist/v3Runtime/build.d.ts +0 -14
  255. package/dist/v3Runtime/build.d.ts.map +0 -1
  256. package/dist/v3Runtime/build.test.d.ts +0 -2
  257. package/dist/v3Runtime/build.test.d.ts.map +0 -1
  258. package/dist/v3Runtime/cleanRollupErrorMessage.d.ts.map +0 -1
  259. package/dist/v3Runtime/computeSrcDocV3.d.ts +0 -7
  260. package/dist/v3Runtime/computeSrcDocV3.d.ts.map +0 -1
  261. package/dist/v3Runtime/extractVizImport.d.ts.map +0 -1
  262. package/dist/v3Runtime/extractVizImport.test.d.ts +0 -2
  263. package/dist/v3Runtime/extractVizImport.test.d.ts.map +0 -1
  264. package/dist/v3Runtime/generateRollupErrorMessage.d.ts +0 -5
  265. package/dist/v3Runtime/generateRollupErrorMessage.d.ts.map +0 -1
  266. package/dist/v3Runtime/importFromViz.d.ts +0 -1
  267. package/dist/v3Runtime/importFromViz.d.ts.map +0 -1
  268. package/dist/v3Runtime/index.d.ts +0 -2
  269. package/dist/v3Runtime/index.d.ts.map +0 -1
  270. package/dist/v3Runtime/parseId.d.ts +0 -7
  271. package/dist/v3Runtime/parseId.d.ts.map +0 -1
  272. package/dist/v3Runtime/setupV3Runtime.d.ts.map +0 -1
  273. package/dist/v3Runtime/transformDSV/index.d.ts +0 -3
  274. package/dist/v3Runtime/transformDSV/index.d.ts.map +0 -1
  275. package/dist/v3Runtime/transformSvelte.d.ts.map +0 -1
  276. package/dist/v3Runtime/types.d.ts.map +0 -1
  277. package/dist/v3Runtime/urlLoad.d.ts +0 -1
  278. package/dist/v3Runtime/urlLoad.d.ts.map +0 -1
  279. package/dist/v3Runtime/virtual.d.ts +0 -1
  280. package/dist/v3Runtime/virtual.d.ts.map +0 -1
  281. package/dist/v3Runtime/vizCache.d.ts +0 -11
  282. package/dist/v3Runtime/vizCache.d.ts.map +0 -1
  283. package/dist/v3Runtime/vizCache.test.d.ts +0 -2
  284. package/dist/v3Runtime/vizCache.test.d.ts.map +0 -1
  285. package/dist/v3Runtime/vizLoad.d.ts.map +0 -1
  286. package/dist/v3Runtime/vizLoadSvelte.d.ts +0 -1
  287. package/dist/v3Runtime/vizLoadSvelte.d.ts.map +0 -1
  288. package/dist/v3Runtime/vizResolve.d.ts +0 -10
  289. package/dist/v3Runtime/vizResolve.d.ts.map +0 -1
  290. package/dist/v3Runtime/worker.d.ts +0 -2
  291. package/dist/v3Runtime/worker.d.ts.map +0 -1
@@ -0,0 +1,67 @@
1
+ import { magicSandbox } from "magic-sandbox";
2
+ import { determineRuntimeVersion } from "./determineRuntimeVersion";
3
+ import { v2Build } from "./v2";
4
+ import { v3Build } from "./v3";
5
+ import { v4Build } from "./v4";
6
+ import { createVizCache } from "./v3/vizCache";
7
+ import { createVizContent } from "./v3/createVizContent";
8
+ import { vizContentToFileCollection } from "./utils/vizContentToFileCollection";
9
+ const DEBUG = false;
10
+ export const buildHTML = async ({ files, rollup, enableSourcemap = true, vizCache, vizId, slugCache, getSvelteCompiler, }) => {
11
+ if (!files && !vizCache) {
12
+ throw new Error("Either files or vizCache is required");
13
+ }
14
+ if (!files && vizCache && !vizId) {
15
+ throw new Error("vizId is required when using vizCache");
16
+ }
17
+ if (!files && vizCache && vizId) {
18
+ files = vizContentToFileCollection(await vizCache.get(vizId));
19
+ }
20
+ if (!files) {
21
+ throw new Error("Upable to extract viz files");
22
+ }
23
+ const version = determineRuntimeVersion(files);
24
+ DEBUG && console.log("[buildHTML] version:", version);
25
+ if (version === "v1") {
26
+ return magicSandbox(files);
27
+ }
28
+ if (version === "v2") {
29
+ if (!rollup) {
30
+ throw new Error("Rollup is required for v2 runtime");
31
+ }
32
+ return magicSandbox(await v2Build({ files, rollup, enableSourcemap }));
33
+ }
34
+ if (version === "v3") {
35
+ if (!rollup) {
36
+ throw new Error("Rollup is required for v3 runtime");
37
+ }
38
+ if (!vizCache && !vizId) {
39
+ const vizContent = createVizContent(files);
40
+ vizId = vizContent.id;
41
+ vizCache = createVizCache({
42
+ initialContents: [vizContent],
43
+ handleCacheMiss: async () => {
44
+ throw new Error("Cache miss handler not implemented");
45
+ },
46
+ });
47
+ }
48
+ if (!vizCache || !vizId) {
49
+ throw new Error("vizCache and vizId are required for v3 runtime");
50
+ }
51
+ return await v3Build({
52
+ files,
53
+ rollup,
54
+ vizCache,
55
+ vizId,
56
+ slugCache,
57
+ getSvelteCompiler,
58
+ });
59
+ }
60
+ if (version === "v4") {
61
+ if (!rollup) {
62
+ throw new Error("Rollup is required for v4 runtime");
63
+ }
64
+ return magicSandbox(await v4Build({ files, rollup, enableSourcemap }));
65
+ }
66
+ throw new Error(`Unsupported runtime version: ${version}`);
67
+ };
@@ -0,0 +1,39 @@
1
+ import { FileCollection } from "@vizhub/viz-types";
2
+ export type Licence = string;
3
+ export interface PackageJson {
4
+ dependencies?: {
5
+ [key: string]: string;
6
+ };
7
+ vizhub?: {
8
+ libraries?: {
9
+ [key: string]: VizHubLibraryConfig;
10
+ };
11
+ };
12
+ license?: Licence | {
13
+ type: string;
14
+ };
15
+ }
16
+ export interface Dependency {
17
+ name: string;
18
+ version: string;
19
+ }
20
+ export interface VizHubLibraryConfig {
21
+ path?: string;
22
+ global?: string;
23
+ }
24
+ export interface VizHubLibraryConfigs {
25
+ [key: string]: VizHubLibraryConfig;
26
+ }
27
+ export declare const packageJSON: (files: FileCollection) => PackageJson;
28
+ export declare const dependencies: (files: FileCollection) => {
29
+ [key: string]: string;
30
+ };
31
+ export declare const getConfiguredLibraries: (files: FileCollection) => {
32
+ [key: string]: VizHubLibraryConfig;
33
+ };
34
+ export declare const dependencySource: ({ name, version }: Dependency, libraries: VizHubLibraryConfigs, cdn?: string) => string;
35
+ export declare const getLicense: (files: FileCollection) => string | {
36
+ type: string;
37
+ } | undefined;
38
+ export declare const getConfiguredGlobals: (pkg: PackageJson) => Record<string, string>;
39
+ export declare const getGlobals: (pkg: PackageJson) => Record<string, string>;
@@ -0,0 +1,71 @@
1
+ const EMPTY_PKG_JSON = {
2
+ dependencies: {},
3
+ vizhub: {},
4
+ license: "MIT",
5
+ };
6
+ const DEBUG = false;
7
+ export const packageJSON = (files) => {
8
+ const packageJsonText = files["package.json"];
9
+ DEBUG &&
10
+ console.log("[packageJSON] packageJsonText:", packageJsonText);
11
+ try {
12
+ const pkg = packageJsonText
13
+ ? JSON.parse(packageJsonText)
14
+ : EMPTY_PKG_JSON;
15
+ DEBUG &&
16
+ console.log("[packageJSON] pkg:", JSON.stringify(pkg, null, 2));
17
+ return pkg;
18
+ }
19
+ catch {
20
+ DEBUG &&
21
+ console.log("[packageJSON] Error parsing package.json");
22
+ return EMPTY_PKG_JSON;
23
+ }
24
+ };
25
+ export const dependencies = (files) => packageJSON(files).dependencies || {};
26
+ export const getConfiguredLibraries = (files) => {
27
+ const vizhubConfig = packageJSON(files).vizhub || {};
28
+ return vizhubConfig.libraries || {};
29
+ };
30
+ export const dependencySource = ({ name, version }, libraries, cdn = "jsdelivr") => {
31
+ const path = libraries[name]
32
+ ? libraries[name].path || ""
33
+ : "";
34
+ const src = cdn === "jsdelivr"
35
+ ? `https://cdn.jsdelivr.net/npm/${name}@${version}${path}`
36
+ : `https://unpkg.com/${name}@${version}${path}`;
37
+ return src;
38
+ };
39
+ export const getLicense = (files) => {
40
+ const license = packageJSON(files).license;
41
+ if (typeof license === "object" &&
42
+ license !== null &&
43
+ "type" in license) {
44
+ return license.type;
45
+ }
46
+ return license || EMPTY_PKG_JSON.license;
47
+ };
48
+ export const getConfiguredGlobals = (pkg) => {
49
+ const libraries = pkg?.vizhub?.libraries;
50
+ if (libraries) {
51
+ return Object.entries(libraries).reduce((accumulator, [packageName, config]) => {
52
+ if (config.global) {
53
+ accumulator[packageName] = config.global;
54
+ }
55
+ return accumulator;
56
+ }, {});
57
+ }
58
+ return {};
59
+ };
60
+ const defaultGlobals = {
61
+ d3: "d3",
62
+ react: "React",
63
+ "react-dom": "ReactDOM",
64
+ };
65
+ export const getGlobals = (pkg) => {
66
+ const configuredGlobals = getConfiguredGlobals(pkg);
67
+ return {
68
+ ...defaultGlobals,
69
+ ...configuredGlobals,
70
+ };
71
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -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 { FileCollection } from "@vizhub/viz-types";
2
+ import { Plugin } from "rollup";
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,3 @@
1
+ import { FileCollection } from "@vizhub/viz-types";
2
+ import { runtimeVersion } from "./types";
3
+ 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
+ };