repl-sdk 0.0.0 → 1.0.1

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 (305) hide show
  1. package/dist/apl-fqmucPXA.js +141 -0
  2. package/dist/apl-fqmucPXA.js.map +1 -0
  3. package/dist/asciiarmor-DucZyvP0.js +57 -0
  4. package/dist/asciiarmor-DucZyvP0.js.map +1 -0
  5. package/dist/asn1-BnOEsgAm.js +145 -0
  6. package/dist/asn1-BnOEsgAm.js.map +1 -0
  7. package/dist/assets/tar-worker-CxTcoQcr.js +593 -0
  8. package/dist/assets/tar-worker-CxTcoQcr.js.map +1 -0
  9. package/dist/asterisk-QAlztEwS.js +346 -0
  10. package/dist/asterisk-QAlztEwS.js.map +1 -0
  11. package/dist/brainfuck-DZVCuF_t.js +54 -0
  12. package/dist/brainfuck-DZVCuF_t.js.map +1 -0
  13. package/dist/clike-CTYGlS6x.js +800 -0
  14. package/dist/clike-CTYGlS6x.js.map +1 -0
  15. package/dist/clojure-BhXMqnxz.js +850 -0
  16. package/dist/clojure-BhXMqnxz.js.map +1 -0
  17. package/dist/cmake-BGaNd9E7.js +72 -0
  18. package/dist/cmake-BGaNd9E7.js.map +1 -0
  19. package/dist/cobol-4yqQntpt.js +121 -0
  20. package/dist/cobol-4yqQntpt.js.map +1 -0
  21. package/dist/codemirror-De3S70Np.js +2912 -0
  22. package/dist/codemirror-De3S70Np.js.map +1 -0
  23. package/dist/coffeescript-D2dXvhEc.js +309 -0
  24. package/dist/coffeescript-D2dXvhEc.js.map +1 -0
  25. package/dist/commonlisp-CF_VNHQR.js +131 -0
  26. package/dist/commonlisp-CF_VNHQR.js.map +1 -0
  27. package/dist/crystal-DyuLTqLs.js +399 -0
  28. package/dist/crystal-DyuLTqLs.js.map +1 -0
  29. package/dist/css-DkSyTW67.js +1773 -0
  30. package/dist/css-DkSyTW67.js.map +1 -0
  31. package/dist/cypher-Dlu_3r4V.js +122 -0
  32. package/dist/cypher-Dlu_3r4V.js.map +1 -0
  33. package/dist/d-UURgV0Ux.js +180 -0
  34. package/dist/d-UURgV0Ux.js.map +1 -0
  35. package/dist/diff-B_Bi2Crb.js +26 -0
  36. package/dist/diff-B_Bi2Crb.js.map +1 -0
  37. package/dist/dockerfile-Bvk733Ga.js +202 -0
  38. package/dist/dockerfile-Bvk733Ga.js.map +1 -0
  39. package/dist/dtd-Dy74G54E.js +115 -0
  40. package/dist/dtd-Dy74G54E.js.map +1 -0
  41. package/dist/dylan-TSb-Nfix.js +315 -0
  42. package/dist/dylan-TSb-Nfix.js.map +1 -0
  43. package/dist/ebnf-4fKAGW3a.js +141 -0
  44. package/dist/ebnf-4fKAGW3a.js.map +1 -0
  45. package/dist/ecl-B59qGGVg.js +179 -0
  46. package/dist/ecl-B59qGGVg.js.map +1 -0
  47. package/dist/eiffel-Dze7nlu3.js +135 -0
  48. package/dist/eiffel-Dze7nlu3.js.map +1 -0
  49. package/dist/elm-DG7jkhNZ.js +177 -0
  50. package/dist/elm-DG7jkhNZ.js.map +1 -0
  51. package/dist/erlang-BO6gOnGA.js +675 -0
  52. package/dist/erlang-BO6gOnGA.js.map +1 -0
  53. package/dist/factor-CMxFHDqz.js +66 -0
  54. package/dist/factor-CMxFHDqz.js.map +1 -0
  55. package/dist/fcl-CDDUNjTj.js +142 -0
  56. package/dist/fcl-CDDUNjTj.js.map +1 -0
  57. package/dist/forth-B9D2JCeE.js +117 -0
  58. package/dist/forth-B9D2JCeE.js.map +1 -0
  59. package/dist/fortran-CAG2BFbe.js +468 -0
  60. package/dist/fortran-CAG2BFbe.js.map +1 -0
  61. package/dist/gas-0Aw8zDr5.js +294 -0
  62. package/dist/gas-0Aw8zDr5.js.map +1 -0
  63. package/dist/gherkin-DhZlEZiy.js +116 -0
  64. package/dist/gherkin-DhZlEZiy.js.map +1 -0
  65. package/dist/gjs-DfguZDLq.js +173 -0
  66. package/dist/gjs-DfguZDLq.js.map +1 -0
  67. package/dist/gmd-Yas-Oo8k.js +163 -0
  68. package/dist/gmd-Yas-Oo8k.js.map +1 -0
  69. package/dist/groovy-CpwJiBl7.js +224 -0
  70. package/dist/groovy-CpwJiBl7.js.map +1 -0
  71. package/dist/haskell-ySd-OUo8.js +460 -0
  72. package/dist/haskell-ySd-OUo8.js.map +1 -0
  73. package/dist/haxe-7MlzfeYV.js +515 -0
  74. package/dist/haxe-7MlzfeYV.js.map +1 -0
  75. package/dist/hbs-CxcmWxSJ.js +62 -0
  76. package/dist/hbs-CxcmWxSJ.js.map +1 -0
  77. package/dist/http-BqypyemW.js +80 -0
  78. package/dist/http-BqypyemW.js.map +1 -0
  79. package/dist/idl-4HIGJlDI.js +986 -0
  80. package/dist/idl-4HIGJlDI.js.map +1 -0
  81. package/dist/index-B3Meoznj.js +118 -0
  82. package/dist/index-B3Meoznj.js.map +1 -0
  83. package/dist/index-BQyfDUUx.js +692 -0
  84. package/dist/index-BQyfDUUx.js.map +1 -0
  85. package/dist/index-BRDroAD8.js +305 -0
  86. package/dist/index-BRDroAD8.js.map +1 -0
  87. package/dist/index-BRMAzRyM.js +179 -0
  88. package/dist/index-BRMAzRyM.js.map +1 -0
  89. package/dist/index-Bb8uYQgv.js +927 -0
  90. package/dist/index-Bb8uYQgv.js.map +1 -0
  91. package/dist/index-BlOjO66K.js +17618 -0
  92. package/dist/index-BlOjO66K.js.map +1 -0
  93. package/dist/index-BoGWnSNL.js +706 -0
  94. package/dist/index-BoGWnSNL.js.map +1 -0
  95. package/dist/index-BsRrEiOu.js +98 -0
  96. package/dist/index-BsRrEiOu.js.map +1 -0
  97. package/dist/index-C2sFZMth.js +391 -0
  98. package/dist/index-C2sFZMth.js.map +1 -0
  99. package/dist/index-C7xwOjmS.js +291 -0
  100. package/dist/index-C7xwOjmS.js.map +1 -0
  101. package/dist/index-CA3lFUx6.js +315 -0
  102. package/dist/index-CA3lFUx6.js.map +1 -0
  103. package/dist/index-CB-pPTIf.js +98 -0
  104. package/dist/index-CB-pPTIf.js.map +1 -0
  105. package/dist/index-CCa6x1FE.js +386 -0
  106. package/dist/index-CCa6x1FE.js.map +1 -0
  107. package/dist/index-CD4DINI1.js +158 -0
  108. package/dist/index-CD4DINI1.js.map +1 -0
  109. package/dist/index-CE0B_fcG.js +328 -0
  110. package/dist/index-CE0B_fcG.js.map +1 -0
  111. package/dist/index-CVGAEPMV.js +2139 -0
  112. package/dist/index-CVGAEPMV.js.map +1 -0
  113. package/dist/index-CmaT2afn.js +332 -0
  114. package/dist/index-CmaT2afn.js.map +1 -0
  115. package/dist/index-D8sUxXp5.js +83 -0
  116. package/dist/index-D8sUxXp5.js.map +1 -0
  117. package/dist/index-DIz8Vpn-.js +737 -0
  118. package/dist/index-DIz8Vpn-.js.map +1 -0
  119. package/dist/index-DNP1xT-S.js +408 -0
  120. package/dist/index-DNP1xT-S.js.map +1 -0
  121. package/dist/index-DOAqdvnQ.js +862 -0
  122. package/dist/index-DOAqdvnQ.js.map +1 -0
  123. package/dist/index-DVUMFbgi.js +152 -0
  124. package/dist/index-DVUMFbgi.js.map +1 -0
  125. package/dist/index-VeTBKRVd.js +83 -0
  126. package/dist/index-VeTBKRVd.js.map +1 -0
  127. package/dist/index-dXZeR7Bx.js +1767 -0
  128. package/dist/index-dXZeR7Bx.js.map +1 -0
  129. package/dist/index-gtqbIb6T.js +62 -0
  130. package/dist/index-gtqbIb6T.js.map +1 -0
  131. package/dist/index-pN_pUAQ7.js +2426 -0
  132. package/dist/index-pN_pUAQ7.js.map +1 -0
  133. package/dist/index-wasu5VX0.js +1150 -0
  134. package/dist/index-wasu5VX0.js.map +1 -0
  135. package/dist/javascript-Bt8B7yTi.js +993 -0
  136. package/dist/javascript-Bt8B7yTi.js.map +1 -0
  137. package/dist/julia-Bs6JJhYG.js +408 -0
  138. package/dist/julia-Bs6JJhYG.js.map +1 -0
  139. package/dist/livescript-DmzgM3Yt.js +297 -0
  140. package/dist/livescript-DmzgM3Yt.js.map +1 -0
  141. package/dist/lua-8cJgIlqe.js +257 -0
  142. package/dist/lua-8cJgIlqe.js.map +1 -0
  143. package/dist/mathematica-DNLOL9PQ.js +111 -0
  144. package/dist/mathematica-DNLOL9PQ.js.map +1 -0
  145. package/dist/mbox-Ga7d4MMN.js +118 -0
  146. package/dist/mbox-Ga7d4MMN.js.map +1 -0
  147. package/dist/mirc-Dma3B8rS.js +108 -0
  148. package/dist/mirc-Dma3B8rS.js.map +1 -0
  149. package/dist/mllike-DHn7xckP.js +335 -0
  150. package/dist/mllike-DHn7xckP.js.map +1 -0
  151. package/dist/modelica-0d55jYY0.js +148 -0
  152. package/dist/modelica-0d55jYY0.js.map +1 -0
  153. package/dist/mscgen-DdqZYINH.js +136 -0
  154. package/dist/mscgen-DdqZYINH.js.map +1 -0
  155. package/dist/mumps-Btr8VblO.js +94 -0
  156. package/dist/mumps-Btr8VblO.js.map +1 -0
  157. package/dist/nginx-DTDtBDVN.js +142 -0
  158. package/dist/nginx-DTDtBDVN.js.map +1 -0
  159. package/dist/nsis-3zG7tgur.js +63 -0
  160. package/dist/nsis-3zG7tgur.js.map +1 -0
  161. package/dist/ntriples-CvgOYMpL.js +154 -0
  162. package/dist/ntriples-CvgOYMpL.js.map +1 -0
  163. package/dist/octave-DYBj3-tl.js +201 -0
  164. package/dist/octave-DYBj3-tl.js.map +1 -0
  165. package/dist/oz-R_e8WMIi.js +232 -0
  166. package/dist/oz-R_e8WMIi.js.map +1 -0
  167. package/dist/parse-CAqQaKsh.js +21685 -0
  168. package/dist/parse-CAqQaKsh.js.map +1 -0
  169. package/dist/pascal-GD8iposT.js +106 -0
  170. package/dist/pascal-GD8iposT.js.map +1 -0
  171. package/dist/perl-DL9mHpoi.js +1106 -0
  172. package/dist/perl-DL9mHpoi.js.map +1 -0
  173. package/dist/pig-C_4T4YIV.js +102 -0
  174. package/dist/pig-C_4T4YIV.js.map +1 -0
  175. package/dist/powershell-B0suO7Vd.js +329 -0
  176. package/dist/powershell-B0suO7Vd.js.map +1 -0
  177. package/dist/properties-BR-vP1aU.js +59 -0
  178. package/dist/properties-BR-vP1aU.js.map +1 -0
  179. package/dist/protobuf-BxgpyhoW.js +78 -0
  180. package/dist/protobuf-BxgpyhoW.js.map +1 -0
  181. package/dist/pug-vHnWR0UE.js +406 -0
  182. package/dist/pug-vHnWR0UE.js.map +1 -0
  183. package/dist/puppet-Bdao66PW.js +138 -0
  184. package/dist/puppet-Bdao66PW.js.map +1 -0
  185. package/dist/python-BFGRmuZ9.js +427 -0
  186. package/dist/python-BFGRmuZ9.js.map +1 -0
  187. package/dist/q-CrbCVq4a.js +132 -0
  188. package/dist/q-CrbCVq4a.js.map +1 -0
  189. package/dist/r-V7nswm59.js +171 -0
  190. package/dist/r-V7nswm59.js.map +1 -0
  191. package/dist/render-app-island-B-i8rvGi.js +61 -0
  192. package/dist/render-app-island-B-i8rvGi.js.map +1 -0
  193. package/dist/repl-sdk.js +7 -0
  194. package/dist/repl-sdk.js.map +1 -0
  195. package/dist/rpm-C-DLY-If.js +110 -0
  196. package/dist/rpm-C-DLY-If.js.map +1 -0
  197. package/dist/ruby-JDKLJNK0.js +331 -0
  198. package/dist/ruby-JDKLJNK0.js.map +1 -0
  199. package/dist/sas-D2UG-yhZ.js +208 -0
  200. package/dist/sas-D2UG-yhZ.js.map +1 -0
  201. package/dist/scheme-BKzrkGJD.js +223 -0
  202. package/dist/scheme-BKzrkGJD.js.map +1 -0
  203. package/dist/shell-BlsXDxCn.js +223 -0
  204. package/dist/shell-BlsXDxCn.js.map +1 -0
  205. package/dist/sieve-CjwBwOY5.js +136 -0
  206. package/dist/sieve-CjwBwOY5.js.map +1 -0
  207. package/dist/simple-mode-DMneyfDu.js +131 -0
  208. package/dist/simple-mode-DMneyfDu.js.map +1 -0
  209. package/dist/smalltalk-BOIGQuhN.js +122 -0
  210. package/dist/smalltalk-BOIGQuhN.js.map +1 -0
  211. package/dist/solr-CwD7U71z.js +70 -0
  212. package/dist/solr-CwD7U71z.js.map +1 -0
  213. package/dist/sparql-DYskk2vE.js +250 -0
  214. package/dist/sparql-DYskk2vE.js.map +1 -0
  215. package/dist/spreadsheet-Bgtt3oLP.js +88 -0
  216. package/dist/spreadsheet-Bgtt3oLP.js.map +1 -0
  217. package/dist/sql-Cei9CMfk.js +343 -0
  218. package/dist/sql-Cei9CMfk.js.map +1 -0
  219. package/dist/stex-C1nZSzAw.js +231 -0
  220. package/dist/stex-C1nZSzAw.js.map +1 -0
  221. package/dist/stylus-BkS-boTH.js +566 -0
  222. package/dist/stylus-BkS-boTH.js.map +1 -0
  223. package/dist/swift-FRZi1uvB.js +292 -0
  224. package/dist/swift-FRZi1uvB.js.map +1 -0
  225. package/dist/tcl-CUcaCdmq.js +115 -0
  226. package/dist/tcl-CUcaCdmq.js.map +1 -0
  227. package/dist/textile-BnFpjsrl.js +415 -0
  228. package/dist/textile-BnFpjsrl.js.map +1 -0
  229. package/dist/tiddlywiki-CjprD-Qp.js +219 -0
  230. package/dist/tiddlywiki-CjprD-Qp.js.map +1 -0
  231. package/dist/tiki-DK9DOeWn.js +269 -0
  232. package/dist/tiki-DK9DOeWn.js.map +1 -0
  233. package/dist/toml-BOuWGMcf.js +77 -0
  234. package/dist/toml-BOuWGMcf.js.map +1 -0
  235. package/dist/troff-E1bJ0PPL.js +62 -0
  236. package/dist/troff-E1bJ0PPL.js.map +1 -0
  237. package/dist/ttcn-cfg-Dc39-fIP.js +134 -0
  238. package/dist/ttcn-cfg-Dc39-fIP.js.map +1 -0
  239. package/dist/ttcn-tKd4HLu4.js +193 -0
  240. package/dist/ttcn-tKd4HLu4.js.map +1 -0
  241. package/dist/turtle-Dq7-1WAf.js +125 -0
  242. package/dist/turtle-Dq7-1WAf.js.map +1 -0
  243. package/dist/vb-Dp90gtsv.js +197 -0
  244. package/dist/vb-Dp90gtsv.js.map +1 -0
  245. package/dist/vbscript-Bfn8O8I7.js +479 -0
  246. package/dist/vbscript-Bfn8O8I7.js.map +1 -0
  247. package/dist/velocity-BwIZK1TH.js +150 -0
  248. package/dist/velocity-BwIZK1TH.js.map +1 -0
  249. package/dist/verilog-CnT9bMk0.js +430 -0
  250. package/dist/verilog-CnT9bMk0.js.map +1 -0
  251. package/dist/vhdl-DCkMIyT9.js +159 -0
  252. package/dist/vhdl-DCkMIyT9.js.map +1 -0
  253. package/dist/webidl-BTLTThCm.js +205 -0
  254. package/dist/webidl-BTLTThCm.js.map +1 -0
  255. package/dist/xquery-BrBUuxMR.js +526 -0
  256. package/dist/xquery-BrBUuxMR.js.map +1 -0
  257. package/dist/yacas-b5lAVEIl.js +131 -0
  258. package/dist/yacas-b5lAVEIl.js.map +1 -0
  259. package/dist/z80-ClgwfNdB.js +93 -0
  260. package/dist/z80-ClgwfNdB.js.map +1 -0
  261. package/package.json +81 -9
  262. package/src/cache.js +138 -0
  263. package/src/cdn.js +93 -0
  264. package/src/codemirror.js +161 -0
  265. package/src/compilers/ember/gjs.js +212 -0
  266. package/src/compilers/ember/gmd.js +190 -0
  267. package/src/compilers/ember/hbs.js +98 -0
  268. package/src/compilers/ember/render-app-island.js +83 -0
  269. package/src/compilers/ember.js +166 -0
  270. package/src/compilers/js.js +32 -0
  271. package/src/compilers/markdown/build-compiler.js +151 -0
  272. package/src/compilers/markdown/const.js +2 -0
  273. package/src/compilers/markdown/heading-id.js +75 -0
  274. package/src/compilers/markdown/live-code-extraction.js +198 -0
  275. package/src/compilers/markdown/parse.js +22 -0
  276. package/src/compilers/markdown/parse.test.ts +363 -0
  277. package/src/compilers/markdown/sanitize-for-glimmer.js +26 -0
  278. package/src/compilers/markdown/types.ts +21 -0
  279. package/src/compilers/markdown/utils.js +78 -0
  280. package/src/compilers/markdown.js +125 -0
  281. package/src/compilers/mermaid.js +35 -0
  282. package/src/compilers/react.js +59 -0
  283. package/src/compilers/svelte.js +116 -0
  284. package/src/compilers/vue.js +58 -0
  285. package/src/compilers.js +108 -0
  286. package/src/es-module-shim.js +53 -0
  287. package/src/index.d.ts +53 -4
  288. package/src/index.js +744 -89
  289. package/src/npm.js +58 -0
  290. package/src/request.Request.test.ts +59 -0
  291. package/src/request.js +140 -0
  292. package/src/resolve.fromImports.test.ts +35 -0
  293. package/src/resolve.fromInternalImport.test.ts +69 -0
  294. package/src/resolve.js +352 -0
  295. package/src/resolve.resolvePath.test.ts +24 -0
  296. package/src/resolve.test.ts +23 -0
  297. package/src/specifier.js +71 -0
  298. package/src/specifier.test.ts +90 -0
  299. package/src/tar-worker.js +61 -0
  300. package/src/tar.js +76 -0
  301. package/src/types.ts +335 -58
  302. package/src/utils.js +28 -1
  303. package/declarations/index.d.ts +0 -73
  304. package/dist/index.js +0 -107
  305. package/dist/index.js.map +0 -1
