Skip to content

Commit 7757aeb

Browse files
authored
fix(commonjs): convert module.exports with __esModule property(#939) (#942)
* fix(commonjs): convert module.exports with `__esModule` property(#939) * test(commonjs): add test sample for cjs with esm-property * feat(commonjs): defaultIsModuleExports support module.exports * fix(commonjs): do not check right node in module.exports reassgin when defaultIsModuleExports = false(#935)
1 parent 1e2363c commit 7757aeb

File tree

23 files changed

+139
-0
lines changed

23 files changed

+139
-0
lines changed

β€Žpackages/commonjs/src/ast-utils.jsβ€Ž

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,17 @@ function getDefinePropertyCallName(node, targetName) {
107107
export function isShorthandProperty(parent) {
108108
return parent && parent.type === 'Property' && parent.shorthand;
109109
}
110+
111+
export function hasDefineEsmProperty(node) {
112+
return node.properties.some((property) => {
113+
if (
114+
property.type === 'Property' &&
115+
property.key.type === 'Identifier' &&
116+
property.key.name === '__esModule' &&
117+
isTruthy(property.value)
118+
) {
119+
return true;
120+
}
121+
return false;
122+
});
123+
}

β€Žpackages/commonjs/src/transform-commonjs.jsβ€Ž

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import MagicString from 'magic-string';
99
import {
1010
getKeypath,
1111
isDefineCompiledEsm,
12+
hasDefineEsmProperty,
1213
isFalsy,
1314
isReference,
1415
isShorthandProperty,
@@ -147,6 +148,18 @@ export default function transformCommonjs(
147148
} else if (!firstTopLevelModuleExportsAssignment) {
148149
firstTopLevelModuleExportsAssignment = node;
149150
}
151+
152+
if (defaultIsModuleExports === false) {
153+
shouldWrap = true;
154+
} else if (defaultIsModuleExports === 'auto') {
155+
if (node.right.type === 'ObjectExpression') {
156+
if (hasDefineEsmProperty(node.right)) {
157+
shouldWrap = true;
158+
}
159+
} else if (defaultIsModuleExports === false) {
160+
shouldWrap = true;
161+
}
162+
}
150163
} else if (exportName === KEY_COMPILED_ESM) {
151164
if (programDepth > 3) {
152165
shouldWrap = true;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
options: {
3+
defaultIsModuleExports: 'auto'
4+
}
5+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = { __esModule: true, default: { foo: 'bar' }}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import * as commonjsHelpers from "_commonjsHelpers.js";
2+
import { __module as inputModule, exports as input } from "\u0000fixtures/form/defaultIsModuleExports-auto-reassign-exports-__esModule/input.js?commonjs-module"
3+
4+
(function (module) {
5+
module.exports = { __esModule: true, default: { foo: 'bar' }}
6+
}(inputModule));
7+
8+
export default /*@__PURE__*/commonjsHelpers.getDefaultExportFromCjs(input);
9+
export { input as __moduleExports };
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
options: {
3+
defaultIsModuleExports: 'auto'
4+
}
5+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = { default: { foo: 'bar' }}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import * as commonjsHelpers from "_commonjsHelpers.js";
2+
3+
var input = { default: { foo: 'bar' }}
4+
5+
export default input;
6+
export { input as __moduleExports };
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
options: {
3+
defaultIsModuleExports: false
4+
}
5+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = { __esModule: true, default: { foo: 'bar' }};

0 commit comments

Comments
Β (0)