Skip to content

Commit 664697f

Browse files
authored
esbuild loader (#977)
* esbuild loader * switch to a custom loader * switch to Node 16
1 parent 940ecaf commit 664697f

File tree

6 files changed

+62
-91
lines changed

6 files changed

+62
-91
lines changed

.github/workflows/node.js.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515

1616
strategy:
1717
matrix:
18-
node-version: [14.x]
18+
node-version: [16.x]
1919

2020
steps:
2121
- uses: actions/checkout@v2

.mocharc.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"require": ["module-alias/register.js", "ts-node/register"],
3-
"loader": "ts-node/esm",
2+
"require": ["module-alias/register.js"],
3+
"loader": "./loader.js",
44
"extensions": ["js", "ts"],
55
"spec": [
66
"test/**/*-test.*",

loader.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
transform,
3+
applySourceMap,
4+
installSourceMapSupport,
5+
resolveTsPath
6+
} from "@esbuild-kit/core-utils";
7+
import {getTsconfig} from "get-tsconfig";
8+
9+
const sourcemaps = installSourceMapSupport();
10+
const tsExtensionsPattern = /\.([cm]?ts|[tj]sx)$/;
11+
const tsconfig = getTsconfig();
12+
const tsconfigRaw = tsconfig?.config;
13+
14+
export async function resolve(specifier, context, defaultResolve) {
15+
const tsPath = resolveTsPath(specifier);
16+
if (tsPath) {
17+
try {
18+
return await resolve(tsPath, context, defaultResolve, true);
19+
} catch (error) {
20+
if (error.code !== "ERR_MODULE_NOT_FOUND") {
21+
throw error;
22+
}
23+
}
24+
}
25+
const resolved = await defaultResolve(specifier, context, defaultResolve);
26+
return resolved.format === undefined
27+
? {...resolved, format: "module"}
28+
: resolved;
29+
}
30+
31+
export async function load(url, context, defaultLoad) {
32+
const loaded = await defaultLoad(url, context, defaultLoad);
33+
if (tsExtensionsPattern.test(url)) {
34+
const code = loaded.source.toString();
35+
const transformed = await transform(code, url, {tsconfigRaw});
36+
return {
37+
format: "module",
38+
source: applySourceMap(transformed, url, sourcemaps)
39+
};
40+
}
41+
return loaded;
42+
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
},
4040
"sideEffects": false,
4141
"devDependencies": {
42+
"@esbuild-kit/core-utils": "^2.0.2",
4243
"@rollup/plugin-commonjs": "22",
4344
"@rollup/plugin-json": "4",
4445
"@rollup/plugin-node-resolve": "13",
@@ -51,6 +52,7 @@
5152
"@typescript-eslint/parser": "^5.25.0",
5253
"canvas": "2",
5354
"eslint": "^8.16.0",
55+
"get-tsconfig": "^4.1.0",
5456
"glob": "^8.0.3",
5557
"htl": "0.3",
5658
"js-beautify": "1",
@@ -59,7 +61,6 @@
5961
"module-alias": "2",
6062
"rollup": "2",
6163
"rollup-plugin-terser": "7",
62-
"ts-node": "^10.8.0",
6364
"tslib": "^2.4.0",
6465
"typescript": "^4.6.4",
6566
"typescript-module-alias": "^1.0.2",

tsconfig.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,5 @@
1616
"@observablehq/plot": ["./src/index.js"]
1717
}
1818
},
19-
"ts-node": { "files": true },
2019
"include": ["src/**/*"]
2120
}

yarn.lock

Lines changed: 15 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@
2323
chalk "^2.0.0"
2424
js-tokens "^4.0.0"
2525

26-
"@cspotcode/source-map-support@^0.8.0":
27-
version "0.8.1"
28-
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
29-
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
26+
"@esbuild-kit/core-utils@^2.0.2":
27+
version "2.0.2"
28+
resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-2.0.2.tgz#2b12beb95252ab4a207de16cd2dafcb4de1e1f86"
29+
integrity sha512-clNYQUsqtc36pzW5EufMsahcbLG45EaW3YDyf0DlaS0eCMkDXpxIlHwPC0rndUwG6Ytk9sMSD5k1qHbwYEC/OQ==
3030
dependencies:
31-
"@jridgewell/trace-mapping" "0.3.9"
31+
esbuild "~0.14.47"
32+
source-map-support "^0.5.21"
3233

3334
"@eslint/eslintrc@^1.3.0":
3435
version "1.3.0"
@@ -117,14 +118,6 @@
117118
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
118119
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
119120

120-
"@jridgewell/[email protected]":
121-
version "0.3.9"
122-
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
123-
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
124-
dependencies:
125-
"@jridgewell/resolve-uri" "^3.0.3"
126-
"@jridgewell/sourcemap-codec" "^1.4.10"
127-
128121
"@jridgewell/trace-mapping@^0.3.9":
129122
version "0.3.14"
130123
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
@@ -228,26 +221,6 @@
228221
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
229222
integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
230223

