diff --git a/loader/loader.ts b/loader/loader.ts index 86c0670..b463451 100644 --- a/loader/loader.ts +++ b/loader/loader.ts @@ -43,7 +43,8 @@ function extractImportAttributes(params: URLSearchParams): ImportAttributes { return Object.fromEntries(entries); } -const deprecatedAssertSyntax = /^1[6-9]/.test(process.versions.node); +// 16.14.0 >= version < 18.20.0 +const deprecatedAssertSyntax = /^(?:16|17|18\.1?[0-9]\.)/.test(process.versions.node); const makeAdapterModule = (url: string, importAttributes: ImportAttributes) => { const encodedURL = JSON.stringify(url); @@ -128,13 +129,12 @@ export const resolve: ResolveHook = (specifier, context, nextResolve) => { const resolutionURL = new URL(specifier); const resolutionSpecifier = resolutionURL.searchParams.get("specifier"); assert.ok(resolutionSpecifier !== null); - const importAssertions = extractImportAttributes(resolutionURL.searchParams); + const importAttributes = extractImportAttributes(resolutionURL.searchParams); return maybeThen(function*() { const result: ResolveFnOutput = yield nextResolve(resolutionSpecifier, { ...context, parentURL: parentModuleURL, - // @ts-expect-error -- remove after nodejs v18(?) is not supported - importAssertions, + [deprecatedAssertSyntax ? "importAssertions" : "importAttributes"]: importAttributes, }); const params = new URLSearchParams([ [ "url", result.url ], @@ -142,7 +142,7 @@ export const resolve: ResolveHook = (specifier, context, nextResolve) => { ]); return { ...result, - importAssertions: {}, + [deprecatedAssertSyntax ? "importAssertions" : "importAttributes"]: {}, url: `hot:module?${String(params)}`, }; }); @@ -154,13 +154,12 @@ export const resolve: ResolveHook = (specifier, context, nextResolve) => { assert.ok(resolutionSpecifier !== null); const parentModuleURL = resolutionURL.searchParams.get("parent"); assert.ok(parentModuleURL !== null); - const importAssertions = extractImportAttributes(resolutionURL.searchParams); + const importAttributes = extractImportAttributes(resolutionURL.searchParams); return maybeThen(function*() { const result: ResolveFnOutput = yield nextResolve(resolutionSpecifier, { ...context, parentURL: parentModuleURL, - // @ts-expect-error -- remove after nodejs v18(?) is not supported - importAssertions, + [deprecatedAssertSyntax ? "importAssertions" : "importAttributes"]: importAttributes, }); const params = new URLSearchParams([ [ "url", result.url ], @@ -168,7 +167,7 @@ export const resolve: ResolveHook = (specifier, context, nextResolve) => { ]); return { ...result, - importAssertions: {}, + [deprecatedAssertSyntax ? "importAssertions" : "importAttributes"]: {}, url: `hot:module?${String(params)}`, }; }); @@ -222,13 +221,13 @@ export const load: LoadHook = (urlString, context, nextLoad) => { const url = new URL(urlString); switch (url.pathname) { case "adapter": { - const importAssertions = extractImportAttributes(url.searchParams); + const importAttributes = extractImportAttributes(url.searchParams); const moduleURL = url.searchParams.get("url"); assert.ok(moduleURL !== null); return { shortCircuit: true, format: "module", - source: makeAdapterModule(moduleURL, importAssertions), + source: makeAdapterModule(moduleURL, importAttributes), }; } @@ -252,11 +251,8 @@ export const load: LoadHook = (urlString, context, nextLoad) => { const hot = new LoaderHot(moduleURL, port); const result = await nextLoad(moduleURL, { ...context, - // TODO [marcel 2024-04-27]: remove after nodejs v18(?) is not supported - // @ts-expect-error -- remove after nodejs v18(?) is not supported - importAssertions: importAttributes, - importAttributes, hot, + [deprecatedAssertSyntax ? "importAssertions" : "importAttributes"]: importAttributes, }); if (!ignorePattern.test(moduleURL)) { if (result.format === "module") { diff --git a/loader/transform.ts b/loader/transform.ts index dfe5798..2f7ce0e 100644 --- a/loader/transform.ts +++ b/loader/transform.ts @@ -22,7 +22,8 @@ interface ImportEntry { bindings: BindingEntry[]; } -const deprecatedAssertSyntax = /^1[6-9]/.test(process.versions.node); +// version < v22 +const deprecatedAssertSyntax = /^(?:16|17|18|19|20|21)/.test(process.versions.node); export function transformModuleSource( filename: string, @@ -41,7 +42,7 @@ export function transformModuleSource( parserOpts: { plugins: [ "explicitResourceManagement", - [ "importAttributes", { deprecatedAssertSyntax: true } ], + [ "importAttributes", { deprecatedAssertSyntax } ], ], }, });