package/src/npm.js ADDED
@@ -0,0 +1,58 @@
1
+ import packageNameRegex from 'package-name-regex';
2
+
3
+ import { cache } from './cache.js';
4
+ import { assert } from './utils.js';
5
+
6
+ /**
7
+ * @type {Map<string, unknown>} namp@version => manifest
8
+ */
9
+ const npmInfoCache = new Map();
10
+
11
+ /**
12
+ * @param {string} name
13
+ * @param {string} version
14
+ */
15
+ export async function getNPMInfo(name, version) {
16
+ const key = `${name}@${version}`;
17
+
18
+ assert(`Must pass valid npm-compatible package name`, packageNameRegex.test(name));
19
+
20
+ const existing = npmInfoCache.get(key);
21
+
22
+ if (existing) {
23
+ return existing;
24
+ }
25
+
26
+ return cache.cachedPromise(`getNPMInfo:${key}`, async () => {
27
+ assert(`Cannot get data from NPM without specifying the name of the package`, name);
28
+ assert(`Version is required. It may be 'latest'`, version);
29
+
30
+ const response = await fetch(`https://registry.npmjs.org/${name}`);
31
+ const json = await response.json();
32
+
33
+ npmInfoCache.set(key, json);
34
+
35
+ return json;
36
+ });
37
+ }
38
+
39
+ /**
40
+ * @param {any} npmInfo
41
+ * @param {string} requestedVersion
42
+ */
43
+ export async function getTarUrl(npmInfo, requestedVersion) {
44
+ const json = npmInfo;
45
+
46
+ if (json.error) {
47
+ throw new Error(json.error);
48
+ }
49
+
50
+ const tag =
51
+ requestedVersion in json['dist-tags']
52
+ ? json['dist-tags'][requestedVersion]
53
+ : (requestedVersion ?? json['dist-tags'].latest);
54
+
55
+ const requested = json.versions[tag];
56
+
57
+ return requested.dist.tarball;
58
+ }
@@ -0,0 +1,59 @@
1
+ import { expect as errorExpect, it } from 'vitest';
2
+
3
+ const expect = errorExpect.soft;
4
+
5
+ import { getTarRequestId, idFromRequestUrl, Request } from './request.js';
6
+
7
+ it('works with scope', () => {
8
+ const request = Request.of({ to: '@iconify/utils' });
9
+
10
+ expect(request.name).toBe('@iconify/utils');
11
+ expect(request.from).toBe(undefined);
12
+ expect(request.to).toBe('.');
13
+ expect(request.version).toBe('latest');
14
+ });
15
+
16
+ it('works with parent request id', () => {
17
+ const url = getTarRequestId({ to: 'example-library' });
18
+ const id = idFromRequestUrl(url);
19
+
20
+ const request = Request.of({ to: './lib/index.js', from: id });
21
+
22
+ expect(request.name).toBe('example-library');
23
+ expect(request.version).toBe('latest');
24
+ expect(request.from).toBe(Request.fromRequestId(id));
25
+ expect(request.to).toBe('./lib/index.js');
26
+ });
27
+
28
+ it('works with version and from', () => {
29
+ const url = getTarRequestId({ to: '@iconify/utils@1.0.0/bar.js' });
30
+ const id = idFromRequestUrl(url);
31
+ const request = Request.fromSpecifier(`./foo.js?from=${id}`);
32
+
33
+ expect(request.name).toBe('@iconify/utils');
34
+ expect(request.from).toBe(Request.fromRequestId(id));
35
+ expect(request.to).toBe('./foo.js');
36
+ expect(request.version).toBe('1.0.0');
37
+ });
38
+
39
+ it('works with subpath imports', () => {
40
+ const url = getTarRequestId({ to: '@iconify/utils/bar.js' });
41
+ const id = idFromRequestUrl(url);
42
+ const request = Request.fromSpecifier(`#foo/hello.js?from=${id}`);
43
+
44
+ expect(request.name).toBe('@iconify/utils');
45
+ expect(request.from).toBe(Request.fromRequestId(id));
46
+ expect(request.to).toBe('#foo/hello.js');
47
+ expect(request.version).toBe('latest');
48
+ });
49
+
50
+ it('works with up URLs', () => {
51
+ const url = getTarRequestId({ to: 'hast-util-to-html/utils/foo/bar.js' });
52
+ const id = idFromRequestUrl(url);
53
+ const request = Request.fromSpecifier(`../../utils/siblings.js?from=${id}`);
54
+
55
+ expect(request.name).toBe('hast-util-to-html');
56
+ expect(request.from).toBe(Request.fromRequestId(id));
57
+ expect(request.to).toBe('../../utils/siblings.js');
58
+ expect(request.version).toBe('latest');
59
+ });
package/src/request.js ADDED
@@ -0,0 +1,140 @@
1
+ import { cache } from './cache.js';
2
+ import { parseSpecifier } from './specifier.js';
3
+ import { assert, unzippedPrefix } from './utils.js';
4
+
5
+ let requestId = 1;
6
+
7
+ function requestKey() {
8
+ return `repl-request-${requestId++}`;
9
+ }
10
+
11
+ /**
12
+ * @param {{ to: string, from?: string }} options
13
+ * @returns {string} the id of the request
14
+ */
15
+ export function idForRequest({ to, from }) {
16
+ const url = getTarRequestId({ to, from });
17
+
18
+ return idFromRequestUrl(url);
19
+ }
20
+
21
+ /**
22
+ * @param {{ to: string, from?: string }} options
23
+ * @returns {string} the URL of the request
24
+ */
25
+ export function getTarRequestId({ to, from }) {
26
+ const request = Request.of({ to, from });
27
+
28
+ const key = requestKey();
29
+
30
+ cache.requestCache.set(key, request);
31
+
32
+ return `${unzippedPrefix}/${key}`;
33
+ }
34
+
35
+ /**
36
+ * @param {string} url
37
+ * @returnns {string}
38
+ */
39
+ export function idFromRequestUrl(url) {
40
+ return url.replace(unzippedPrefix + '/', '');
41
+ }
42
+
43
+ export class Request {
44
+ static get #idCache() {
45
+ return cache.requestCache;
46
+ }
47
+
48
+ /**
49
+ * @param {{ to: string, from?: string }} toFrom
50
+ */
51
+ static of({ to, from }) {
52
+ const isRoot = to.match(/^[A-Za-z@]/);
53
+ const fromId = from?.replace(unzippedPrefix + '/', '');
54
+ const request = Request.fromSpecifier(isRoot ? to : `${to}?from=${fromId}`);
55
+
56
+ return request;
57
+ }
58
+
59
+ /**
60
+ * @param {string} id
61
+ */
62
+ static fromRequestId(id) {
63
+ const request = Request.#idCache.get(id);
64
+
65
+ assert(`Could not find request from id:${id}`, request);
66
+
67
+ return request;
68
+ }
69
+
70
+ /**
71
+ * @param {string} specifier
72
+ */
73
+ static fromSpecifier(specifier) {
74
+ return new Request(specifier);
75
+ }
76
+
77
+ /** @type {string} */
78
+ #to;
79
+
80
+ /** @type {Request | undefined} */
81
+ #from;
82
+
83
+ /**
84
+ * @private
85
+ * @param {string} specifier
86
+ */
87
+ constructor(specifier) {
88
+ const removedPrefix = specifier.replace(unzippedPrefix, '');
89
+ const [full, query] = removedPrefix.split('?');
90
+
91
+ this.original = specifier;
92
+
93
+ assert(`Invalid specifier: ${specifier}`, full);
94
+
95
+ if (full.startsWith('.') || full.startsWith('#')) {
96
+ if (!query) {
97
+ throw new Error(
98
+ `Missing query, ?from for specifier: ${specifier}. From is required for relative and subpath-imports.`
99
+ );
100
+ }
101
+ }
102
+
103
+ /**
104
+ * This will either be '.' or have the leading ./
105
+ */
106
+ this.#to = full;
107
+
108
+ if (query) {
109
+ const search = new URLSearchParams(query);
110
+ const fromQp = search.get('from');
111
+
112
+ assert(`Missing query, ?from for specifier: ${specifier}`, fromQp);
113
+
114
+ const from = Request.fromRequestId(fromQp);
115
+
116
+ this.#from = from;
117
+ this.name = from.name;
118
+ this.version = from.version;
119
+ } else {
120
+ const parsed = parseSpecifier(full);
121
+ const { name, version = 'latest', path } = parsed;
122
+
123
+ this.name = name;
124
+ this.version = version.replace(/\.+$/, '');
125
+ this.#to = path;
126
+ }
127
+ }
128
+
129
+ get to() {
130
+ return this.#to;
131
+ }
132
+
133
+ get from() {
134
+ return this.#from;
135
+ }
136
+
137
+ get key() {
138
+ return `__name__/${this.name}[AT:V]${this.version}/__to__/${this.to}`;
139
+ }
140
+ }
@@ -0,0 +1,35 @@
1
+ import { expect as errorExpect, it } from 'vitest';
2
+
3
+ import { idForRequest, Request } from './request.js';
4
+ import { fromImports } from './resolve.js';
5
+
6
+ import type { UntarredPackage } from './types.js';
7
+
8
+ const expect = errorExpect.soft;
9
+
10
+ it('resolves subpath imports', () => {
11
+ const untarred = {
12
+ contents: {
13
+ 'pkg/standalone.js': 'entry file',
14
+ 'pkg/compiler.js': 'target file',
15
+ 'pkg/compiler/example.js': 'target file',
16
+ },
17
+ manifest: {
18
+ exports: {
19
+ '.': {
20
+ browser: { default: './pkg/standalone.js' },
21
+ default: { default: './pkg/node.cjs' },
22
+ },
23
+ },
24
+ imports: {
25
+ '#compiler': './pkg/compiler.js',
26
+ '#compiler/*': './pkg/compiler/*.js',
27
+ },
28
+ },
29
+ };
30
+ const from = idForRequest({ to: 'content-tag' });
31
+ const request = Request.of({ to: '#compiler', from });
32
+ const answer = fromImports(untarred as unknown as UntarredPackage, request, undefined);
33
+
34
+ expect(answer?.inTarFile).toBe('pkg/compiler.js');
35
+ });
@@ -0,0 +1,69 @@
1
+ import { expect as errorExpect, it } from 'vitest';
2
+
3
+ import { idForRequest, Request } from './request.js';
4
+ import { fromInternalImport } from './resolve.js';
5
+
6
+ import type { UntarredPackage } from './types.js';
7
+
8
+ const expect = errorExpect.soft;
9
+
10
+ it('resolves a private file (content-tag)', () => {
11
+ const untarred = {
12
+ contents: {
13
+ 'pkg/standalone.js': 'entry file',
14
+ 'pkg/standalone/content_tag.js': 'target file',
15
+ },
16
+ manifest: {
17
+ exports: {
18
+ '.': {
19
+ browser: { default: './pkg/standalone.js' },
20
+ default: { default: './pkg/node.cjs' },
21
+ },
22
+ './standalone': {
23
+ import: { default: './pkg/standalone.js' },
24
+ require: { default: './pkg/stubs/require.cjs' },
25
+ },
26
+ },
27
+ },
28
+ };
29
+
30
+ const from = idForRequest({ to: 'content-tag' });
31
+ const request = Request.of({ to: './standalone/content_tag.js', from });
32
+ const answer = fromInternalImport(untarred as unknown as UntarredPackage, request, undefined);
33
+
34
+ expect(answer?.inTarFile).toBe('pkg/standalone/content_tag.js');
35
+ });
36
+
37
+ it('resolves a private file (rehype-raw)', () => {
38
+ const untarred = {
39
+ contents: {
40
+ 'pkg/index.js': 'entry file',
41
+ 'pkg/lib/index.js': 'target file',
42
+ },
43
+ manifest: {
44
+ exports: './index.js',
45
+ },
46
+ };
47
+ const from = idForRequest({ to: 'rehype-raw' });
48
+ const request = Request.of({ to: './lib/index.js', from });
49
+ const answer = fromInternalImport(untarred as unknown as UntarredPackage, request, undefined);
50
+
51
+ expect(answer?.inTarFile).toBe('pkg/lib/index.js');
52
+ });
53
+
54
+ it('resolves the entrypoint (unist-util-visit)', () => {
55
+ const untarred = {
56
+ contents: {
57
+ 'index.js': 'contents',
58
+ 'lib/index.js': 'contents',
59
+ },
60
+ manifest: {
61
+ exports: './index.js',
62
+ },
63
+ };
64
+ const from = idForRequest({ to: 'unist-util-visit' });
65
+ const request = Request.of({ to: './lib/index.js', from });
66
+ const answer = fromInternalImport(untarred as unknown as UntarredPackage, request, undefined);
67
+
68
+ expect(answer?.inTarFile).toBe('lib/index.js');
69
+ });