|
|
- "use strict";
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
-
- var _helperPluginUtils = require("@babel/helper-plugin-utils");
-
- var _helperModuleTransforms = require("@babel/helper-module-transforms");
-
- var _core = require("@babel/core");
-
- var _utils = require("babel-plugin-dynamic-import-node/utils");
-
- const buildWrapper = (0, _core.template)(`
- define(MODULE_NAME, AMD_ARGUMENTS, function(IMPORT_NAMES) {
- })
- `);
- const buildAnonymousWrapper = (0, _core.template)(`
- define(["require"], function(REQUIRE) {
- })
- `);
-
- function injectWrapper(path, wrapper) {
- const {
- body,
- directives
- } = path.node;
- path.node.directives = [];
- path.node.body = [];
- const amdWrapper = path.pushContainer("body", wrapper)[0];
- const amdFactory = amdWrapper.get("expression.arguments").filter(arg => arg.isFunctionExpression())[0].get("body");
- amdFactory.pushContainer("directives", directives);
- amdFactory.pushContainer("body", body);
- }
-
- var _default = (0, _helperPluginUtils.declare)((api, options) => {
- api.assertVersion(7);
- const {
- loose,
- allowTopLevelThis,
- strict,
- strictMode,
- noInterop
- } = options;
- return {
- name: "transform-modules-amd",
-
- pre() {
- this.file.set("@babel/plugin-transform-modules-*", "amd");
- },
-
- visitor: {
- CallExpression(path, state) {
- if (!this.file.has("@babel/plugin-proposal-dynamic-import")) return;
- if (!path.get("callee").isImport()) return;
- let {
- requireId,
- resolveId,
- rejectId
- } = state;
-
- if (!requireId) {
- requireId = path.scope.generateUidIdentifier("require");
- state.requireId = requireId;
- }
-
- if (!resolveId || !rejectId) {
- resolveId = path.scope.generateUidIdentifier("resolve");
- rejectId = path.scope.generateUidIdentifier("reject");
- state.resolveId = resolveId;
- state.rejectId = rejectId;
- }
-
- let result = _core.types.identifier("imported");
-
- if (!noInterop) result = (0, _helperModuleTransforms.wrapInterop)(path, result, "namespace");
- path.replaceWith(_core.template.expression.ast`
- new Promise((${resolveId}, ${rejectId}) =>
- ${requireId}(
- [${(0, _utils.getImportSource)(_core.types, path.node)}],
- imported => ${resolveId}(${result}),
- ${rejectId}
- )
- )`);
- },
-
- Program: {
- exit(path, {
- requireId
- }) {
- if (!(0, _helperModuleTransforms.isModule)(path)) {
- if (requireId) {
- injectWrapper(path, buildAnonymousWrapper({
- REQUIRE: requireId
- }));
- }
-
- return;
- }
-
- const amdArgs = [];
- const importNames = [];
-
- if (requireId) {
- amdArgs.push(_core.types.stringLiteral("require"));
- importNames.push(requireId);
- }
-
- let moduleName = this.getModuleName();
- if (moduleName) moduleName = _core.types.stringLiteral(moduleName);
- const {
- meta,
- headers
- } = (0, _helperModuleTransforms.rewriteModuleStatementsAndPrepareHeader)(path, {
- loose,
- strict,
- strictMode,
- allowTopLevelThis,
- noInterop
- });
-
- if ((0, _helperModuleTransforms.hasExports)(meta)) {
- amdArgs.push(_core.types.stringLiteral("exports"));
- importNames.push(_core.types.identifier(meta.exportName));
- }
-
- for (const [source, metadata] of meta.source) {
- amdArgs.push(_core.types.stringLiteral(source));
- importNames.push(_core.types.identifier(metadata.name));
-
- if (!(0, _helperModuleTransforms.isSideEffectImport)(metadata)) {
- const interop = (0, _helperModuleTransforms.wrapInterop)(path, _core.types.identifier(metadata.name), metadata.interop);
-
- if (interop) {
- const header = _core.types.expressionStatement(_core.types.assignmentExpression("=", _core.types.identifier(metadata.name), interop));
-
- header.loc = metadata.loc;
- headers.push(header);
- }
- }
-
- headers.push(...(0, _helperModuleTransforms.buildNamespaceInitStatements)(meta, metadata, loose));
- }
-
- (0, _helperModuleTransforms.ensureStatementsHoisted)(headers);
- path.unshiftContainer("body", headers);
- injectWrapper(path, buildWrapper({
- MODULE_NAME: moduleName,
- AMD_ARGUMENTS: _core.types.arrayExpression(amdArgs),
- IMPORT_NAMES: importNames
- }));
- }
-
- }
- }
- };
- });
-
- exports.default = _default;
|