From 76f76017bfe81022b9482cda4814cbeeb0ea3596 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 4 Oct 2020 07:34:15 -0700 Subject: [PATCH] module: fix builtin reexport tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/35500 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Geoffrey Booth Reviewed-By: Michaƫl Zasso --- lib/internal/modules/esm/translators.js | 5 +++-- test/es-module/test-esm-cjs-builtins.js | 21 +++++++++++++++++++ .../es-modules/builtin-imports-case.mjs | 5 +++++ test/fixtures/es-modules/dep1.js | 1 + test/fixtures/es-modules/dep2.js | 1 + 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 test/es-module/test-esm-cjs-builtins.js create mode 100644 test/fixtures/es-modules/builtin-imports-case.mjs create mode 100644 test/fixtures/es-modules/dep1.js create mode 100644 test/fixtures/es-modules/dep2.js diff --git a/lib/internal/modules/esm/translators.js b/lib/internal/modules/esm/translators.js index bb58859e05c2b0..c512b44254c013 100644 --- a/lib/internal/modules/esm/translators.js +++ b/lib/internal/modules/esm/translators.js @@ -24,7 +24,7 @@ function lazyTypes() { } const { readFileSync } = require('fs'); -const { extname } = require('path'); +const { extname, isAbsolute } = require('path'); const { stripBOM, loadNativeModule @@ -247,7 +247,8 @@ function cjsPreparseModuleExports(filename) { continue; } const ext = extname(resolved); - if (ext === '.js' || ext === '.cjs' || !CJSModule._extensions[ext]) { + if ((ext === '.js' || ext === '.cjs' || !CJSModule._extensions[ext]) && + isAbsolute(resolved)) { const { exportNames: reexportNames } = cjsPreparseModuleExports(resolved); for (const name of reexportNames) exportNames.add(name); diff --git a/test/es-module/test-esm-cjs-builtins.js b/test/es-module/test-esm-cjs-builtins.js new file mode 100644 index 00000000000000..63aae732904137 --- /dev/null +++ b/test/es-module/test-esm-cjs-builtins.js @@ -0,0 +1,21 @@ +'use strict'; + +const common = require('../common'); +const fixtures = require('../common/fixtures'); +const { spawn } = require('child_process'); +const assert = require('assert'); + +const entry = fixtures.path('/es-modules/builtin-imports-case.mjs'); + +const child = spawn(process.execPath, [entry]); +child.stderr.setEncoding('utf8'); +let stdout = ''; +child.stdout.setEncoding('utf8'); +child.stdout.on('data', (data) => { + stdout += data; +}); +child.on('close', common.mustCall((code, signal) => { + assert.strictEqual(code, 0); + assert.strictEqual(signal, null); + assert.strictEqual(stdout, 'ok\n'); +})); diff --git a/test/fixtures/es-modules/builtin-imports-case.mjs b/test/fixtures/es-modules/builtin-imports-case.mjs new file mode 100644 index 00000000000000..fb2f247c9e5ed8 --- /dev/null +++ b/test/fixtures/es-modules/builtin-imports-case.mjs @@ -0,0 +1,5 @@ +import { strictEqual } from 'assert'; +import './dep1.js'; +import { assert as depAssert } from './dep2.js'; +strictEqual(depAssert.strictEqual, strictEqual); +console.log('ok'); diff --git a/test/fixtures/es-modules/dep1.js b/test/fixtures/es-modules/dep1.js new file mode 100644 index 00000000000000..650a43189657ce --- /dev/null +++ b/test/fixtures/es-modules/dep1.js @@ -0,0 +1 @@ +module.exports = require('assert'); diff --git a/test/fixtures/es-modules/dep2.js b/test/fixtures/es-modules/dep2.js new file mode 100644 index 00000000000000..4d3120ab97e5c7 --- /dev/null +++ b/test/fixtures/es-modules/dep2.js @@ -0,0 +1 @@ +exports.assert = require('assert');