Skip to content

Commit dae9f0d

Browse files
committed
fix(esm api): warn on missing module.register
1 parent e062973 commit dae9f0d

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

src/esm/api/register.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ export type InitializationOptions = {
1515
export const register = (
1616
options?: Options,
1717
) => {
18+
if (!module.register) {
19+
throw new Error(`This version of Node.js (${process.version}) does not support module.register(). Please upgrade to Node v18.9 or v20.6 and above.`);
20+
}
21+
1822
const { sourceMapsEnabled } = process;
1923
process.setSourceMapsEnabled(true);
2024

tests/index.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ import { nodeVersions } from './utils/node-versions';
1414
await runTestSuite(import('./specs/cli'), node);
1515
await runTestSuite(import('./specs/watch'), node);
1616
await runTestSuite(import('./specs/loaders'), node);
17-
await runTestSuite(
18-
import('./specs/smoke'),
19-
node,
20-
);
17+
await runTestSuite(import('./specs/smoke'), node);
2118
});
2219
}
2320
});

tests/specs/api.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,32 @@ export default testSuite(({ describe }, node: NodeApis) => {
386386
expect(stdout).toBe('file.ts\nfoo.ts\nfoo');
387387
});
388388
});
389+
} else {
390+
test('no module.register error', async () => {
391+
await using fixture = await createFixture({
392+
'package.json': JSON.stringify({ type: 'module' }),
393+
'register.mjs': `
394+
import { register } from ${JSON.stringify(tsxEsmApiPath)};
395+
396+
{
397+
const unregister = register();
398+
399+
const { message } = await import('./file?2');
400+
console.log(message);
401+
402+
await unregister();
403+
}
404+
`,
405+
...tsFiles,
406+
});
407+
408+
const { stderr } = await execaNode(fixture.getPath('register.mjs'), [], {
409+
nodePath: node.path,
410+
nodeOptions: [],
411+
reject: false,
412+
});
413+
expect(stderr).toMatch(`This version of Node.js (v${node.version}) does not support module.register(). Please upgrade to Node v18.9 or v20.6 and above.`);
414+
});
389415
}
390416
});
391417
});

0 commit comments

Comments
 (0)