index.js.map 11.5 KB
{"version":3,"names":["buildWrapper","template","statement","buildAnonymousWrapper","injectWrapper","path","wrapper","body","directives","node","amdFactoryCall","pushContainer","get","amdFactoryCallArgs","amdFactory","length","declare","api","options","assertVersion","allowTopLevelThis","strict","strictMode","importInterop","noInterop","constantReexports","assumption","loose","enumerableModuleMeta","name","pre","file","set","visitor","CallExpression","state","has","isImport","requireId","resolveId","rejectId","scope","generateUidIdentifier","result","t","identifier","wrapInterop","replaceWith","expression","ast","getDynamicImportSource","cloneNode","Program","exit","isModule","REQUIRE","amdArgs","importNames","push","stringLiteral","moduleName","getModuleName","opts","meta","headers","rewriteModuleStatementsAndPrepareHeader","filename","hasExports","exportName","source","metadata","isSideEffectImport","interop","header","expressionStatement","assignmentExpression","loc","buildNamespaceInitStatements","ensureStatementsHoisted","unshiftContainer","MODULE_NAME","AMD_ARGUMENTS","arrayExpression","IMPORT_NAMES"],"sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport {\n  isModule,\n  rewriteModuleStatementsAndPrepareHeader,\n  type RewriteModuleStatementsAndPrepareHeaderOptions,\n  hasExports,\n  isSideEffectImport,\n  buildNamespaceInitStatements,\n  ensureStatementsHoisted,\n  wrapInterop,\n  getModuleName,\n  getDynamicImportSource,\n} from \"@babel/helper-module-transforms\";\nimport { template, types as t } from \"@babel/core\";\nimport type { PluginOptions } from \"@babel/helper-module-transforms\";\nimport type { NodePath } from \"@babel/traverse\";\n\nconst buildWrapper = template.statement(`\n  define(MODULE_NAME, AMD_ARGUMENTS, function(IMPORT_NAMES) {\n  })\n`);\n\nconst buildAnonymousWrapper = template.statement(`\n  define([\"require\"], function(REQUIRE) {\n  })\n`);\n\nfunction injectWrapper(\n  path: NodePath<t.Program>,\n  wrapper: t.ExpressionStatement,\n) {\n  const { body, directives } = path.node;\n  path.node.directives = [];\n  path.node.body = [];\n  const amdFactoryCall = path\n    .pushContainer(\"body\", wrapper)[0]\n    .get(\"expression\") as NodePath<t.CallExpression>;\n  const amdFactoryCallArgs = amdFactoryCall.get(\"arguments\");\n  const amdFactory = (\n    amdFactoryCallArgs[\n      amdFactoryCallArgs.length - 1\n    ] as NodePath<t.FunctionExpression>\n  ).get(\"body\") as NodePath<t.BlockStatement>;\n  amdFactory.pushContainer(\"directives\", directives);\n  amdFactory.pushContainer(\"body\", body);\n}\n\nexport interface Options extends PluginOptions {\n  allowTopLevelThis?: boolean;\n  importInterop?: RewriteModuleStatementsAndPrepareHeaderOptions[\"importInterop\"];\n  loose?: boolean;\n  noInterop?: boolean;\n  strict?: boolean;\n  strictMode?: boolean;\n}\n\ntype State = {\n  requireId?: t.Identifier;\n  resolveId?: t.Identifier;\n  rejectId?: t.Identifier;\n};\n\nexport default declare<State>((api, options: Options) => {\n  api.assertVersion(7);\n\n  const { allowTopLevelThis, strict, strictMode, importInterop, noInterop } =\n    options;\n\n  const constantReexports =\n    api.assumption(\"constantReexports\") ?? options.loose;\n  const enumerableModuleMeta =\n    api.assumption(\"enumerableModuleMeta\") ?? options.loose;\n\n  return {\n    name: \"transform-modules-amd\",\n\n    pre() {\n      this.file.set(\"@babel/plugin-transform-modules-*\", \"amd\");\n    },\n\n    visitor: {\n      CallExpression(path, state) {\n        if (!this.file.has(\"@babel/plugin-proposal-dynamic-import\")) return;\n        if (!path.get(\"callee\").isImport()) return;\n\n        let { requireId, resolveId, rejectId } = state;\n        if (!requireId) {\n          requireId = path.scope.generateUidIdentifier(\"require\");\n          state.requireId = requireId;\n        }\n        if (!resolveId || !rejectId) {\n          resolveId = path.scope.generateUidIdentifier(\"resolve\");\n          rejectId = path.scope.generateUidIdentifier(\"reject\");\n          state.resolveId = resolveId;\n          state.rejectId = rejectId;\n        }\n\n        let result: t.Node = t.identifier(\"imported\");\n        if (!noInterop) result = wrapInterop(path, result, \"namespace\");\n\n        path.replaceWith(\n          template.expression.ast`\n            new Promise((${resolveId}, ${rejectId}) =>\n              ${requireId}(\n                [${getDynamicImportSource(path.node)}],\n                imported => ${t.cloneNode(resolveId)}(${result}),\n                ${t.cloneNode(rejectId)}\n              )\n            )`,\n        );\n      },\n\n      Program: {\n        exit(path, { requireId }) {\n          if (!isModule(path)) {\n            if (requireId) {\n              injectWrapper(\n                path,\n                buildAnonymousWrapper({\n                  REQUIRE: t.cloneNode(requireId),\n                }) as t.ExpressionStatement,\n              );\n            }\n            return;\n          }\n\n          const amdArgs = [];\n          const importNames = [];\n          if (requireId) {\n            amdArgs.push(t.stringLiteral(\"require\"));\n            importNames.push(t.cloneNode(requireId));\n          }\n\n          let moduleName = getModuleName(this.file.opts, options);\n          // @ts-expect-error todo(flow->ts): do not reuse variables\n          if (moduleName) moduleName = t.stringLiteral(moduleName);\n\n          const { meta, headers } = rewriteModuleStatementsAndPrepareHeader(\n            path,\n            {\n              enumerableModuleMeta,\n              constantReexports,\n              strict,\n              strictMode,\n              allowTopLevelThis,\n              importInterop,\n              noInterop,\n              filename: this.file.opts.filename,\n            },\n          );\n\n          if (hasExports(meta)) {\n            amdArgs.push(t.stringLiteral(\"exports\"));\n\n            importNames.push(t.identifier(meta.exportName));\n          }\n\n          for (const [source, metadata] of meta.source) {\n            amdArgs.push(t.stringLiteral(source));\n            importNames.push(t.identifier(metadata.name));\n\n            if (!isSideEffectImport(metadata)) {\n              const interop = wrapInterop(\n                path,\n                t.identifier(metadata.name),\n                metadata.interop,\n              );\n              if (interop) {\n                const header = t.expressionStatement(\n                  t.assignmentExpression(\n                    \"=\",\n                    t.identifier(metadata.name),\n                    interop,\n                  ),\n                );\n                header.loc = metadata.loc;\n                headers.push(header);\n              }\n            }\n\n            headers.push(\n              ...buildNamespaceInitStatements(\n                meta,\n                metadata,\n                constantReexports,\n              ),\n            );\n          }\n\n          ensureStatementsHoisted(headers);\n          path.unshiftContainer(\"body\", headers);\n\n          injectWrapper(\n            path,\n            buildWrapper({\n              MODULE_NAME: moduleName,\n\n              AMD_ARGUMENTS: t.arrayExpression(amdArgs),\n              IMPORT_NAMES: importNames,\n            }) as t.ExpressionStatement,\n          );\n        },\n      },\n    },\n  };\n});\n"],"mappings":"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"}