From 61396a349a0d43266a595280e441a3073c61b79a Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 12:42:54 +0900 Subject: [PATCH 1/8] test: node 20 --- src/loaders.ts | 1 + tests/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/loaders.ts b/src/loaders.ts index b9bff7e..8be21cb 100644 --- a/src/loaders.ts +++ b/src/loaders.ts @@ -223,6 +223,7 @@ export const load: LoadHook = async function ( const code = loaded.source.toString(); if ( + // Support named imports in JSON modules loaded.format === 'json' || tsExtensionsPattern.test(url) ) { diff --git a/tests/index.ts b/tests/index.ts index 7ae03c6..0aa06e9 100644 --- a/tests/index.ts +++ b/tests/index.ts @@ -11,6 +11,7 @@ const nodeVersions = [ '16', '17', '18', + '20', ] : [] ), From fba7db24be73021c426a8f3e4fb69c7047d3f3ab Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 15:58:57 +0900 Subject: [PATCH 2/8] wip --- package.json | 2 +- pnpm-lock.yaml | 20 +++++++++++--------- src/loaders.ts | 16 ++++++++++++++-- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index dbcb678..478fc74 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "prepack": "pnpm build && clean-pkg-json" }, "dependencies": { - "@esbuild-kit/core-utils": "^3.2.2", + "@esbuild-kit/core-utils": "github:esbuild-kit/core-utils#npm/node-20-globalPreload", "get-tsconfig": "^4.7.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5114f9b..dc9313c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@esbuild-kit/core-utils': - specifier: ^3.2.2 - version: 3.2.2 + specifier: github:esbuild-kit/core-utils#npm/node-20-globalPreload + version: github.com/esbuild-kit/core-utils/0c174fad0234e948e2e8060e7fac7c78c1ae9886 get-tsconfig: specifier: ^4.7.0 version: 4.7.0 @@ -91,13 +91,6 @@ packages: js-tokens: 4.0.0 dev: true - /@esbuild-kit/core-utils@3.2.2: - resolution: {integrity: sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA==} - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - dev: false - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -3792,3 +3785,12 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true + + github.com/esbuild-kit/core-utils/0c174fad0234e948e2e8060e7fac7c78c1ae9886: + resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/0c174fad0234e948e2e8060e7fac7c78c1ae9886} + name: '@esbuild-kit/core-utils' + version: 0.0.0-semantic-release + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: false diff --git a/src/loaders.ts b/src/loaders.ts index 8be21cb..9fde919 100644 --- a/src/loaders.ts +++ b/src/loaders.ts @@ -1,6 +1,7 @@ +import type { MessagePort } from 'node:worker_threads'; import path from 'path'; import { pathToFileURL, fileURLToPath } from 'url'; -import type { ResolveFnOutput, ResolveHookContext, LoadHook } from 'module'; +import type { ResolveFnOutput, ResolveHookContext, LoadHook, GlobalPreloadHook } from 'module'; import { transform, transformDynamicImport, @@ -31,6 +32,16 @@ type resolve = ( recursiveCall?: boolean, ) => MaybePromise; +let mainThreadPort: MessagePort | undefined; +export const globalPreload: GlobalPreloadHook = (_context) => { + mainThreadPort = _context.port; + return ` + const require = getBuiltin('module').createRequire(getBuiltin('process').cwd() + '/'); + require('@esbuild-kit/core-utils').installSourceMapSupport(port); + port.unref(); + `; +}; + const extensions = ['.js', '.json', '.ts', '.tsx', '.jsx'] as const; async function tryExtensions( @@ -237,7 +248,7 @@ export const load: LoadHook = async function ( return { format: 'module', - source: applySourceMap(transformed, url), + source: applySourceMap(transformed, url, mainThreadPort), }; } @@ -247,6 +258,7 @@ export const load: LoadHook = async function ( loaded.source = applySourceMap( dynamicImportTransformed, url, + mainThreadPort, ); } } From 470ade0d13bdf405b59c15f3ab9c79e947cdedfd Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 16:03:13 +0900 Subject: [PATCH 3/8] wip --- tests/specs/typescript/tsconfig.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/specs/typescript/tsconfig.ts b/tests/specs/typescript/tsconfig.ts index 2ae6e9c..eb5eeb9 100644 --- a/tests/specs/typescript/tsconfig.ts +++ b/tests/specs/typescript/tsconfig.ts @@ -1,3 +1,5 @@ +import path from 'path'; +import fs from 'fs/promises'; import { testSuite, expect } from 'manten'; import { createFixture } from 'fs-fixture'; import type { NodeApis } from '../../utils/node-with-loader.js'; @@ -37,6 +39,12 @@ export default testSuite(async ({ describe }, node: NodeApis) => { }, }); + await fs.symlink( + path.resolve('node_modules'), + path.join(fixture.path, 'node_modules'), + 'dir', + ); + onTestFinish(async () => await fixture.rm()); // Strict mode is not tested because ESM is strict by default @@ -71,6 +79,12 @@ export default testSuite(async ({ describe }, node: NodeApis) => { 'src/jsx.jsx': checkJsx, }); + await fs.symlink( + path.resolve('node_modules'), + path.join(fixture.path, 'node_modules'), + 'dir', + ); + onTestFinish(async () => await fixture.rm()); const jsxJs = await node.load('./src/jsx.jsx', { From 8f1b9f03012fbdf24a9a1771118622045d88d3ce Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 16:05:59 +0900 Subject: [PATCH 4/8] wip --- src/loaders.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/loaders.ts b/src/loaders.ts index 9fde919..02d313a 100644 --- a/src/loaders.ts +++ b/src/loaders.ts @@ -1,7 +1,9 @@ import type { MessagePort } from 'node:worker_threads'; import path from 'path'; import { pathToFileURL, fileURLToPath } from 'url'; -import type { ResolveFnOutput, ResolveHookContext, LoadHook, GlobalPreloadHook } from 'module'; +import type { + ResolveFnOutput, ResolveHookContext, LoadHook, GlobalPreloadHook, +} from 'module'; import { transform, transformDynamicImport, From 798459ea0ad5639c231d571fe82d91471d5c53c5 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 17:49:35 +0900 Subject: [PATCH 5/8] wip --- pnpm-lock.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18f7c00..93adec8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: '@esbuild-kit/core-utils': specifier: github:esbuild-kit/core-utils#npm/node-20-globalPreload - version: github.com/esbuild-kit/core-utils/0c174fad0234e948e2e8060e7fac7c78c1ae9886 + version: github.com/esbuild-kit/core-utils/7470903f9e00cde294e379f48eaf914bfb86bb5f get-tsconfig: specifier: ^4.7.0 version: 4.7.0 @@ -3786,8 +3786,8 @@ packages: engines: {node: '>=12.20'} dev: true - github.com/esbuild-kit/core-utils/0c174fad0234e948e2e8060e7fac7c78c1ae9886: - resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/0c174fad0234e948e2e8060e7fac7c78c1ae9886} + github.com/esbuild-kit/core-utils/7470903f9e00cde294e379f48eaf914bfb86bb5f: + resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/7470903f9e00cde294e379f48eaf914bfb86bb5f} name: '@esbuild-kit/core-utils' version: 0.0.0-semantic-release dependencies: From 20a5eaeff7e3edcf6fae3929520654374a97ec13 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 22:28:36 +0900 Subject: [PATCH 6/8] wip --- src/loaders.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/loaders.ts b/src/loaders.ts index 02d313a..0ac6b63 100644 --- a/src/loaders.ts +++ b/src/loaders.ts @@ -34,9 +34,13 @@ type resolve = ( recursiveCall?: boolean, ) => MaybePromise; +/** + * Technically globalPreload is deprecated so it should be in loaders-deprecated + * but it shares a closure with the new load hook + */ let mainThreadPort: MessagePort | undefined; -export const globalPreload: GlobalPreloadHook = (_context) => { - mainThreadPort = _context.port; +export const globalPreload: GlobalPreloadHook = ({ port }) => { + mainThreadPort = port; return ` const require = getBuiltin('module').createRequire(getBuiltin('process').cwd() + '/'); require('@esbuild-kit/core-utils').installSourceMapSupport(port); From e31550c0bf84525c36e20da123c08e6ca3125232 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Mon, 11 Sep 2023 22:33:36 +0900 Subject: [PATCH 7/8] wip --- package.json | 2 +- pnpm-lock.yaml | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index b81758a..79f8019 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "prepack": "pnpm build && clean-pkg-json" }, "dependencies": { - "@esbuild-kit/core-utils": "github:esbuild-kit/core-utils#npm/node-20-globalPreload", + "@esbuild-kit/core-utils": "^3.3.0", "get-tsconfig": "^4.7.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 93adec8..000fdd2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@esbuild-kit/core-utils': - specifier: github:esbuild-kit/core-utils#npm/node-20-globalPreload - version: github.com/esbuild-kit/core-utils/7470903f9e00cde294e379f48eaf914bfb86bb5f + specifier: ^3.3.0 + version: 3.3.0 get-tsconfig: specifier: ^4.7.0 version: 4.7.0 @@ -91,6 +91,13 @@ packages: js-tokens: 4.0.0 dev: true + /@esbuild-kit/core-utils@3.3.0: + resolution: {integrity: sha512-jTtSvVpr5ygNXyPXf9IBbCrKQ0uckq6vWkcGfy1fEr9KjkKdnFn4kFAGjpqZDZim1wsTwh/Be+lhAUemEmxEYA==} + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + dev: false + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -3785,12 +3792,3 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true - - github.com/esbuild-kit/core-utils/7470903f9e00cde294e379f48eaf914bfb86bb5f: - resolution: {tarball: https://codeload.github.com/esbuild-kit/core-utils/tar.gz/7470903f9e00cde294e379f48eaf914bfb86bb5f} - name: '@esbuild-kit/core-utils' - version: 0.0.0-semantic-release - dependencies: - esbuild: 0.18.20 - source-map-support: 0.5.21 - dev: false From 74580936fb09e8c80ea2ee0e5821fd6d4f917b17 Mon Sep 17 00:00:00 2001 From: Hiroki Osame Date: Tue, 12 Sep 2023 07:50:46 +0900 Subject: [PATCH 8/8] wip --- src/loaders.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/loaders.ts b/src/loaders.ts index 0ac6b63..64a2fed 100644 --- a/src/loaders.ts +++ b/src/loaders.ts @@ -44,7 +44,7 @@ export const globalPreload: GlobalPreloadHook = ({ port }) => { return ` const require = getBuiltin('module').createRequire(getBuiltin('process').cwd() + '/'); require('@esbuild-kit/core-utils').installSourceMapSupport(port); - port.unref(); + port.unref(); // Allows process to exit without waiting for port to close `; };