esm: implement import.meta.main · nodejs/node@adef9af

1+

import { spawnPromisified } from '../common/index.mjs';

2+

import * as fixtures from '../common/fixtures.js';

3+

import assert from 'node:assert/strict';

4+

import { describe, it } from 'node:test';

5+6+

const importMetaMainScript = `

7+

import assert from 'node:assert/strict';

8+9+

assert.strictEqual(import.meta.main, true, 'import.meta.main should evaluate true in main module');

10+11+

const { isMain: importedModuleIsMain } = await import(

12+

${JSON.stringify(fixtures.fileURL('es-modules/import-meta-main.mjs'))}

13+

);

14+

assert.strictEqual(importedModuleIsMain, false, 'import.meta.main should evaluate false in imported module');

15+

`;

16+17+

function wrapScriptInEvalWorker(script) {

18+

return `

19+

import { Worker } from 'node:worker_threads';

20+

new Worker(${JSON.stringify(script)}, { eval: true });

21+

`;

22+

}

23+24+

function convertScriptSourceToDataUrl(script) {

25+

return new URL(`data:text/javascript,${encodeURIComponent(script)}`);

26+

}

27+28+

function wrapScriptInUrlWorker(script) {

29+

return `

30+

import { Worker } from 'node:worker_threads';

31+

new Worker(new URL(${JSON.stringify(convertScriptSourceToDataUrl(script))}));

32+

`;

33+

}

34+35+

describe('import.meta.main in evaluated scripts', () => {

36+

it('should evaluate true in evaluated script', async () => {

37+

const result = await spawnPromisified(

38+

process.execPath,

39+

['--input-type=module', '--eval', importMetaMainScript],

40+

);

41+

assert.deepStrictEqual(result, {

42+

stderr: '',

43+

stdout: '',

44+

code: 0,

45+

signal: null,

46+

});

47+

});

48+49+

it('should evaluate true in worker instantiated with module source by evaluated script', async () => {

50+

const result = await spawnPromisified(

51+

process.execPath,

52+

['--input-type=module', '--eval', wrapScriptInEvalWorker(importMetaMainScript)],

53+

);

54+

assert.deepStrictEqual(result, {

55+

stderr: '',

56+

stdout: '',

57+

code: 0,

58+

signal: null,

59+

});

60+

});

61+62+

it('should evaluate true in worker instantiated with `data:` URL by evaluated script', async () => {

63+

const result = await spawnPromisified(

64+

process.execPath,

65+

['--input-type=module', '--eval', wrapScriptInUrlWorker(importMetaMainScript)],

66+

);

67+

assert.deepStrictEqual(result, {

68+

stderr: '',

69+

stdout: '',

70+

code: 0,

71+

signal: null,

72+

});

73+

});

74+

});