The Wayback Machine - https://web.archive.org/web/20220509112048/https://github.com/nodejs/node/commit/a0638a23b0
Skip to content
Permalink
Browse files
esm: fix imports from non-file module
Fixes: #42860

PR-URL: #42881
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: Guy Bedford <guybedford@gmail.com>
  • Loading branch information
aduh95 authored and targos committed May 2, 2022
1 parent 3c796f8 commit a0638a23b099b5ca174680324e856533d765be09
Showing with 11 additions and 8 deletions.
  1. +3 −5 lib/internal/modules/esm/resolve.js
  2. +5 −0 test/es-module/test-esm-data-urls.js
  3. +3 −3 test/es-module/test-http-imports.mjs
@@ -1015,8 +1015,6 @@ function resolveAsCommonJS(specifier, parentURL) {
// TODO(@JakobJingleheimer): de-dupe `specifier` & `parsed`
function checkIfDisallowedImport(specifier, parsed, parsedParentURL) {
if (parsedParentURL) {
const parentURL = fileURLToPath(parsedParentURL?.href);

if (
parsedParentURL.protocol === 'http:' ||
parsedParentURL.protocol === 'https:'
@@ -1030,7 +1028,7 @@ function checkIfDisallowedImport(specifier, parsed, parsedParentURL) {
) {
throw new ERR_NETWORK_IMPORT_DISALLOWED(
specifier,
parentURL,
parsedParentURL,
'remote imports cannot import from a local location.'
);
}
@@ -1041,14 +1039,14 @@ function checkIfDisallowedImport(specifier, parsed, parsedParentURL) {
NativeModule.canBeRequiredWithoutScheme(specifier)) {
throw new ERR_NETWORK_IMPORT_DISALLOWED(
specifier,
parentURL,
parsedParentURL,
'remote imports cannot import from a local location.'
);
}

throw new ERR_NETWORK_IMPORT_DISALLOWED(
specifier,
parentURL,
parsedParentURL,
'only relative and absolute specifiers are supported.'
);
}
@@ -1,5 +1,6 @@
'use strict';
const common = require('../common');
const fixtures = require('../common/fixtures');
const assert = require('assert');
function createURL(mime, body) {
return `data:${mime},${body}`;
@@ -107,4 +108,8 @@ function createBase64URL(mime, body) {
const module = await import(plainESMURL);
assert.strictEqual(module.default, 2);
}
{
const plainESMURL = `data:text/javascript,${encodeURIComponent(`import ${JSON.stringify(fixtures.fileURL('es-module-url', 'empty.js'))}`)}`;
await import(plainESMURL);
}
})().then(common.mustCall());
@@ -167,7 +167,7 @@ for (const { protocol, createServer } of [
export default 1;`);
await assert.rejects(
import(fileDep.href),
{ code: 'ERR_INVALID_URL_SCHEME' }
{ code: 'ERR_NETWORK_IMPORT_DISALLOWED' }
);

const builtinDep = new URL(url.href);
@@ -177,7 +177,7 @@ for (const { protocol, createServer } of [
`);
await assert.rejects(
import(builtinDep.href),
{ code: 'ERR_INVALID_URL_SCHEME' }
{ code: 'ERR_NETWORK_IMPORT_DISALLOWED' }
);

const unprefixedBuiltinDep = new URL(url.href);
@@ -187,7 +187,7 @@ for (const { protocol, createServer } of [
`);
await assert.rejects(
import(unprefixedBuiltinDep.href),
{ code: 'ERR_INVALID_URL_SCHEME' }
{ code: 'ERR_NETWORK_IMPORT_DISALLOWED' }
);

const unsupportedMIME = new URL(url.href);

0 comments on commit a0638a2

Please sign in to comment.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.