module: add dynamic file-specific ESM warnings · nodejs/node@718305d
11import { skip, spawnPromisified } from '../common/index.mjs';
22import * as fixtures from '../common/fixtures.mjs';
3-import { match, strictEqual } from 'node:assert';
3+import assert, { match, strictEqual } from 'node:assert';
44import { test } from 'node:test';
5566if (!process.config.variables.node_use_amaro) skip('Requires Amaro');
@@ -59,13 +59,35 @@ test('require a .ts file with implicit extension fails', async () => {
5959});
60606161test('expect failure of an .mts file with CommonJS syntax', async () => {
62-const result = await spawnPromisified(process.execPath, [
63-fixtures.path('typescript/cts/test-cts-but-module-syntax.cts'),
64-]);
65-66-strictEqual(result.stdout, '');
67-match(result.stderr, /To load an ES module, set "type": "module" in the package\.json or use the \.mjs extension\./);
68-strictEqual(result.code, 1);
62+const testFilePath = fixtures.path(
63+'typescript/cts/test-cts-but-module-syntax.cts'
64+);
65+const result = await spawnPromisified(process.execPath, [testFilePath]);
66+67+assert.strictEqual(result.stdout, '');
68+69+const expectedWarning = `Failed to load the ES module: ${testFilePath}. Make sure to set "type": "module" in the nearest package.json file or use the .mjs extension.`;
70+71+try {
72+assert.ok(
73+result.stderr.includes(expectedWarning),
74+`Expected stderr to include: ${expectedWarning}`
75+);
76+} catch (e) {
77+if (e?.code === 'ERR_ASSERTION') {
78+assert.match(
79+result.stderr,
80+/Failed to load the ES module:.*test-cts-but-module-syntax\.cts/
81+);
82+e.expected = expectedWarning;
83+e.actual = result.stderr;
84+e.operator = 'includes';
85+}
86+throw e;
87+}
88+89+90+assert.strictEqual(result.code, 1);
6991});
70927193test('execute a .cts file importing a .cts file', async () => {