Skip to content
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

Improve output for re-exporting #16178

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
257 changes: 203 additions & 54 deletions packages/babel-helper-module-transforms/src/index.ts

Large diffs are not rendered by default.

Expand Up @@ -6,9 +6,11 @@ import splitExportDeclaration from "@babel/helper-split-export-declaration";
import type { NodePath } from "@babel/traverse";

export interface ModuleMetadata {
// `undefined` means legacy behavior, `boolean` means emit `exports.x = y` for `cjs-module-lexer` compat.
implicitAssignmentExports: boolean | undefined;
programPath: NodePath<t.Program>;
exportName: string;
// The name of the variable that will reference an object containing export names.
exportNameListName: null | string;
exportNameList?: string[];
hasExports: boolean;
// Lookup from local binding to export information.
local: Map<string, LocalExportMetadata>;
Expand Down Expand Up @@ -179,8 +181,9 @@ export default function normalizeModuleAndLoadMetadata(
}

return {
implicitAssignmentExports: undefined,
programPath,
exportName,
exportNameListName: null,
hasExports,
local,
source: sources,
Expand Down
4 changes: 2 additions & 2 deletions packages/babel-helpers/src/helpers-generated.ts
Expand Up @@ -123,10 +123,10 @@ export default Object.freeze({
"7.23.0",
"export default function _importDeferProxy(e){var t=null,constValue=function(e){return function(){return e}},proxy=function(r){return function(n,o,f){return null===t&&(t=e()),r(t,o,f)}};return new Proxy({},{defineProperty:constValue(!1),deleteProperty:constValue(!1),get:proxy(Reflect.get),getOwnPropertyDescriptor:proxy(Reflect.getOwnPropertyDescriptor),getPrototypeOf:constValue(null),isExtensible:constValue(!1),has:proxy(Reflect.has),ownKeys:proxy(Reflect.ownKeys),preventExtensions:constValue(!0),set:constValue(!1),setPrototypeOf:constValue(!1)})}",
),
// size: 693, gzip size: 361
// size: 505, gzip size: 314
interopRequireWildcard: helper(
"7.14.0",
'function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function(e){return e?t:r})(e)}export default function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t&&t.set(e,n),n}',
'export default function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var a,i=t?n:r,o={__proto__:null,default:e};if(null==e||Object(e)!==e)return o;if(i){if(i.has(e))return i.get(e);i.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=Object.create&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?Object.defineProperty(o,t,a):o[t]=e[t]);return o})(e,t)}',
),
// size: 208, gzip size: 154
isNativeReflectConstruct: helper(
Expand Down
47 changes: 0 additions & 47 deletions packages/babel-helpers/src/helpers/interopRequireWildcard.js

This file was deleted.

46 changes: 46 additions & 0 deletions packages/babel-helpers/src/helpers/interopRequireWildcard.ts
@@ -0,0 +1,46 @@
/* @minVersion 7.14.0 */

export default function _interopRequireWildcard(
obj: any,
nodeInterop: boolean,
) {
if (typeof WeakMap === "function") {
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
}

// @ts-expect-error: assign to function
return (_interopRequireWildcard = function (obj: any, nodeInterop: boolean) {
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}

var cache = nodeInterop ? cacheNodeInterop : cacheBabelInterop,
newObj: any = { __proto__: null, default: obj },
desc: PropertyDescriptor;

if (obj == null || Object(obj) !== obj) {
return newObj;
}

if (cache) {
if (cache.has(obj)) return cache.get(obj);
cache.set(obj, newObj);
}

for (const key in obj) {
if (key !== "default" && {}.hasOwnProperty.call(obj, key)) {
// Object.create and Object.defineProperty and Object.getOwnPropertyDescriptor
// must all be defined or undefined together.
desc = Object.create && Object.getOwnPropertyDescriptor(obj, key);
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
return newObj;
})(obj, nodeInterop);
}
1 change: 1 addition & 0 deletions packages/babel-plugin-transform-modules-amd/src/index.ts
Expand Up @@ -154,6 +154,7 @@ export default declare<State>((api, options: Options) => {
const { meta, headers } = rewriteModuleStatementsAndPrepareHeader(
path,
{
implicitAssignmentExports: true,
enumerableModuleMeta,
constantReexports,
strict,
Expand Down
Expand Up @@ -4,10 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "foo", {
enumerable: true,
get: function () {
return _foo.foo;
}
});
_export("foo", _foo);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,16 +4,14 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "bar", {
enumerable: true,
get: function () {
return _foo.bar;
}
});
Object.defineProperty(_exports, "foo", {
enumerable: true,
get: function () {
return _foo.foo;
}
});
_export("bar", _foo);
_export("foo", _foo);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,10 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "bar", {
enumerable: true,
get: function () {
return _foo.foo;
}
});
_export("bar", _foo, "foo");
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,10 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "default", {
enumerable: true,
get: function () {
return _foo.foo;
}
});
_export("default", _foo, "foo");
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,16 +4,14 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "bar", {
enumerable: true,
get: function () {
return _foo.bar;
}
});
Object.defineProperty(_exports, "default", {
enumerable: true,
get: function () {
return _foo.foo;
}
});
_export("bar", _foo);
_export("default", _foo, "foo");
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,14 +4,18 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.keys(_foo).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in _exports && _exports[key] === _foo[key]) return;
Object.defineProperty(_exports, key, {
enumerable: true,
get: function () {
return _foo[key];
_exportStar(_foo);
function _exportStar(mod) {
Object.keys(mod).forEach(function (k) {
if (["default", "__esModule"].indexOf(k) < 0 && !(k in _exports && _exports[k] === mod[k])) {
Object.defineProperty(_exports, k, {
get: function () {
return mod[k];
},
enumerable: true
});
}
});
});
return mod;
}
});
Expand Up @@ -4,10 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "default", {
enumerable: true,
get: function () {
return _foo.default;
}
});
_export("default", _foo);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,9 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.keys(_foo).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in _exports && _exports[key] === _foo[key]) return;
_exports[key] = _foo[key];
});
_exportStar(_foo);
function _exportStar(mod) {
Object.keys(mod).forEach(function (k) {
if (["default", "__esModule"].indexOf(k) < 0 && !(k in _exports && _exports[k] === mod[k])) {
_exports[k] = mod[k];
}
});
return mod;
}
});
Expand Up @@ -4,17 +4,15 @@ define(["exports", "dep"], function (_exports, _dep) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "default", {
enumerable: true,
get: function () {
return _dep.default;
}
});
Object.defineProperty(_exports, "name", {
enumerable: true,
get: function () {
return _dep.name;
}
});
_export("default", _dep);
_export("name", _dep);
_dep = babelHelpers.interopRequireWildcard(_dep, true);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,10 +4,13 @@ define(["exports", "dep"], function (_exports, _dep) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "name", {
enumerable: true,
get: function () {
return _dep.name;
}
});
_export("name", _dep);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});
Expand Up @@ -4,10 +4,13 @@ define(["exports", "foo"], function (_exports, _foo) {
Object.defineProperty(_exports, "__esModule", {
value: true
});
Object.defineProperty(_exports, "default", {
enumerable: true,
get: function () {
return _foo.default;
}
});
_export("default", _foo);
function _export(name, mod, name2) {
Object.defineProperty(_exports, name, {
enumerable: true,
get: function () {
return mod[name2 == null ? name : name2];
}
});
}
});