Skip to content

Commit 17823b3

Browse files
GeoffreyBoothruyadorno
authored andcommitted
esm: refactor test-esm-named-exports
PR-URL: #49493 Reviewed-By: Jacob Smith <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
1 parent 9f8bea3 commit 17823b3

5 files changed

+60
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
1-
// Flags: --loader ./test/fixtures/es-module-loaders/hook-resolve-type.mjs
2-
import { allowGlobals } from '../common/index.mjs';
1+
import { spawnPromisified } from '../common/index.mjs';
2+
import * as tmpdir from '../common/tmpdir.js';
33
import * as fixtures from '../common/fixtures.mjs';
4-
import { strict as assert } from 'assert';
5-
import * as fs from 'fs';
6-
7-
allowGlobals(global.getModuleTypeStats);
8-
9-
const { importedESM: importedESMBefore,
10-
importedCJS: importedCJSBefore } = await global.getModuleTypeStats();
11-
12-
const basePath =
13-
new URL('./node_modules/', import.meta.url);
14-
15-
const rel = (file) => new URL(file, basePath);
16-
const createDir = (path) => {
17-
if (!fs.existsSync(path)) {
18-
fs.mkdirSync(path);
19-
}
20-
};
4+
import { deepStrictEqual } from 'node:assert';
5+
import { mkdir, rm, cp } from 'node:fs/promises';
6+
import { execPath } from 'node:process';
217

8+
const base = tmpdir.fileURL(`test-esm-loader-resolve-type-${(Math.random() * Date.now()).toFixed(0)}`);
229
const moduleName = 'module-counter-by-type';
23-
const moduleDir = rel(`${moduleName}`);
10+
const moduleURL = new URL(`${base}/node_modules/${moduleName}`);
2411
try {
25-
createDir(basePath);
26-
createDir(moduleDir);
27-
fs.cpSync(
28-
fixtures.path('es-modules', moduleName),
29-
moduleDir,
12+
await mkdir(moduleURL, { recursive: true });
13+
await cp(
14+
fixtures.path('es-modules', 'module-counter-by-type'),
15+
moduleURL,
3016
{ recursive: true }
3117
);
3218

33-
34-
await import(`${moduleName}`);
19+
deepStrictEqual(await spawnPromisified(
20+
execPath,
21+
[
22+
'--no-warnings',
23+
'--input-type=module',
24+
'--eval',
25+
`import { getModuleTypeStats } from ${JSON.stringify(fixtures.fileURL('es-module-loaders', 'hook-resolve-type.mjs'))};
26+
const before = getModuleTypeStats();
27+
await import(${JSON.stringify(moduleName)});
28+
const after = getModuleTypeStats();
29+
console.log(JSON.stringify({ before, after }));`,
30+
],
31+
{ cwd: base },
32+
), {
33+
stderr: '',
34+
stdout: JSON.stringify({
35+
before: { importedESM: 0, importedCJS: 0 },
36+
// Dynamic import in the eval script should increment ESM counter but not CJS counter
37+
after: { importedESM: 1, importedCJS: 0 },
38+
}) + '\n',
39+
code: 0,
40+
signal: null,
41+
});
3542
} finally {
36-
fs.rmSync(basePath, { recursive: true, force: true });
43+
await rm(base, { recursive: true, force: true });
3744
}
38-
39-
const { importedESM: importedESMAfter,
40-
importedCJS: importedCJSAfter } = await global.getModuleTypeStats();
41-
42-
// Dynamic import above should increment ESM counter but not CJS counter
43-
assert.strictEqual(importedESMBefore + 1, importedESMAfter);
44-
assert.strictEqual(importedCJSBefore, importedCJSAfter);

test/es-module/test-esm-named-exports.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Flags: --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
1+
// Flags: --import ./test/fixtures/es-module-loaders/builtin-named-exports.mjs
22
'use strict';
33

44
require('../common');

test/es-module/test-esm-named-exports.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Flags: --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
1+
// Flags: --import ./test/fixtures/es-module-loaders/builtin-named-exports.mjs
22
import '../common/index.mjs';
33
import { readFile, __fromLoader } from 'fs';
44
import assert from 'assert';

test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs

+6-13
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
import module from 'module';
1+
import module from 'node:module';
22
import { readFileSync } from 'node:fs';
33

4-
const GET_BUILTIN = `$__get_builtin_hole_${Date.now()}`;
5-
6-
export function globalPreload() {
7-
return `Object.defineProperty(globalThis, ${JSON.stringify(GET_BUILTIN)}, {
8-
value: (builtinName) => {
9-
return getBuiltin(builtinName);
10-
},
11-
enumerable: false,
12-
configurable: false,
13-
});
14-
`;
4+
/** @type {string} */
5+
let GET_BUILTIN;
6+
export function initialize(data) {
7+
GET_BUILTIN = data.GET_BUILTIN;
158
}
169

1710
export async function resolve(specifier, context, next) {
@@ -56,7 +49,7 @@ const $builtinInstance = ${GET_BUILTIN}(${JSON.stringify(builtinName)});
5649
module.exports = $builtinInstance;
5750
module.exports.__fromLoader = true;
5851
59-
// We need this for CJS-module-lexer can parse the exported names.
52+
// We need this for CJS-module-lexer can parse the exported names.
6053
${
6154
builtinExports
6255
.map(name => `exports.${name} = $builtinInstance.${name};`)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import * as fixtures from '../../common/fixtures.mjs';
2+
import { createRequire, register } from 'node:module';
3+
4+
const require = createRequire(import.meta.url);
5+
6+
const GET_BUILTIN = `$__get_builtin_hole_${Date.now()}`;
7+
Object.defineProperty(globalThis, GET_BUILTIN, {
8+
value: builtinName => require(builtinName),
9+
enumerable: false,
10+
configurable: false,
11+
});
12+
13+
register(fixtures.fileURL('es-module-loaders/builtin-named-exports-loader.mjs'), {
14+
data: {
15+
GET_BUILTIN,
16+
},
17+
});

0 commit comments

Comments
 (0)