| 
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';  | 
3 | 3 | 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';  | 
21 | 7 | 
 
  | 
 | 8 | +const base = tmpdir.fileURL(`test-esm-loader-resolve-type-${(Math.random() * Date.now()).toFixed(0)}`);  | 
22 | 9 | const moduleName = 'module-counter-by-type';  | 
23 |  | -const moduleDir = rel(`${moduleName}`);  | 
 | 10 | +const moduleURL = new URL(`${base}/node_modules/${moduleName}`);  | 
24 | 11 | 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,  | 
30 | 16 |     { recursive: true }  | 
31 | 17 |   );  | 
32 | 18 | 
 
  | 
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 | +  });  | 
35 | 42 | } finally {  | 
36 |  | -  fs.rmSync(basePath, { recursive: true, force: true });  | 
 | 43 | +  await rm(base, { recursive: true, force: true });  | 
37 | 44 | }  | 
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);  | 
0 commit comments