mirror of https://github.com/nodejs/node.git
esm: refactor test-esm-named-exports
PR-URL: https://github.com/nodejs/node/pull/49493 Reviewed-By: Jacob Smith <jacob@frende.me> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>pull/49525/head
parent
6b135a1a20
commit
a927adef9e
|
@ -1,44 +1,44 @@
|
|||
// Flags: --loader ./test/fixtures/es-module-loaders/hook-resolve-type.mjs
|
||||
import { allowGlobals } from '../common/index.mjs';
|
||||
import { spawnPromisified } from '../common/index.mjs';
|
||||
import * as tmpdir from '../common/tmpdir.js';
|
||||
import * as fixtures from '../common/fixtures.mjs';
|
||||
import { strict as assert } from 'assert';
|
||||
import * as fs from 'fs';
|
||||
|
||||
allowGlobals(global.getModuleTypeStats);
|
||||
|
||||
const { importedESM: importedESMBefore,
|
||||
importedCJS: importedCJSBefore } = await global.getModuleTypeStats();
|
||||
|
||||
const basePath =
|
||||
new URL('./node_modules/', import.meta.url);
|
||||
|
||||
const rel = (file) => new URL(file, basePath);
|
||||
const createDir = (path) => {
|
||||
if (!fs.existsSync(path)) {
|
||||
fs.mkdirSync(path);
|
||||
}
|
||||
};
|
||||
import { deepStrictEqual } from 'node:assert';
|
||||
import { mkdir, rm, cp } from 'node:fs/promises';
|
||||
import { execPath } from 'node:process';
|
||||
|
||||
const base = tmpdir.fileURL(`test-esm-loader-resolve-type-${(Math.random() * Date.now()).toFixed(0)}`);
|
||||
const moduleName = 'module-counter-by-type';
|
||||
const moduleDir = rel(`${moduleName}`);
|
||||
const moduleURL = new URL(`${base}/node_modules/${moduleName}`);
|
||||
try {
|
||||
createDir(basePath);
|
||||
createDir(moduleDir);
|
||||
fs.cpSync(
|
||||
fixtures.path('es-modules', moduleName),
|
||||
moduleDir,
|
||||
await mkdir(moduleURL, { recursive: true });
|
||||
await cp(
|
||||
fixtures.path('es-modules', 'module-counter-by-type'),
|
||||
moduleURL,
|
||||
{ recursive: true }
|
||||
);
|
||||
|
||||
|
||||
await import(`${moduleName}`);
|
||||
deepStrictEqual(await spawnPromisified(
|
||||
execPath,
|
||||
[
|
||||
'--no-warnings',
|
||||
'--input-type=module',
|
||||
'--eval',
|
||||
`import { getModuleTypeStats } from ${JSON.stringify(fixtures.fileURL('es-module-loaders', 'hook-resolve-type.mjs'))};
|
||||
const before = getModuleTypeStats();
|
||||
await import(${JSON.stringify(moduleName)});
|
||||
const after = getModuleTypeStats();
|
||||
console.log(JSON.stringify({ before, after }));`,
|
||||
],
|
||||
{ cwd: base },
|
||||
), {
|
||||
stderr: '',
|
||||
stdout: JSON.stringify({
|
||||
before: { importedESM: 0, importedCJS: 0 },
|
||||
// Dynamic import in the eval script should increment ESM counter but not CJS counter
|
||||
after: { importedESM: 1, importedCJS: 0 },
|
||||
}) + '\n',
|
||||
code: 0,
|
||||
signal: null,
|
||||
});
|
||||
} finally {
|
||||
fs.rmSync(basePath, { recursive: true, force: true });
|
||||
await rm(base, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
const { importedESM: importedESMAfter,
|
||||
importedCJS: importedCJSAfter } = await global.getModuleTypeStats();
|
||||
|
||||
// Dynamic import above should increment ESM counter but not CJS counter
|
||||
assert.strictEqual(importedESMBefore + 1, importedESMAfter);
|
||||
assert.strictEqual(importedCJSBefore, importedCJSAfter);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Flags: --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
|
||||
// Flags: --import ./test/fixtures/es-module-loaders/builtin-named-exports.mjs
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Flags: --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
|
||||
// Flags: --import ./test/fixtures/es-module-loaders/builtin-named-exports.mjs
|
||||
import '../common/index.mjs';
|
||||
import { readFile, __fromLoader } from 'fs';
|
||||
import assert from 'assert';
|
||||
|
|
|
@ -1,17 +1,10 @@
|
|||
import module from 'module';
|
||||
import module from 'node:module';
|
||||
import { readFileSync } from 'node:fs';
|
||||
|
||||
const GET_BUILTIN = `$__get_builtin_hole_${Date.now()}`;
|
||||
|
||||
export function globalPreload() {
|
||||
return `Object.defineProperty(globalThis, ${JSON.stringify(GET_BUILTIN)}, {
|
||||
value: (builtinName) => {
|
||||
return getBuiltin(builtinName);
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: false,
|
||||
});
|
||||
`;
|
||||
/** @type {string} */
|
||||
let GET_BUILTIN;
|
||||
export function initialize(data) {
|
||||
GET_BUILTIN = data.GET_BUILTIN;
|
||||
}
|
||||
|
||||
export async function resolve(specifier, context, next) {
|
||||
|
@ -56,7 +49,7 @@ const $builtinInstance = ${GET_BUILTIN}(${JSON.stringify(builtinName)});
|
|||
module.exports = $builtinInstance;
|
||||
module.exports.__fromLoader = true;
|
||||
|
||||
// We need this for CJS-module-lexer can parse the exported names.
|
||||
// We need this for CJS-module-lexer can parse the exported names.
|
||||
${
|
||||
builtinExports
|
||||
.map(name => `exports.${name} = $builtinInstance.${name};`)
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
import * as fixtures from '../../common/fixtures.mjs';
|
||||
import { createRequire, register } from 'node:module';
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
||||
const GET_BUILTIN = `$__get_builtin_hole_${Date.now()}`;
|
||||
Object.defineProperty(globalThis, GET_BUILTIN, {
|
||||
value: builtinName => require(builtinName),
|
||||
enumerable: false,
|
||||
configurable: false,
|
||||
});
|
||||
|
||||
register(fixtures.fileURL('es-module-loaders/builtin-named-exports-loader.mjs'), {
|
||||
data: {
|
||||
GET_BUILTIN,
|
||||
},
|
||||
});
|
Loading…
Reference in New Issue