Add additional support for loose mode in helper-module-transforms (#6742)

This commit is contained in:
Brian Ng 2017-11-05 19:54:14 -06:00 committed by Henry Zhu
parent e8a33165ff
commit d81cca3b5f
268 changed files with 2401 additions and 28 deletions

View File

@ -61,7 +61,7 @@ export function rewriteModuleStatementsAndPrepareHeader(
}
// Create all of the statically known named exports.
headers.push(...buildExportInitializationStatements(path, meta));
headers.push(...buildExportInitializationStatements(path, meta, loose));
return { meta, headers };
}
@ -111,6 +111,7 @@ export function wrapInterop(
export function buildNamespaceInitStatements(
metadata: ModuleMetadata,
sourceMetadata: SourceModuleMetadata,
loose: boolean = false,
) {
const statements = [];
@ -136,7 +137,11 @@ export function buildNamespaceInitStatements(
);
}
if (sourceMetadata.reexportAll) {
const statement = buildNamespaceReexport(metadata, sourceMetadata.name);
const statement = buildNamespaceReexport(
metadata,
sourceMetadata.name,
loose,
);
statement.loc = sourceMetadata.reexportAll.loc;
// Iterate props creating getter for each prop.
@ -166,26 +171,35 @@ function buildESModuleHeader(
/**
* Create a re-export initialization loop for a specific imported namespace.
*/
function buildNamespaceReexport(metadata, namespace) {
return template.statement`
Object.keys(NAMESPACE).forEach(function(key) {
if (key === "default" || key === "__esModule") return;
VERIFY_NAME_LIST;
function buildNamespaceReexport(metadata, namespace, loose) {
return (loose
? template.statement`
Object.keys(NAMESPACE).forEach(function(key) {
if (key === "default" || key === "__esModule") return;
VERIFY_NAME_LIST;
Object.defineProperty(EXPORTS, key, {
enumerable: true,
get: function() {
return NAMESPACE[key];
},
});
});
`({
EXPORTS[key] = NAMESPACE[key];
});
`
: template.statement`
Object.keys(NAMESPACE).forEach(function(key) {
if (key === "default" || key === "__esModule") return;
VERIFY_NAME_LIST;
Object.defineProperty(EXPORTS, key, {
enumerable: true,
get: function() {
return NAMESPACE[key];
},
});
});
`)({
NAMESPACE: namespace,
EXPORTS: metadata.exportName,
VERIFY_NAME_LIST: metadata.exportNameListName
? template`
if (Object.prototype.hasOwnProperty.call(EXPORTS_LIST, key)) return;
`({ EXPORTS_LIST: metadata.exportNameListName })
if (Object.prototype.hasOwnProperty.call(EXPORTS_LIST, key)) return;
`({ EXPORTS_LIST: metadata.exportNameListName })
: null,
});
}
@ -239,6 +253,7 @@ function buildExportNameListDeclaration(
function buildExportInitializationStatements(
programPath: NodePath,
metadata: ModuleMetadata,
loose: boolean = false,
) {
const initStatements = [];
@ -257,14 +272,16 @@ function buildExportInitializationStatements(
for (const data of metadata.source.values()) {
for (const [exportName, importName] of data.reexports) {
initStatements.push(
template`
Object.defineProperty(EXPORTS, "EXPORT_NAME", {
enumerable: true,
get: function() {
return NAMESPACE.IMPORT_NAME;
},
});
`({
(loose
? template.statement`EXPORTS.EXPORT_NAME = NAMESPACE.IMPORT_NAME;`
: template`
Object.defineProperty(EXPORTS, "EXPORT_NAME", {
enumerable: true,
get: function() {
return NAMESPACE.IMPORT_NAME;
},
});
`)({
EXPORTS: metadata.exportName,
EXPORT_NAME: exportName,
NAMESPACE: data.name,

View File

@ -68,7 +68,9 @@ export default function({ types: t }, options) {
}
}
headers.push(...buildNamespaceInitStatements(meta, metadata));
headers.push(
...buildNamespaceInitStatements(meta, metadata, loose),
);
}
ensureStatementsHoisted(headers);

View File

@ -0,0 +1 @@
export default (function(){return "foo"})();

View File

@ -0,0 +1,12 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var _default = function () {
return "foo";
}();
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export default {};

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var _default = {};
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export default [];

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var _default = [];
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export default foo;

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var _default = foo;
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export default function () {}

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = _default;
function _default() {}
});

View File

@ -0,0 +1 @@
export default class {}

View File

@ -0,0 +1,10 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
class _default {}
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export default function foo () {}

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = foo;
function foo() {}
});

View File

@ -0,0 +1 @@
export default class Foo {}

View File

@ -0,0 +1,10 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
class Foo {}
_exports.default = Foo;
});

View File

@ -0,0 +1,2 @@
var foo;
export { foo as default };

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var foo;
_exports.default = foo;
});

View File

@ -0,0 +1 @@
export default 42;

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var _default = 42;
_exports.default = _default;
});

View File

@ -0,0 +1 @@
export {foo} from "foo";

View File

@ -0,0 +1,6 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.foo = _foo.foo;
});

View File

@ -0,0 +1 @@
export {foo, bar} from "foo";

View File

@ -0,0 +1,7 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.foo = _foo.foo;
_exports.bar = _foo.bar;
});

View File

@ -0,0 +1 @@
export {foo as bar} from "foo";

View File

@ -0,0 +1,6 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.bar = _foo.foo;
});

View File

@ -0,0 +1 @@
export {foo as default} from "foo";

View File

@ -0,0 +1,6 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.default = _foo.foo;
});

View File

@ -0,0 +1 @@
export {foo as default, bar} from "foo";

View File

@ -0,0 +1,7 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.default = _foo.foo;
_exports.bar = _foo.bar;
});

View File

@ -0,0 +1 @@
export * from "foo";

View File

@ -0,0 +1,9 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
Object.keys(_foo).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
_exports[key] = _foo[key];
});
});

View File

@ -0,0 +1,2 @@
var foo, bar;
export {foo, bar};

View File

@ -0,0 +1,9 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.bar = _exports.foo = void 0;
var foo, bar;
_exports.bar = bar;
_exports.foo = foo;
});

View File

@ -0,0 +1,2 @@
var foo;
export {foo as bar};

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.bar = void 0;
var foo;
_exports.bar = foo;
});

View File

@ -0,0 +1,2 @@
var foo;
export {foo as default};

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var foo;
_exports.default = foo;
});

View File

@ -0,0 +1,2 @@
var foo, bar;
export {foo as default, bar};

View File

@ -0,0 +1,9 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.bar = _exports.default = void 0;
var foo, bar;
_exports.bar = bar;
_exports.default = foo;
});

View File

@ -0,0 +1,2 @@
var foo;
export {foo};

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.foo = void 0;
var foo;
_exports.foo = foo;
});

View File

@ -0,0 +1,2 @@
var a = 1;
export { a as default };

View File

@ -0,0 +1,8 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.default = void 0;
var a = 1;
_exports.default = a;
});

View File

@ -0,0 +1,9 @@
export var foo = 1;
export var foo2 = 1, bar = 2;
export var foo3 = function () {};
export var foo4;
export let foo5 = 2;
export let foo6;
export const foo7 = 3;
export function foo8 () {}
export class foo9 {}

View File

@ -0,0 +1,31 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.foo8 = foo8;
_exports.foo9 = _exports.foo7 = _exports.foo6 = _exports.foo5 = _exports.foo4 = _exports.foo3 = _exports.bar = _exports.foo2 = _exports.foo = void 0;
var foo = 1;
_exports.foo = foo;
var foo2 = 1,
bar = 2;
_exports.bar = bar;
_exports.foo2 = foo2;
var foo3 = function () {};
_exports.foo3 = foo3;
var foo4;
_exports.foo4 = foo4;
let foo5 = 2;
_exports.foo5 = foo5;
let foo6;
_exports.foo6 = foo6;
const foo7 = 3;
_exports.foo7 = foo7;
function foo8() {}
class foo9 {}
_exports.foo9 = foo9;
});

View File

@ -0,0 +1,3 @@
define("my custom module name", [], function () {
"use strict";
});

View File

@ -0,0 +1,8 @@
{
"moduleIds": true,
"moduleId": "my custom module name",
"plugins": [
"external-helpers",
["transform-modules-amd", { "loose": true }]
]
}

View File

@ -0,0 +1,11 @@
import { isEven } from "./evens";
export function nextOdd(n) {
return isEven(n) ? n + 1 : n + 2;
}
export var isOdd = (function (isEven) {
return function (n) {
return !isEven(n);
};
})(isEven);

View File

@ -0,0 +1,19 @@
define(["exports", "./evens"], function (_exports, _evens) {
"use strict";
_exports.__esModule = true;
_exports.nextOdd = nextOdd;
_exports.isOdd = void 0;
function nextOdd(n) {
return (0, _evens.isEven)(n) ? n + 1 : n + 2;
}
var isOdd = function (isEven) {
return function (n) {
return !isEven(n);
};
}(_evens.isEven);
_exports.isOdd = isOdd;
});

View File

@ -0,0 +1,4 @@
import './foo';
import bar from './bar';
import './derp';
import { qux } from './qux';

View File

@ -0,0 +1,5 @@
define(["./foo", "./bar", "./derp", "./qux"], function (_foo, _bar, _derp, _qux) {
"use strict";
_bar = babelHelpers.interopRequireDefault(_bar);
});

View File

@ -0,0 +1,5 @@
import foo from "foo";
import {default as foo2} from "foo";
foo;
foo2;

View File

@ -0,0 +1,7 @@
define(["foo"], function (_foo) {
"use strict";
_foo = babelHelpers.interopRequireDefault(_foo);
_foo.default;
_foo.default;
});

View File

@ -0,0 +1,3 @@
import * as foo from "foo";
foo;

View File

@ -0,0 +1,6 @@
define(["foo"], function (foo) {
"use strict";
foo = babelHelpers.interopRequireWildcard(foo);
foo;
});

View File

@ -0,0 +1,4 @@
import foo, {baz as xyz} from "foo";
foo;
xyz;

View File

@ -0,0 +1,7 @@
define(["foo"], function (_foo) {
"use strict";
_foo = babelHelpers.interopRequireWildcard(_foo);
_foo.default;
_foo.baz;
});

View File

@ -0,0 +1,11 @@
import {bar} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";
bar;
bar2;
baz;
baz2;
baz3;
xyz;

View File

@ -0,0 +1,10 @@
define(["foo"], function (_foo) {
"use strict";
_foo.bar;
_foo.bar2;
_foo.baz;
_foo.bar;
_foo.bar;
_foo.xyz;
});

View File

@ -0,0 +1,3 @@
import "foo";
import "foo-bar";
import "./directory/foo-bar";

View File

@ -0,0 +1,3 @@
define(["foo", "foo-bar", "./directory/foo-bar"], function (_foo, _fooBar, _fooBar2) {
"use strict";
});

View File

@ -0,0 +1 @@
foobar();

View File

@ -0,0 +1,5 @@
define("loose/module-name/expected", [], function () {
"use strict";
foobar();
});

View File

@ -0,0 +1,7 @@
{
"moduleIds": true,
"plugins": [
"external-helpers",
["transform-modules-amd", { "loose": true }]
]
}

View File

@ -0,0 +1 @@
export { default } from 'foo';

View File

@ -0,0 +1,6 @@
define(["exports", "foo"], function (_exports, _foo) {
"use strict";
_exports.__esModule = true;
_exports.default = _foo.default;
});

View File

@ -0,0 +1,9 @@
{
"plugins": [
"external-helpers",
["transform-modules-amd", {
"loose": true,
"noInterop": true
}]
]
}

View File

@ -0,0 +1,3 @@
import foo from "foo";
foo;

View File

@ -0,0 +1,5 @@
define(["foo"], function (_foo) {
"use strict";
_foo.default;
});

View File

@ -0,0 +1,9 @@
{
"plugins": [
"external-helpers",
["transform-modules-amd", {
"loose": true,
"noInterop": true
}]
]
}

View File

@ -0,0 +1,6 @@
{
"plugins": [
"external-helpers",
["transform-modules-amd", { "loose": true }]
]
}

View File

@ -0,0 +1,18 @@
import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar2} from "foo";
var test;
export {test};
export var test2 = 5;
export default test;
foo;
foo2;
bar;
bar2;

View File

@ -0,0 +1,17 @@
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (_exports, foo2, _fooBar, _fooBar2) {
"use strict";
_exports.__esModule = true;
_exports.default = _exports.test2 = _exports.test = void 0;
foo2 = babelHelpers.interopRequireWildcard(foo2);
var test;
_exports.test = test;
var test2 = 5;
_exports.test2 = test2;
var _default = test;
_exports.default = _default;
foo2.default;
foo2;
foo2.bar;
foo2.foo;
});

View File

@ -0,0 +1,21 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();
var a = 2;
export { a };
a = 3;
var b = 2;
export { b as c };
b = 3;
var d = 3;
export { d as e, d as f };
d = 4;

View File

@ -0,0 +1,26 @@
define(["exports"], function (_exports) {
"use strict";
_exports.__esModule = true;
_exports.f = _exports.e = _exports.c = _exports.a = _exports.test = void 0;
var test = 2;
_exports.test = test;
_exports.test = test = 5;
_exports.test = test = test + 1;
(function () {
var test = 2;
test = 3;
test++;
})();
var a = 2;
_exports.a = a;
_exports.a = a = 3;
var b = 2;
_exports.c = b;
_exports.c = b = 3;
var d = 3;
_exports.f = _exports.e = d;
_exports.f = _exports.e = d = 4;
});

View File

@ -144,7 +144,9 @@ export default function({ types: t, template }, options) {
header.loc = metadata.loc;
headers.push(header);
headers.push(...buildNamespaceInitStatements(meta, metadata));
headers.push(
...buildNamespaceInitStatements(meta, metadata, loose),
);
}
ensureStatementsHoisted(headers);

View File

@ -0,0 +1 @@
export default (function(){return "foo"})();

View File

@ -0,0 +1,10 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _default = function () {
return "foo";
}();
exports.default = _default;

View File

@ -0,0 +1,3 @@
export default new Cachier()
export function Cachier(databaseName) {}

View File

@ -0,0 +1,11 @@
"use strict";
exports.__esModule = true;
exports.Cachier = Cachier;
exports.default = void 0;
var _default = new Cachier();
exports.default = _default;
function Cachier(databaseName) {}

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _default = {};
exports.default = _default;

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _default = [];
exports.default = _default;

View File

@ -0,0 +1 @@
export default foo;

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _default = foo;
exports.default = _default;

View File

@ -0,0 +1 @@
export default function () {}

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = _default;
function _default() {}

View File

@ -0,0 +1 @@
export default class {}

View File

@ -0,0 +1,8 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
class _default {}
exports.default = _default;

View File

@ -0,0 +1 @@
export default function foo () {}

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = foo;
function foo() {}

View File

@ -0,0 +1 @@
export default class Foo {}

View File

@ -0,0 +1,8 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
class Foo {}
exports.default = Foo;

View File

@ -0,0 +1,3 @@
var foo;
export { foo as default };

View File

@ -0,0 +1,6 @@
"use strict";
exports.__esModule = true;
exports.default = void 0;
var foo;
exports.default = foo;

Some files were not shown because too many files have changed in this diff Show More