From 5d75ec402e8c3f852f3f58f2382cdd3d49d186f4 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Wed, 31 May 2023 16:41:03 -0400 Subject: [PATCH] module: reduce the number of URL initializations PR-URL: https://github.com/nodejs/node/pull/48272 Reviewed-By: Geoffrey Booth Reviewed-By: Matthew Aitken Reviewed-By: Mestery Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- lib/internal/main/check_syntax.js | 3 ++- lib/internal/modules/esm/get_format.js | 22 ++++++++++++---------- lib/internal/modules/esm/load.js | 8 ++++---- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/internal/main/check_syntax.js b/lib/internal/main/check_syntax.js index 2b7f4f1ff32d17..667129ada4e2de 100644 --- a/lib/internal/main/check_syntax.js +++ b/lib/internal/main/check_syntax.js @@ -3,6 +3,7 @@ // If user passed `-c` or `--check` arguments to Node, check its syntax // instead of actually running the file. +const { URL } = require('internal/url'); const { prepareMainThreadExecution, markBootstrapComplete, @@ -55,7 +56,7 @@ async function checkSyntax(source, filename) { const { defaultResolve } = require('internal/modules/esm/resolve'); const { defaultGetFormat } = require('internal/modules/esm/get_format'); const { url } = await defaultResolve(pathToFileURL(filename).toString()); - const format = await defaultGetFormat(url); + const format = await defaultGetFormat(new URL(url)); isModule = format === 'module'; } if (isModule) { diff --git a/lib/internal/modules/esm/get_format.js b/lib/internal/modules/esm/get_format.js index eb5f0be49395b0..219ef03a21214d 100644 --- a/lib/internal/modules/esm/get_format.js +++ b/lib/internal/modules/esm/get_format.js @@ -20,7 +20,7 @@ const experimentalNetworkImports = const experimentalSpecifierResolution = getOptionValue('--experimental-specifier-resolution'); const { getPackageType, getPackageScopeConfig } = require('internal/modules/esm/resolve'); -const { URL, fileURLToPath } = require('internal/url'); +const { fileURLToPath } = require('internal/url'); const { ERR_UNKNOWN_FILE_EXTENSION } = require('internal/errors').codes; const protocolHandlers = { @@ -99,27 +99,29 @@ function getHttpProtocolModuleFormat(url, context) { } /** - * @param {URL | URL['href']} url + * @param {URL} url * @param {{parentURL: string}} context * @returns {Promise | string | undefined} only works when enabled */ function defaultGetFormatWithoutErrors(url, context) { - const parsed = new URL(url); - if (!ObjectPrototypeHasOwnProperty(protocolHandlers, parsed.protocol)) + const protocol = url.protocol; + if (!ObjectPrototypeHasOwnProperty(protocolHandlers, protocol)) { return null; - return protocolHandlers[parsed.protocol](parsed, context, true); + } + return protocolHandlers[protocol](url, context, true); } /** - * @param {URL | URL['href']} url + * @param {URL} url * @param {{parentURL: string}} context * @returns {Promise | string | undefined} only works when enabled */ function defaultGetFormat(url, context) { - const parsed = new URL(url); - return ObjectPrototypeHasOwnProperty(protocolHandlers, parsed.protocol) ? - protocolHandlers[parsed.protocol](parsed, context, false) : - null; + const protocol = url.protocol; + if (!ObjectPrototypeHasOwnProperty(protocolHandlers, protocol)) { + return null; + } + return protocolHandlers[protocol](url, context, false); } module.exports = { diff --git a/lib/internal/modules/esm/load.js b/lib/internal/modules/esm/load.js index b13e035386abac..1178f06074ec8e 100644 --- a/lib/internal/modules/esm/load.js +++ b/lib/internal/modules/esm/load.js @@ -77,11 +77,11 @@ async function defaultLoad(url, context) { source, } = context; - throwIfUnsupportedURLScheme(new URL(url), experimentalNetworkImports); + const urlInstance = new URL(url); - if (format == null) { - format = await defaultGetFormat(url, context); - } + throwIfUnsupportedURLScheme(urlInstance, experimentalNetworkImports); + + format ??= await defaultGetFormat(urlInstance, context); validateAssertions(url, format, importAssertions);