|  | 
| 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