import { mustCall } from '../common/index.mjs'; import assert from 'assert'; import fixtures from '../common/fixtures.js'; import { spawn } from 'child_process'; const Export1 = fixtures.path('/es-modules/es-note-unexpected-export-1.cjs'); const Export2 = fixtures.path('/es-modules/es-note-unexpected-export-2.cjs'); const Import1 = fixtures.path('/es-modules/es-note-unexpected-import-1.cjs'); const Import2 = fixtures.path('/es-modules/es-note-promiserej-import-2.cjs'); const Import3 = fixtures.path('/es-modules/es-note-unexpected-import-3.cjs'); const Import4 = fixtures.path('/es-modules/es-note-unexpected-import-4.cjs'); const Import5 = fixtures.path('/es-modules/es-note-unexpected-import-5.cjs'); // Expect note to be included in the error output const expectedNote = 'To load an ES module, ' + 'set "type": "module" in the package.json ' + 'or use the .mjs extension.'; const expectedCode = 1; const pExport1 = spawn(process.execPath, [Export1]); let pExport1Stderr = ''; pExport1.stderr.setEncoding('utf8'); pExport1.stderr.on('data', (data) => { pExport1Stderr += data; }); pExport1.on('close', mustCall((code) => { assert.strictEqual(code, expectedCode); assert.ok(pExport1Stderr.includes(expectedNote), `${expectedNote} not found in ${pExport1Stderr}`); })); const pExport2 = spawn(process.execPath, [Export2]); let pExport2Stderr = ''; pExport2.stderr.setEncoding('utf8'); pExport2.stderr.on('data', (data) => { pExport2Stderr += data; }); pExport2.on('close', mustCall((code) => { assert.strictEqual(code, expectedCode); assert.ok(pExport2Stderr.includes(expectedNote), `${expectedNote} not found in ${pExport2Stderr}`); })); const pImport1 = spawn(process.execPath, [Import1]); let pImport1Stderr = ''; pImport1.stderr.setEncoding('utf8'); pImport1.stderr.on('data', (data) => { pImport1Stderr += data; }); pImport1.on('close', mustCall((code) => { assert.strictEqual(code, expectedCode); assert.ok(pImport1Stderr.includes(expectedNote), `${expectedNote} not found in ${pExport1Stderr}`); })); // Note this test shouldn't include the note const pImport2 = spawn(process.execPath, [Import2]); let pImport2Stderr = ''; pImport2.stderr.setEncoding('utf8'); pImport2.stderr.on('data', (data) => { pImport2Stderr += data; }); pImport2.on('close', mustCall((code) => { // As this exits normally we expect 0 assert.strictEqual(code, 0); assert.ok(!pImport2Stderr.includes(expectedNote), `${expectedNote} must not be included in ${pImport2Stderr}`); })); const pImport3 = spawn(process.execPath, [Import3]); let pImport3Stderr = ''; pImport3.stderr.setEncoding('utf8'); pImport3.stderr.on('data', (data) => { pImport3Stderr += data; }); pImport3.on('close', mustCall((code) => { assert.strictEqual(code, expectedCode); assert.ok(pImport3Stderr.includes(expectedNote), `${expectedNote} not found in ${pImport3Stderr}`); })); const pImport4 = spawn(process.execPath, [Import4]); let pImport4Stderr = ''; pImport4.stderr.setEncoding('utf8'); pImport4.stderr.on('data', (data) => { pImport4Stderr += data; }); pImport4.on('close', mustCall((code) => { assert.strictEqual(code, expectedCode); assert.ok(pImport4Stderr.includes(expectedNote), `${expectedNote} not found in ${pImport4Stderr}`); })); // Must exit with zero and show note const pImport5 = spawn(process.execPath, [Import5]); let pImport5Stderr = ''; pImport5.stderr.setEncoding('utf8'); pImport5.stderr.on('data', (data) => { pImport5Stderr += data; }); pImport5.on('close', mustCall((code) => { assert.strictEqual(code, 0); assert.ok(!pImport5Stderr.includes(expectedNote), `${expectedNote} must not be included in ${pImport5Stderr}`); }));