231-
"@tsconfig/node10@^1.0.7":
232-
version "1.0.9"
233-
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
234-
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
235-
236-
"@tsconfig/node12@^1.0.7":
237-
version "1.0.11"
238-
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
239-
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
240-
241-
"@tsconfig/node14@^1.0.0":
242-
version "1.0.3"
243-
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
244-
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
245-
246-
"@tsconfig/node16@^1.0.2":
247-
version "1.0.3"
248-
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
249-
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
250-
251224
"@types/d3-array@*":
252225
version "3.0.3"
253226
resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.3.tgz#87d990bf504d14ad6b16766979d04e943c046dac"
@@ -656,17 +629,12 @@ acorn-walk@^7.1.1:
656629
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
657630
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
658631

659-
acorn-walk@^8.1.1:
660-
version "8.2.0"
661-
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
662-
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
663-
664632
acorn@^7.1.1:
665633
version "7.4.1"
666634
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
667635
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
668636

669-
acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1:
637+
acorn@^8.5.0, acorn@^8.7.1:
670638
version "8.7.1"
671639
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
672640
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
@@ -738,11 +706,6 @@ are-we-there-yet@^2.0.0:
738706
delegates "^1.0.0"
739707
readable-stream "^3.6.0"
740708

741-
arg@^4.1.0:
742-
version "4.1.3"
743-
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
744-
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
745-
746709
argparse@^2.0.1:
747710
version "2.0.1"
748711
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
@@ -959,11 +922,6 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0:
959922
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
960923
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
961924

962-
create-require@^1.1.0:
963-
version "1.1.1"
964-
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
965-
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
966-
967925
cross-spawn@^7.0.2:
968926
version "7.0.3"
969927
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -1309,11 +1267,6 @@ [email protected]:
13091267
resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
13101268
integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
13111269

1312-
diff@^4.0.1:
1313-
version "4.0.2"
1314-
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
1315-
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
1316-
13171270
dir-glob@^3.0.1:
13181271
version "3.0.1"
13191272
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -1450,7 +1403,7 @@ [email protected]:
14501403
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz#762c0562127d8b09bfb70a3c816460742dd82880"
14511404
integrity sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==
14521405

1453-
esbuild@^0.14.27:
1406+
esbuild@^0.14.27, esbuild@~0.14.47:
14541407
version "0.14.48"
14551408
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.48.tgz#da5d8d25cd2d940c45ea0cfecdca727f7aee2b85"
14561409
integrity sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==
@@ -1775,6 +1728,11 @@ get-caller-file@^2.0.5:
17751728
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
17761729
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
17771730

1731+
get-tsconfig@^4.1.0:
1732+
version "4.1.0"
1733+
resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.1.0.tgz#325fd5a58ee94596037263ce8b7db0ce8ac7b925"
1734+
integrity sha512-bhshxJhpfmeQ8x4fAvDqJV2VfGp5TfHdLpmBpNZZhMoVyfIrOippBW4mayC3DT9Sxuhcyl56Efw61qL28hG4EQ==
1735+
17781736
glob-parent@^5.1.2, glob-parent@~5.1.2:
17791737
version "5.1.2"
17801738
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -2230,7 +2188,7 @@ make-dir@^3.1.0:
22302188
dependencies:
22312189
semver "^6.0.0"
22322190

2233-
make-error@^1.1.1, make-error@^1.3.6:
2191+
make-error@^1.3.6:
22342192
version "1.3.6"
22352193
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
22362194
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
@@ -2756,7 +2714,7 @@ source-map-js@^1.0.2:
27562714
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
27572715
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
27582716

2759-
source-map-support@~0.5.20:
2717+
source-map-support@^0.5.21, source-map-support@~0.5.20:
27602718
version "0.5.21"
27612719
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
27622720
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -2895,25 +2853,6 @@ tr46@~0.0.3:
28952853
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
28962854
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
28972855

2898-
ts-node@^10.8.0:
2899-
version "10.8.2"
2900-
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2"
2901-
integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==
2902-
dependencies:
2903-
"@cspotcode/source-map-support" "^0.8.0"
2904-
"@tsconfig/node10" "^1.0.7"
2905-
"@tsconfig/node12" "^1.0.7"
2906-
"@tsconfig/node14" "^1.0.0"
2907-
"@tsconfig/node16" "^1.0.2"
2908-
acorn "^8.4.1"
2909-
acorn-walk "^8.1.1"
2910-
arg "^4.1.0"
2911-
create-require "^1.1.0"
2912-
diff "^4.0.1"
2913-
make-error "^1.1.1"
2914-
v8-compile-cache-lib "^3.0.1"
2915-
yn "3.1.1"
2916-
29172856
tslib@^1.8.1:
29182857
version "1.14.1"
29192858
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
@@ -2986,11 +2925,6 @@ util-deprecate@^1.0.1:
29862925
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
29872926
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
29882927

2989-
v8-compile-cache-lib@^3.0.1:
2990-
version "3.0.1"
2991-
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
2992-
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
2993-
29942928
v8-compile-cache@^2.0.3:
29952929
version "2.3.0"
29962930
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
@@ -3169,11 +3103,6 @@ [email protected]:
31693103
y18n "^5.0.5"
31703104
yargs-parser "^20.2.2"
31713105

3172-
3173-
version "3.1.1"
3174-
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
3175-
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
3176-
31773106
yocto-queue@^0.1.0:
31783107
version "0.1.0"
31793108
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"

0 commit comments

Comments
 (0)