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.
- package/dist/apl-fqmucPXA.js +141 -0
- package/dist/apl-fqmucPXA.js.map +1 -0
- package/dist/asciiarmor-DucZyvP0.js +57 -0
- package/dist/asciiarmor-DucZyvP0.js.map +1 -0
- package/dist/asn1-BnOEsgAm.js +145 -0
- package/dist/asn1-BnOEsgAm.js.map +1 -0
- package/dist/assets/tar-worker-CxTcoQcr.js +593 -0
- package/dist/assets/tar-worker-CxTcoQcr.js.map +1 -0
- package/dist/asterisk-QAlztEwS.js +346 -0
- package/dist/asterisk-QAlztEwS.js.map +1 -0
- package/dist/brainfuck-DZVCuF_t.js +54 -0
- package/dist/brainfuck-DZVCuF_t.js.map +1 -0
- package/dist/clike-CTYGlS6x.js +800 -0
- package/dist/clike-CTYGlS6x.js.map +1 -0
- package/dist/clojure-BhXMqnxz.js +850 -0
- package/dist/clojure-BhXMqnxz.js.map +1 -0
- package/dist/cmake-BGaNd9E7.js +72 -0
- package/dist/cmake-BGaNd9E7.js.map +1 -0
- package/dist/cobol-4yqQntpt.js +121 -0
- package/dist/cobol-4yqQntpt.js.map +1 -0
- package/dist/codemirror-De3S70Np.js +2912 -0
- package/dist/codemirror-De3S70Np.js.map +1 -0
- package/dist/coffeescript-D2dXvhEc.js +309 -0
- package/dist/coffeescript-D2dXvhEc.js.map +1 -0
- package/dist/commonlisp-CF_VNHQR.js +131 -0
- package/dist/commonlisp-CF_VNHQR.js.map +1 -0
- package/dist/crystal-DyuLTqLs.js +399 -0
- package/dist/crystal-DyuLTqLs.js.map +1 -0
- package/dist/css-DkSyTW67.js +1773 -0
- package/dist/css-DkSyTW67.js.map +1 -0
- package/dist/cypher-Dlu_3r4V.js +122 -0
- package/dist/cypher-Dlu_3r4V.js.map +1 -0
- package/dist/d-UURgV0Ux.js +180 -0
- package/dist/d-UURgV0Ux.js.map +1 -0
- package/dist/diff-B_Bi2Crb.js +26 -0
- package/dist/diff-B_Bi2Crb.js.map +1 -0
- package/dist/dockerfile-Bvk733Ga.js +202 -0
- package/dist/dockerfile-Bvk733Ga.js.map +1 -0
- package/dist/dtd-Dy74G54E.js +115 -0
- package/dist/dtd-Dy74G54E.js.map +1 -0
- package/dist/dylan-TSb-Nfix.js +315 -0
- package/dist/dylan-TSb-Nfix.js.map +1 -0
- package/dist/ebnf-4fKAGW3a.js +141 -0
- package/dist/ebnf-4fKAGW3a.js.map +1 -0
- package/dist/ecl-B59qGGVg.js +179 -0
- package/dist/ecl-B59qGGVg.js.map +1 -0
- package/dist/eiffel-Dze7nlu3.js +135 -0
- package/dist/eiffel-Dze7nlu3.js.map +1 -0
- package/dist/elm-DG7jkhNZ.js +177 -0
- package/dist/elm-DG7jkhNZ.js.map +1 -0
- package/dist/erlang-BO6gOnGA.js +675 -0
- package/dist/erlang-BO6gOnGA.js.map +1 -0
- package/dist/factor-CMxFHDqz.js +66 -0
- package/dist/factor-CMxFHDqz.js.map +1 -0
- package/dist/fcl-CDDUNjTj.js +142 -0
- package/dist/fcl-CDDUNjTj.js.map +1 -0
- package/dist/forth-B9D2JCeE.js +117 -0
- package/dist/forth-B9D2JCeE.js.map +1 -0
- package/dist/fortran-CAG2BFbe.js +468 -0
- package/dist/fortran-CAG2BFbe.js.map +1 -0
- package/dist/gas-0Aw8zDr5.js +294 -0
- package/dist/gas-0Aw8zDr5.js.map +1 -0
- package/dist/gherkin-DhZlEZiy.js +116 -0
- package/dist/gherkin-DhZlEZiy.js.map +1 -0
- package/dist/gjs-DfguZDLq.js +173 -0
- package/dist/gjs-DfguZDLq.js.map +1 -0
- package/dist/gmd-Yas-Oo8k.js +163 -0
- package/dist/gmd-Yas-Oo8k.js.map +1 -0
- package/dist/groovy-CpwJiBl7.js +224 -0
- package/dist/groovy-CpwJiBl7.js.map +1 -0
- package/dist/haskell-ySd-OUo8.js +460 -0
- package/dist/haskell-ySd-OUo8.js.map +1 -0
- package/dist/haxe-7MlzfeYV.js +515 -0
- package/dist/haxe-7MlzfeYV.js.map +1 -0
- package/dist/hbs-CxcmWxSJ.js +62 -0
- package/dist/hbs-CxcmWxSJ.js.map +1 -0
- package/dist/http-BqypyemW.js +80 -0
- package/dist/http-BqypyemW.js.map +1 -0
- package/dist/idl-4HIGJlDI.js +986 -0
- package/dist/idl-4HIGJlDI.js.map +1 -0
- package/dist/index-B3Meoznj.js +118 -0
- package/dist/index-B3Meoznj.js.map +1 -0
- package/dist/index-BQyfDUUx.js +692 -0
- package/dist/index-BQyfDUUx.js.map +1 -0
- package/dist/index-BRDroAD8.js +305 -0
- package/dist/index-BRDroAD8.js.map +1 -0
- package/dist/index-BRMAzRyM.js +179 -0
- package/dist/index-BRMAzRyM.js.map +1 -0
- package/dist/index-Bb8uYQgv.js +927 -0
- package/dist/index-Bb8uYQgv.js.map +1 -0
- package/dist/index-BlOjO66K.js +17618 -0
- package/dist/index-BlOjO66K.js.map +1 -0
- package/dist/index-BoGWnSNL.js +706 -0
- package/dist/index-BoGWnSNL.js.map +1 -0
- package/dist/index-BsRrEiOu.js +98 -0
- package/dist/index-BsRrEiOu.js.map +1 -0
- package/dist/index-C2sFZMth.js +391 -0
- package/dist/index-C2sFZMth.js.map +1 -0
- package/dist/index-C7xwOjmS.js +291 -0
- package/dist/index-C7xwOjmS.js.map +1 -0
- package/dist/index-CA3lFUx6.js +315 -0
- package/dist/index-CA3lFUx6.js.map +1 -0
- package/dist/index-CB-pPTIf.js +98 -0
- package/dist/index-CB-pPTIf.js.map +1 -0
- package/dist/index-CCa6x1FE.js +386 -0
- package/dist/index-CCa6x1FE.js.map +1 -0
- package/dist/index-CD4DINI1.js +158 -0
- package/dist/index-CD4DINI1.js.map +1 -0
- package/dist/index-CE0B_fcG.js +328 -0
- package/dist/index-CE0B_fcG.js.map +1 -0
- package/dist/index-CVGAEPMV.js +2139 -0
- package/dist/index-CVGAEPMV.js.map +1 -0
- package/dist/index-CmaT2afn.js +332 -0
- package/dist/index-CmaT2afn.js.map +1 -0
- package/dist/index-D8sUxXp5.js +83 -0
- package/dist/index-D8sUxXp5.js.map +1 -0
- package/dist/index-DIz8Vpn-.js +737 -0
- package/dist/index-DIz8Vpn-.js.map +1 -0
- package/dist/index-DNP1xT-S.js +408 -0
- package/dist/index-DNP1xT-S.js.map +1 -0
- package/dist/index-DOAqdvnQ.js +862 -0
- package/dist/index-DOAqdvnQ.js.map +1 -0
- package/dist/index-DVUMFbgi.js +152 -0
- package/dist/index-DVUMFbgi.js.map +1 -0
- package/dist/index-VeTBKRVd.js +83 -0
- package/dist/index-VeTBKRVd.js.map +1 -0
- package/dist/index-dXZeR7Bx.js +1767 -0
- package/dist/index-dXZeR7Bx.js.map +1 -0
- package/dist/index-gtqbIb6T.js +62 -0
- package/dist/index-gtqbIb6T.js.map +1 -0
- package/dist/index-pN_pUAQ7.js +2426 -0
- package/dist/index-pN_pUAQ7.js.map +1 -0
- package/dist/index-wasu5VX0.js +1150 -0
- package/dist/index-wasu5VX0.js.map +1 -0
- package/dist/javascript-Bt8B7yTi.js +993 -0
- package/dist/javascript-Bt8B7yTi.js.map +1 -0
- package/dist/julia-Bs6JJhYG.js +408 -0
- package/dist/julia-Bs6JJhYG.js.map +1 -0
- package/dist/livescript-DmzgM3Yt.js +297 -0
- package/dist/livescript-DmzgM3Yt.js.map +1 -0
- package/dist/lua-8cJgIlqe.js +257 -0
- package/dist/lua-8cJgIlqe.js.map +1 -0
- package/dist/mathematica-DNLOL9PQ.js +111 -0
- package/dist/mathematica-DNLOL9PQ.js.map +1 -0
- package/dist/mbox-Ga7d4MMN.js +118 -0
- package/dist/mbox-Ga7d4MMN.js.map +1 -0
- package/dist/mirc-Dma3B8rS.js +108 -0
- package/dist/mirc-Dma3B8rS.js.map +1 -0
- package/dist/mllike-DHn7xckP.js +335 -0
- package/dist/mllike-DHn7xckP.js.map +1 -0
- package/dist/modelica-0d55jYY0.js +148 -0
- package/dist/modelica-0d55jYY0.js.map +1 -0
- package/dist/mscgen-DdqZYINH.js +136 -0
- package/dist/mscgen-DdqZYINH.js.map +1 -0
- package/dist/mumps-Btr8VblO.js +94 -0
- package/dist/mumps-Btr8VblO.js.map +1 -0
- package/dist/nginx-DTDtBDVN.js +142 -0
- package/dist/nginx-DTDtBDVN.js.map +1 -0
- package/dist/nsis-3zG7tgur.js +63 -0
- package/dist/nsis-3zG7tgur.js.map +1 -0
- package/dist/ntriples-CvgOYMpL.js +154 -0
- package/dist/ntriples-CvgOYMpL.js.map +1 -0
- package/dist/octave-DYBj3-tl.js +201 -0
- package/dist/octave-DYBj3-tl.js.map +1 -0
- package/dist/oz-R_e8WMIi.js +232 -0
- package/dist/oz-R_e8WMIi.js.map +1 -0
- package/dist/parse-CAqQaKsh.js +21685 -0
- package/dist/parse-CAqQaKsh.js.map +1 -0
- package/dist/pascal-GD8iposT.js +106 -0
- package/dist/pascal-GD8iposT.js.map +1 -0
- package/dist/perl-DL9mHpoi.js +1106 -0
- package/dist/perl-DL9mHpoi.js.map +1 -0
- package/dist/pig-C_4T4YIV.js +102 -0
- package/dist/pig-C_4T4YIV.js.map +1 -0
- package/dist/powershell-B0suO7Vd.js +329 -0
- package/dist/powershell-B0suO7Vd.js.map +1 -0
- package/dist/properties-BR-vP1aU.js +59 -0
- package/dist/properties-BR-vP1aU.js.map +1 -0
- package/dist/protobuf-BxgpyhoW.js +78 -0
- package/dist/protobuf-BxgpyhoW.js.map +1 -0
- package/dist/pug-vHnWR0UE.js +406 -0
- package/dist/pug-vHnWR0UE.js.map +1 -0
- package/dist/puppet-Bdao66PW.js +138 -0
- package/dist/puppet-Bdao66PW.js.map +1 -0
- package/dist/python-BFGRmuZ9.js +427 -0
- package/dist/python-BFGRmuZ9.js.map +1 -0
- package/dist/q-CrbCVq4a.js +132 -0
- package/dist/q-CrbCVq4a.js.map +1 -0
- package/dist/r-V7nswm59.js +171 -0
- package/dist/r-V7nswm59.js.map +1 -0
- package/dist/render-app-island-B-i8rvGi.js +61 -0
- package/dist/render-app-island-B-i8rvGi.js.map +1 -0
- package/dist/repl-sdk.js +7 -0
- package/dist/repl-sdk.js.map +1 -0
- package/dist/rpm-C-DLY-If.js +110 -0
- package/dist/rpm-C-DLY-If.js.map +1 -0
- package/dist/ruby-JDKLJNK0.js +331 -0
- package/dist/ruby-JDKLJNK0.js.map +1 -0
- package/dist/sas-D2UG-yhZ.js +208 -0
- package/dist/sas-D2UG-yhZ.js.map +1 -0
- package/dist/scheme-BKzrkGJD.js +223 -0
- package/dist/scheme-BKzrkGJD.js.map +1 -0
- package/dist/shell-BlsXDxCn.js +223 -0
- package/dist/shell-BlsXDxCn.js.map +1 -0
- package/dist/sieve-CjwBwOY5.js +136 -0
- package/dist/sieve-CjwBwOY5.js.map +1 -0
- package/dist/simple-mode-DMneyfDu.js +131 -0
- package/dist/simple-mode-DMneyfDu.js.map +1 -0
- package/dist/smalltalk-BOIGQuhN.js +122 -0
- package/dist/smalltalk-BOIGQuhN.js.map +1 -0
- package/dist/solr-CwD7U71z.js +70 -0
- package/dist/solr-CwD7U71z.js.map +1 -0
- package/dist/sparql-DYskk2vE.js +250 -0
- package/dist/sparql-DYskk2vE.js.map +1 -0
- package/dist/spreadsheet-Bgtt3oLP.js +88 -0
- package/dist/spreadsheet-Bgtt3oLP.js.map +1 -0
- package/dist/sql-Cei9CMfk.js +343 -0
- package/dist/sql-Cei9CMfk.js.map +1 -0
- package/dist/stex-C1nZSzAw.js +231 -0
- package/dist/stex-C1nZSzAw.js.map +1 -0
- package/dist/stylus-BkS-boTH.js +566 -0
- package/dist/stylus-BkS-boTH.js.map +1 -0
- package/dist/swift-FRZi1uvB.js +292 -0
- package/dist/swift-FRZi1uvB.js.map +1 -0
- package/dist/tcl-CUcaCdmq.js +115 -0
- package/dist/tcl-CUcaCdmq.js.map +1 -0
- package/dist/textile-BnFpjsrl.js +415 -0
- package/dist/textile-BnFpjsrl.js.map +1 -0
- package/dist/tiddlywiki-CjprD-Qp.js +219 -0
- package/dist/tiddlywiki-CjprD-Qp.js.map +1 -0
- package/dist/tiki-DK9DOeWn.js +269 -0
- package/dist/tiki-DK9DOeWn.js.map +1 -0
- package/dist/toml-BOuWGMcf.js +77 -0
- package/dist/toml-BOuWGMcf.js.map +1 -0
- package/dist/troff-E1bJ0PPL.js +62 -0
- package/dist/troff-E1bJ0PPL.js.map +1 -0
- package/dist/ttcn-cfg-Dc39-fIP.js +134 -0
- package/dist/ttcn-cfg-Dc39-fIP.js.map +1 -0
- package/dist/ttcn-tKd4HLu4.js +193 -0
- package/dist/ttcn-tKd4HLu4.js.map +1 -0
- package/dist/turtle-Dq7-1WAf.js +125 -0
- package/dist/turtle-Dq7-1WAf.js.map +1 -0
- package/dist/vb-Dp90gtsv.js +197 -0
- package/dist/vb-Dp90gtsv.js.map +1 -0
- package/dist/vbscript-Bfn8O8I7.js +479 -0
- package/dist/vbscript-Bfn8O8I7.js.map +1 -0
- package/dist/velocity-BwIZK1TH.js +150 -0
- package/dist/velocity-BwIZK1TH.js.map +1 -0
- package/dist/verilog-CnT9bMk0.js +430 -0
- package/dist/verilog-CnT9bMk0.js.map +1 -0
- package/dist/vhdl-DCkMIyT9.js +159 -0
- package/dist/vhdl-DCkMIyT9.js.map +1 -0
- package/dist/webidl-BTLTThCm.js +205 -0
- package/dist/webidl-BTLTThCm.js.map +1 -0
- package/dist/xquery-BrBUuxMR.js +526 -0
- package/dist/xquery-BrBUuxMR.js.map +1 -0
- package/dist/yacas-b5lAVEIl.js +131 -0
- package/dist/yacas-b5lAVEIl.js.map +1 -0
- package/dist/z80-ClgwfNdB.js +93 -0
- package/dist/z80-ClgwfNdB.js.map +1 -0
- package/package.json +81 -9
- package/src/cache.js +138 -0
- package/src/cdn.js +93 -0
- package/src/codemirror.js +161 -0
- package/src/compilers/ember/gjs.js +212 -0
- package/src/compilers/ember/gmd.js +190 -0
- package/src/compilers/ember/hbs.js +98 -0
- package/src/compilers/ember/render-app-island.js +83 -0
- package/src/compilers/ember.js +166 -0
- package/src/compilers/js.js +32 -0
- package/src/compilers/markdown/build-compiler.js +151 -0
- package/src/compilers/markdown/const.js +2 -0
- package/src/compilers/markdown/heading-id.js +75 -0
- package/src/compilers/markdown/live-code-extraction.js +198 -0
- package/src/compilers/markdown/parse.js +22 -0
- package/src/compilers/markdown/parse.test.ts +363 -0
- package/src/compilers/markdown/sanitize-for-glimmer.js +26 -0
- package/src/compilers/markdown/types.ts +21 -0
- package/src/compilers/markdown/utils.js +78 -0
- package/src/compilers/markdown.js +125 -0
- package/src/compilers/mermaid.js +35 -0
- package/src/compilers/react.js +59 -0
- package/src/compilers/svelte.js +116 -0
- package/src/compilers/vue.js +58 -0
- package/src/compilers.js +108 -0
- package/src/es-module-shim.js +53 -0
- package/src/index.d.ts +53 -4
- package/src/index.js +744 -89
- package/src/npm.js +58 -0
- package/src/request.Request.test.ts +59 -0
- package/src/request.js +140 -0
- package/src/resolve.fromImports.test.ts +35 -0
- package/src/resolve.fromInternalImport.test.ts +69 -0
- package/src/resolve.js +352 -0
- package/src/resolve.resolvePath.test.ts +24 -0
- package/src/resolve.test.ts +23 -0
- package/src/specifier.js +71 -0
- package/src/specifier.test.ts +90 -0
- package/src/tar-worker.js +61 -0
- package/src/tar.js +76 -0
- package/src/types.ts +335 -58
- package/src/utils.js +28 -1
- package/declarations/index.d.ts +0 -73
- package/dist/index.js +0 -107
- 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
|
+
});
|