Skip to content

Commit 3e846db

Browse files
committed
fix: ensure typeof exports, drop named export reassignment
1 parent 9ff1aac commit 3e846db

File tree

2 files changed

+49
-54
lines changed

2 files changed

+49
-54
lines changed

packages/plugin-vite/src/plugins/patches/commonjs.ts

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,18 @@ export function cjsPlugin(
242242
path.pushContainer(
243243
"body",
244244
t.ifStatement(
245-
t.binaryExpression(
246-
"in",
247-
t.stringLiteral("default"),
248-
t.identifier("exports"),
245+
t.logicalExpression(
246+
"&&",
247+
t.binaryExpression(
248+
"===",
249+
t.unaryExpression("typeof", t.identifier("exports")),
250+
t.stringLiteral("object"),
251+
),
252+
t.binaryExpression(
253+
"in",
254+
t.stringLiteral("default"),
255+
t.identifier("exports"),
256+
),
249257
),
250258
t.blockStatement([
251259
t.expressionStatement(
@@ -263,17 +271,6 @@ export function cjsPlugin(
263271
t.expressionStatement(
264272
t.assignmentExpression("=", id, t.identifier("exports")),
265273
),
266-
...exportNamed.entries().filter(([_, exported]) =>
267-
exported != "default"
268-
).map(([local, exported]) =>
269-
t.expressionStatement(
270-
t.assignmentExpression(
271-
"=",
272-
t.memberExpression(id, t.identifier(exported)),
273-
t.identifier(local),
274-
),
275-
)
276-
),
277274
]),
278275
),
279276
);
@@ -285,12 +282,20 @@ export function cjsPlugin(
285282
path.pushContainer(
286283
"body",
287284
t.ifStatement(
288-
t.unaryExpression(
289-
"!",
285+
t.logicalExpression(
286+
"&&",
290287
t.binaryExpression(
291-
"in",
292-
t.stringLiteral("default"),
293-
t.identifier("exports"),
288+
"===",
289+
t.unaryExpression("typeof", t.identifier("exports")),
290+
t.stringLiteral("object"),
291+
),
292+
t.unaryExpression(
293+
"!",
294+
t.binaryExpression(
295+
"in",
296+
t.stringLiteral("default"),
297+
t.identifier("exports"),
298+
),
294299
),
295300
),
296301
t.forInStatement(

packages/plugin-vite/src/plugins/patches/commonjs_test.ts

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,13 @@ Object.defineProperty(module, "exports", {
2626
}
2727
});`;
2828

29-
const defaultExportWith = (w: string[]) =>
30-
`let _default;
31-
if ("default" in exports) {
29+
const DEFAULT_EXPORT = `let _default;
30+
if (typeof exports === "object" && "default" in exports) {
3231
_default = exports.default;
3332
} else {
34-
_default = exports;${w.map((v) => `\n ${v};`).join("")}
33+
_default = exports;
3534
}`;
3635

37-
const DEFAULT_EXPORT = defaultExportWith([]);
3836
const DEFAULT_EXPORT_END = `export default _default;
3937
export var __require = exports;`;
4038
const IMPORT_REQUIRE = `import { createRequire } from "node:module";
@@ -72,7 +70,7 @@ exports.default = 'x';
7270
exports.foo = 'foo';
7371
var _foo = exports.foo;
7472
export { _foo as foo };
75-
${defaultExportWith(["_default.foo = _foo"])}
73+
${DEFAULT_EXPORT}
7674
${DEFAULT_EXPORT_END}
7775
${EXPORT_ES_MODULE}`,
7876
});
@@ -89,7 +87,7 @@ module.exports.default = 'x';
8987
module.exports.foo = 'foo';
9088
var _foo = exports.foo;
9189
export { _foo as foo };
92-
${defaultExportWith(["_default.foo = _foo"])}
90+
${DEFAULT_EXPORT}
9391
${DEFAULT_EXPORT_END}
9492
${EXPORT_ES_MODULE}`,
9593
});
@@ -109,7 +107,7 @@ exports.foo = 'bar';
109107
const foo = 'also bar';
110108
var _foo = exports.foo;
111109
export { _foo as foo };
112-
${defaultExportWith(["_default.foo = _foo"])}
110+
${DEFAULT_EXPORT}
113111
${DEFAULT_EXPORT_END}
114112
${EXPORT_ES_MODULE}`,
115113
});
@@ -129,7 +127,7 @@ exports.default = 'foo';
129127
exports.foo = 'bar';
130128
var _foo = exports.foo;
131129
export { _foo as foo };
132-
${defaultExportWith(["_default.foo = _foo"])}
130+
${DEFAULT_EXPORT}
133131
${DEFAULT_EXPORT_END}
134132
${EXPORT_ES_MODULE}`,
135133
});
@@ -187,7 +185,7 @@ exports.bar = 'foo';
187185
var _foo = exports.foo;
188186
var _bar = exports.bar;
189187
export { _foo as foo, _bar as bar };
190-
${defaultExportWith(["_default.foo = _foo", "_default.bar = _bar"])}
188+
${DEFAULT_EXPORT}
191189
${DEFAULT_EXPORT_END}
192190
${EXPORT_ES_MODULE}`,
193191
});
@@ -269,7 +267,7 @@ exports.trace = void 0;
269267
exports.trace = 'foo';
270268
var _trace = exports.trace;
271269
export { _trace as trace };
272-
${defaultExportWith(["_default.trace = _trace"])}
270+
${DEFAULT_EXPORT}
273271
${DEFAULT_EXPORT_END}
274272
${EXPORT_ES_MODULE}`,
275273
});
@@ -287,7 +285,7 @@ Object.defineProperty(exports, "__esModule", {
287285
exports.foo = 'foo';
288286
var _foo = exports.foo;
289287
export { _foo as foo };
290-
${defaultExportWith(["_default.foo = _foo"])}
288+
${DEFAULT_EXPORT}
291289
${DEFAULT_EXPORT_END}
292290
${EXPORT_ES_MODULE}`,
293291
});
@@ -303,7 +301,7 @@ var utils_1 = _mod.__require ?? _mod.default ?? _mod;
303301
exports.foo = utils_1.foo;
304302
var _foo = exports.foo;
305303
export { _foo as foo };
306-
${defaultExportWith(["_default.foo = _foo"])}
304+
${DEFAULT_EXPORT}
307305
${DEFAULT_EXPORT_END}`,
308306
});
309307
});
@@ -318,7 +316,7 @@ var utils_1 = _mod.__require ?? _mod.default ?? _mod;
318316
exports.foo = utils_1.foo;
319317
var _foo = exports.foo;
320318
export { _foo as foo };
321-
${defaultExportWith(["_default.foo = _foo"])}
319+
${DEFAULT_EXPORT}
322320
${DEFAULT_EXPORT_END}`,
323321
});
324322
});
@@ -336,7 +334,7 @@ exports._globalThis = void 0;
336334
exports._globalThis = typeof globalThis === 'object' ? globalThis : global;
337335
var _globalThis = exports._globalThis;
338336
export { _globalThis };
339-
${defaultExportWith(["_default._globalThis = _globalThis"])}
337+
${DEFAULT_EXPORT}
340338
${DEFAULT_EXPORT_END}
341339
${EXPORT_ES_MODULE}`,
342340
});
@@ -355,7 +353,7 @@ function foo() {}
355353
exports.foo = foo;
356354
var _foo = exports.foo;
357355
export { _foo as foo };
358-
${defaultExportWith(["_default.foo = _foo"])}
356+
${DEFAULT_EXPORT}
359357
${DEFAULT_EXPORT_END}
360358
${EXPORT_ES_MODULE}`,
361359
});
@@ -368,7 +366,7 @@ Deno.test("commonjs - detect esbuild shims", () => {
368366
import * as _ns from "./globalThis";
369367
export * from "./globalThis";
370368
${DEFAULT_EXPORT}
371-
if (!("default" in exports)) for (var _k in _ns) if (_k !== "default" && _k !== "__esModule" && Object.prototype.hasOwnProperty.call(_ns, _k)) _default[_k] = _ns[_k];
369+
if (typeof exports === "object" && !("default" in exports)) for (var _k in _ns) if (_k !== "default" && _k !== "__esModule" && Object.prototype.hasOwnProperty.call(_ns, _k)) _default[_k] = _ns[_k];
372370
${DEFAULT_EXPORT_END}`,
373371
});
374372
});
@@ -392,7 +390,7 @@ exports.VERSION = void 0;
392390
exports.VERSION = '1.9.0';
393391
var _VERSION = exports.VERSION;
394392
export { _VERSION as VERSION };
395-
${defaultExportWith(["_default.VERSION = _VERSION"])}
393+
${DEFAULT_EXPORT}
396394
${DEFAULT_EXPORT_END}`,
397395
});
398396
});
@@ -416,7 +414,7 @@ var DiagLogLevel;
416414
})(DiagLogLevel = exports.DiagLogLevel || (exports.DiagLogLevel = {}));
417415
var _DiagLogLevel = exports.DiagLogLevel;
418416
export { _DiagLogLevel as DiagLogLevel };
419-
${defaultExportWith(["_default.DiagLogLevel = _DiagLogLevel"])}
417+
${DEFAULT_EXPORT}
420418
${DEFAULT_EXPORT_END}
421419
${EXPORT_ES_MODULE}`,
422420
});
@@ -451,7 +449,7 @@ module.exports = {
451449
};
452450
var _foo = exports.foo;
453451
export { _foo as foo };
454-
${defaultExportWith(["_default.foo = _foo"])}
452+
${DEFAULT_EXPORT}
455453
${DEFAULT_EXPORT_END}
456454
${EXPORT_ES_MODULE}`,
457455
});
@@ -468,7 +466,7 @@ Deno.test("commonjs - detect iife wrapper", () => {
468466
})(exports);
469467
var _foo = exports.foo;
470468
export { _foo as foo };
471-
${defaultExportWith(["_default.foo = _foo"])}
469+
${DEFAULT_EXPORT}
472470
${DEFAULT_EXPORT_END}`,
473471
});
474472
});
@@ -510,7 +508,7 @@ Object.defineProperty(exports, "__esModule", {
510508
});
511509
export * from "./node";
512510
${DEFAULT_EXPORT}
513-
if (!("default" in exports)) for (var _k in _ns) if (_k !== "default" && _k !== "__esModule" && Object.prototype.hasOwnProperty.call(_ns, _k)) _default[_k] = _ns[_k];
511+
if (typeof exports === "object" && !("default" in exports)) for (var _k in _ns) if (_k !== "default" && _k !== "__esModule" && Object.prototype.hasOwnProperty.call(_ns, _k)) _default[_k] = _ns[_k];
514512
${DEFAULT_EXPORT_END}
515513
${EXPORT_ES_MODULE}`,
516514
});
@@ -525,7 +523,7 @@ module.exports = {
525523
};
526524
var _foo = exports.foo;
527525
export { _foo as foo };
528-
${defaultExportWith(["_default.foo = _foo"])}
526+
${DEFAULT_EXPORT}
529527
${DEFAULT_EXPORT_END}`,
530528
});
531529
});
@@ -621,7 +619,7 @@ Deno.test("commonjs - wrapped iife binding", () => {
621619
}();
622620
var _foo = exports.foo;
623621
export { _foo as foo };
624-
${defaultExportWith(["_default.foo = _foo"])}
622+
${DEFAULT_EXPORT}
625623
${DEFAULT_EXPORT_END}`,
626624
});
627625
});
@@ -753,15 +751,7 @@ module.exports = {
753751
var _formatters = exports.formatters;
754752
var _RFC = exports.RFC3986;
755753
export { _formatters as formatters, _RFC as RFC3986 };
756-
let _default;
757-
if ("default" in exports) {
758-
_default = exports.default;
759-
} else {
760-
_default = exports;
761-
_default.formatters = _formatters;
762-
_default.RFC3986 = _RFC;
763-
}
764-
export default _default;
765-
export var __require = exports;`,
754+
${DEFAULT_EXPORT}
755+
${DEFAULT_EXPORT_END}`,
766756
});
767757
});

0 commit comments

Comments
 (0)