|
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