-
-
Notifications
You must be signed in to change notification settings - Fork 32k
module: support 'module.exports' interop export name in require(esm) #54563
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Flags: --experimental-require-module | ||
import '../common/index.mjs'; | ||
import assert from 'assert'; | ||
import { directRequireFixture, importFixture } from '../fixtures/pkgexports.mjs'; | ||
|
||
const tests = { | ||
'false': false, | ||
'string': 'cjs', | ||
'object': { a: 'cjs a', b: 'cjs b' }, | ||
'fauxesmdefault': { default: 'faux esm default' }, | ||
'fauxesmmixed': { default: 'faux esm default', a: 'faux esm a', b: 'faux esm b' }, | ||
'fauxesmnamed': { a: 'faux esm a', b: 'faux esm b' } | ||
}; | ||
|
||
// This test demonstrates interop between CJS and CJS represented as ESM | ||
// under the new `export { ... as 'module.exports'}` pattern, for the above cases. | ||
for (const [test, exactShape] of Object.entries(tests)) { | ||
// Each case represents a CJS dependency, which has the expected shape in CJS: | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjsdep-${test}`), exactShape); | ||
|
||
// Each dependency is reexported through CJS as if it is a library being consumed, | ||
// which in CJS is fully shape-preserving: | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjs/${test}`), exactShape); | ||
|
||
// Now we have ESM conversions of these dependencies, using `export ... as "module.exports"` | ||
// staring with the conversion of those dependencies into ESM under require(esm): | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjsdep-${test}-esm`), exactShape); | ||
|
||
// When importing these ESM conversions, from require(esm), we should preserve the shape: | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjs/${test}-esm`), exactShape); | ||
|
||
// Now if the importer itself is converted into ESM, it should still be able to load the original | ||
// CJS and reexport it, preserving the shape: | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjs-esm/${test}`), exactShape); | ||
|
||
// And then if we have the converted CJS to ESM importing from converted CJS to ESM, | ||
// that should also work: | ||
assert.deepStrictEqual(directRequireFixture(`interop-cjs-esm/${test}-esm`), exactShape); | ||
|
||
// Finally, the CJS ESM representation under `import()` should match all these cases equivalently, | ||
// where the CJS module is exported as the default export: | ||
const esmCjsImport = await importFixture(`interop-cjsdep-${test}`); | ||
assert.deepStrictEqual(esmCjsImport.default, exactShape); | ||
|
||
assert.deepStrictEqual((await importFixture(`interop-cjsdep-${test}`)).default, exactShape); | ||
assert.deepStrictEqual((await importFixture(`interop-cjs/${test}`)).default, exactShape); | ||
assert.deepStrictEqual((await importFixture(`interop-cjsdep-${test}-esm`)).default, exactShape); | ||
assert.deepStrictEqual((await importFixture(`interop-cjs/${test}-esm`)).default, exactShape); | ||
assert.deepStrictEqual((await importFixture(`interop-cjs-esm/${test}`)).default, exactShape); | ||
assert.deepStrictEqual((await importFixture(`interop-cjs-esm/${test}-esm`)).default, exactShape); | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Uh oh!
There was an error while loading. Please reload this page.