Skip to content

Commit f414613

Browse files
committed
fixup! module: disallow CJS <-> ESM edges in a cycle from require(esm)
1 parent dc62194 commit f414613

File tree

5 files changed

+75
-0
lines changed

5 files changed

+75
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
'use strict';
2+
3+
require('../common');
4+
const { spawnSyncAndAssert } = require('../common/child_process');
5+
const fixtures = require('../common/fixtures');
6+
const assert = require('assert');
7+
8+
// a.mjs -> b.mjs -> c.cjs -> z.mjs -> a.mjs
9+
{
10+
spawnSyncAndAssert(
11+
process.execPath,
12+
[
13+
'--experimental-require-module',
14+
fixtures.path('es-modules/esm-esm-cjs-esm-esm-cycle/a.mjs'),
15+
],
16+
{
17+
signal: null,
18+
status: 1,
19+
stderr: /Cannot import Module \.\/a\.mjs in a cycle\. \(from .*z\.mjs\)/,
20+
}
21+
);
22+
}
23+
24+
// b.mjs -> c.cjs -> z.mjs -> a.mjs -> b.mjs
25+
{
26+
spawnSyncAndAssert(
27+
process.execPath,
28+
[
29+
'--experimental-require-module',
30+
fixtures.path('es-modules/esm-esm-cjs-esm-esm-cycle/b.mjs'),
31+
],
32+
{
33+
signal: null,
34+
status: 1,
35+
stderr: /Cannot import Module \.\/b\.mjs in a cycle\. \(from .*a\.mjs\)/,
36+
}
37+
);
38+
}
39+
40+
// c.cjs -> z.mjs -> a.mjs -> b.mjs -> c.cjs
41+
{
42+
spawnSyncAndAssert(
43+
process.execPath,
44+
[
45+
'--experimental-require-module',
46+
fixtures.path('es-modules/esm-esm-cjs-esm-esm-cycle/c.cjs'),
47+
],
48+
{
49+
signal: null,
50+
status: 1,
51+
stderr: /Cannot import CommonJS Module \.\/c\.cjs in a cycle\. \(from .*b\.mjs\)/,
52+
}
53+
);
54+
}
55+
56+
57+
// z.mjs -> a.mjs -> b.mjs -> c.cjs -> z.mjs
58+
{
59+
spawnSyncAndAssert(
60+
process.execPath,
61+
[
62+
'--experimental-require-module',
63+
fixtures.path('es-modules/esm-esm-cjs-esm-esm-cycle/z.mjs'),
64+
],
65+
{
66+
signal: null,
67+
status: 1,
68+
stderr: /Cannot require\(\) ES Module .*z\.mjs in a cycle\. \(from .*c\.cjs\)/,
69+
}
70+
);
71+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './b.mjs'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './c.cjs'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require('./z.mjs')
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './a.mjs'

0 commit comments

Comments
Β (0)