index.js.map 41.9 KB
{"version":3,"names":["buildTemplate","template","statement","buildExportAll","MISSING_PLUGIN_WARNING","MISSING_PLUGIN_ERROR","getExportSpecifierName","node","stringSpecifiers","type","name","stringValue","value","isIdentifierName","add","Error","constructExportCall","path","exportIdent","exportNames","exportValues","exportStarTarget","statements","length","push","t","expressionStatement","callExpression","stringLiteral","objectProperties","i","exportName","exportValue","objectProperty","has","identifier","objectExpression","exportObj","scope","generateUid","variableDeclaration","variableDeclarator","KEY","generateUidIdentifier","EXPORT_OBJ","TARGET","assignmentExpression","memberExpression","declare","api","options","assertVersion","systemGlobal","allowTopLevelThis","reassignmentVisited","WeakSet","reassignmentVisitor","arg","isAssignmentExpression","get","isObjectPattern","isArrayPattern","exprs","Object","keys","getBindingIdentifiers","getBinding","exportedNames","exports","exportedName","buildCall","expression","replaceWith","sequenceExpression","isIdentifier","isPostUpdateExpression","isUpdateExpression","prefix","binaryExpression","operator","unaryExpression","cloneNode","argument","numericLiteral","pre","file","set","visitor","CallExpression","state","isImport","callee","console","warn","contextIdent","getDynamicImportSource","MetaProperty","meta","property","ReferencedIdentifier","hasBinding","Program","enter","Set","rewriteThis","exit","exportMap","create","modules","beforeBody","setters","sources","variableIds","removedPaths","addExportName","key","val","pushModule","source","specifiers","module","forEach","m","imports","concat","buildExportCall","body","isFunctionDeclaration","isClassDeclaration","id","toExpression","isVariableDeclaration","kind","isImportDeclaration","removeBinding","remove","isExportAllDeclaration","isExportDefaultDeclaration","declar","declaration","buildUndefinedNode","isExportNamedDeclaration","isFunction","isClass","nodes","specifier","local","exported","binding","replaceWithMultiple","setterBody","target","isImportNamespaceSpecifier","isImportDefaultSpecifier","importSpecifier","isImportSpecifier","imported","hasExportStar","isExportSpecifier","isStringLiteral","functionExpression","blockStatement","moduleName","getModuleName","opts","hoistVariables","hasInit","unshift","map","traverse","hasTLA","AwaitExpression","stop","Function","skip","noScope","SYSTEM_REGISTER","BEFORE_BODY","MODULE_NAME","SETTERS","arrayExpression","EXECUTE","SOURCES","EXPORT_IDENTIFIER","CONTEXT_IDENTIFIER"],"sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport hoistVariables from \"@babel/helper-hoist-variables\";\nimport { template, types as t } from \"@babel/core\";\nimport {\n  rewriteThis,\n  getModuleName,\n  getDynamicImportSource,\n} from \"@babel/helper-module-transforms\";\nimport type { PluginOptions } from \"@babel/helper-module-transforms\";\nimport { isIdentifierName } from \"@babel/helper-validator-identifier\";\nimport type { NodePath, Scope, Visitor } from \"@babel/traverse\";\n\nconst buildTemplate = template.statement(`\n  SYSTEM_REGISTER(MODULE_NAME, SOURCES, function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n    \"use strict\";\n    BEFORE_BODY;\n    return {\n      setters: SETTERS,\n      execute: EXECUTE,\n    };\n  });\n`);\n\nconst buildExportAll = template.statement(`\n  for (var KEY in TARGET) {\n    if (KEY !== \"default\" && KEY !== \"__esModule\") EXPORT_OBJ[KEY] = TARGET[KEY];\n  }\n`);\n\nconst MISSING_PLUGIN_WARNING = `\\\nWARNING: Dynamic import() transformation must be enabled using the\n         @babel/plugin-proposal-dynamic-import plugin. Babel 8 will\n         no longer transform import() without using that plugin.\n`;\n\nconst MISSING_PLUGIN_ERROR = `\\\nERROR: Dynamic import() transformation must be enabled using the\n       @babel/plugin-proposal-dynamic-import plugin. Babel 8\n       no longer transforms import() without using that plugin.\n`;\n\n//todo: use getExportSpecifierName in `helper-module-transforms` when this library is refactored to NodePath usage.\n\nexport function getExportSpecifierName(\n  node: t.Node,\n  stringSpecifiers: Set<string>,\n): string {\n  if (node.type === \"Identifier\") {\n    return node.name;\n  } else if (node.type === \"StringLiteral\") {\n    const stringValue = node.value;\n    // add specifier value to `stringSpecifiers` only when it can not be converted to an identifier name\n    // i.e In `import { \"foo\" as bar }`\n    // we do not consider `\"foo\"` to be a `stringSpecifier` because we can treat it as\n    // `import { foo as bar }`\n    // This helps minimize the size of `stringSpecifiers` and reduce overhead of checking valid identifier names\n    // when building transpiled code from metadata\n    if (!isIdentifierName(stringValue)) {\n      stringSpecifiers.add(stringValue);\n    }\n    return stringValue;\n  } else {\n    throw new Error(\n      `Expected export specifier to be either Identifier or StringLiteral, got ${node.type}`,\n    );\n  }\n}\n\ntype PluginState = {\n  contextIdent: string;\n  // List of names that should only be printed as string literals.\n  // i.e. `import { \"any unicode\" as foo } from \"some-module\"`\n  // `stringSpecifiers` is Set(1) [\"any unicode\"]\n  // In most cases `stringSpecifiers` is an empty Set\n  stringSpecifiers: Set<string>;\n};\n\ntype ModuleMetadata = {\n  key: string;\n  imports: any[];\n  exports: any[];\n};\n\nfunction constructExportCall(\n  path: NodePath<t.Program>,\n  exportIdent: t.Identifier,\n  exportNames: string[],\n  exportValues: t.Expression[],\n  exportStarTarget: t.Identifier | null,\n  stringSpecifiers: Set<string>,\n) {\n  const statements = [];\n  if (!exportStarTarget) {\n    if (exportNames.length === 1) {\n      statements.push(\n        t.expressionStatement(\n          t.callExpression(exportIdent, [\n            t.stringLiteral(exportNames[0]),\n            exportValues[0],\n          ]),\n        ),\n      );\n    } else {\n      const objectProperties = [];\n      for (let i = 0; i < exportNames.length; i++) {\n        const exportName = exportNames[i];\n        const exportValue = exportValues[i];\n        objectProperties.push(\n          t.objectProperty(\n            stringSpecifiers.has(exportName)\n              ? t.stringLiteral(exportName)\n              : t.identifier(exportName),\n            exportValue,\n          ),\n        );\n      }\n      statements.push(\n        t.expressionStatement(\n          t.callExpression(exportIdent, [t.objectExpression(objectProperties)]),\n        ),\n      );\n    }\n  } else {\n    const exportObj = path.scope.generateUid(\"exportObj\");\n\n    statements.push(\n      t.variableDeclaration(\"var\", [\n        t.variableDeclarator(t.identifier(exportObj), t.objectExpression([])),\n      ]),\n    );\n\n    statements.push(\n      buildExportAll({\n        KEY: path.scope.generateUidIdentifier(\"key\"),\n        EXPORT_OBJ: t.identifier(exportObj),\n        TARGET: exportStarTarget,\n      }),\n    );\n\n    for (let i = 0; i < exportNames.length; i++) {\n      const exportName = exportNames[i];\n      const exportValue = exportValues[i];\n\n      statements.push(\n        t.expressionStatement(\n          t.assignmentExpression(\n            \"=\",\n            t.memberExpression(\n              t.identifier(exportObj),\n              t.identifier(exportName),\n            ),\n            exportValue,\n          ),\n        ),\n      );\n    }\n\n    statements.push(\n      t.expressionStatement(\n        t.callExpression(exportIdent, [t.identifier(exportObj)]),\n      ),\n    );\n  }\n  return statements;\n}\n\nexport interface Options extends PluginOptions {\n  allowTopLevelThis?: boolean;\n  systemGlobal?: string;\n}\n\ntype ReassignmentVisitorState = {\n  scope: Scope;\n  exports: any;\n  buildCall: (name: string, value: t.Expression) => t.ExpressionStatement;\n};\n\nexport default declare<PluginState>((api, options: Options) => {\n  api.assertVersion(7);\n\n  const { systemGlobal = \"System\", allowTopLevelThis = false } = options;\n  const reassignmentVisited = new WeakSet();\n\n  const reassignmentVisitor: Visitor<ReassignmentVisitorState> = {\n    \"AssignmentExpression|UpdateExpression\"(\n      path: NodePath<t.AssignmentExpression | t.UpdateExpression>,\n    ) {\n      if (reassignmentVisited.has(path.node)) return;\n      reassignmentVisited.add(path.node);\n\n      const arg = path.isAssignmentExpression()\n        ? path.get(\"left\")\n        : path.get(\"argument\");\n\n      if (arg.isObjectPattern() || arg.isArrayPattern()) {\n        const exprs: t.SequenceExpression[\"expressions\"] = [path.node];\n        for (const name of Object.keys(arg.getBindingIdentifiers())) {\n          if (this.scope.getBinding(name) !== path.scope.getBinding(name)) {\n            return;\n          }\n          const exportedNames = this.exports[name];\n          if (!exportedNames) continue;\n          for (const exportedName of exportedNames) {\n            exprs.push(\n              this.buildCall(exportedName, t.identifier(name)).expression,\n            );\n          }\n        }\n        path.replaceWith(t.sequenceExpression(exprs));\n        return;\n      }\n\n      if (!arg.isIdentifier()) return;\n\n      const name = arg.node.name;\n\n      // redeclared in this scope\n      if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return;\n\n      const exportedNames = this.exports[name];\n      if (!exportedNames) return;\n\n      let node: t.Expression = path.node;\n\n      // if it is a non-prefix update expression (x++ etc)\n      // then we must replace with the expression (_export('x', x + 1), x++)\n      // in order to ensure the same update expression value\n      const isPostUpdateExpression = t.isUpdateExpression(node, {\n        prefix: false,\n      });\n      if (isPostUpdateExpression) {\n        node = t.binaryExpression(\n          // @ts-expect-error The operator of a post-update expression must be \"++\" | \"--\"\n          node.operator[0],\n          t.unaryExpression(\n            \"+\",\n            t.cloneNode(\n              // @ts-expect-error node is UpdateExpression\n              node.argument,\n            ),\n          ),\n          t.numericLiteral(1),\n        );\n      }\n\n      for (const exportedName of exportedNames) {\n        node = this.buildCall(exportedName, node).expression;\n      }\n\n      if (isPostUpdateExpression) {\n        node = t.sequenceExpression([node, path.node]);\n      }\n\n      path.replaceWith(node);\n    },\n  };\n\n  return {\n    name: \"transform-modules-systemjs\",\n\n    pre() {\n      this.file.set(\"@babel/plugin-transform-modules-*\", \"systemjs\");\n    },\n\n    visitor: {\n      CallExpression(path, state: PluginState) {\n        if (t.isImport(path.node.callee)) {\n          if (!this.file.has(\"@babel/plugin-proposal-dynamic-import\")) {\n            if (process.env.BABEL_8_BREAKING) {\n              throw new Error(MISSING_PLUGIN_ERROR);\n            } else {\n              console.warn(MISSING_PLUGIN_WARNING);\n            }\n          }\n\n          path.replaceWith(\n            t.callExpression(\n              t.memberExpression(\n                t.identifier(state.contextIdent),\n                t.identifier(\"import\"),\n              ),\n              [getDynamicImportSource(path.node)],\n            ),\n          );\n        }\n      },\n\n      MetaProperty(path, state: PluginState) {\n        if (\n          path.node.meta.name === \"import\" &&\n          path.node.property.name === \"meta\"\n        ) {\n          path.replaceWith(\n            t.memberExpression(\n              t.identifier(state.contextIdent),\n              t.identifier(\"meta\"),\n            ),\n          );\n        }\n      },\n\n      ReferencedIdentifier(path, state) {\n        if (\n          path.node.name === \"__moduleName\" &&\n          !path.scope.hasBinding(\"__moduleName\")\n        ) {\n          path.replaceWith(\n            t.memberExpression(\n              t.identifier(state.contextIdent),\n              t.identifier(\"id\"),\n            ),\n          );\n        }\n      },\n\n      Program: {\n        enter(path, state) {\n          state.contextIdent = path.scope.generateUid(\"context\");\n          state.stringSpecifiers = new Set();\n          if (!allowTopLevelThis) {\n            rewriteThis(path);\n          }\n        },\n        exit(path, state) {\n          const scope = path.scope;\n          const exportIdent = scope.generateUid(\"export\");\n          const { contextIdent, stringSpecifiers } = state;\n\n          const exportMap: Record<string, string[]> = Object.create(null);\n          const modules: ModuleMetadata[] = [];\n\n          const beforeBody = [];\n          const setters: t.Expression[] = [];\n          const sources: t.StringLiteral[] = [];\n          const variableIds = [];\n          const removedPaths = [];\n\n          function addExportName(key: string, val: string) {\n            exportMap[key] = exportMap[key] || [];\n            exportMap[key].push(val);\n          }\n\n          function pushModule(\n            source: string,\n            key: \"imports\" | \"exports\",\n            specifiers: t.ModuleSpecifier[] | t.ExportAllDeclaration,\n          ) {\n            let module: ModuleMetadata;\n            modules.forEach(function (m) {\n              if (m.key === source) {\n                module = m;\n              }\n            });\n            if (!module) {\n              modules.push(\n                (module = { key: source, imports: [], exports: [] }),\n              );\n            }\n            module[key] = module[key].concat(specifiers);\n          }\n\n          function buildExportCall(name: string, val: t.Expression) {\n            return t.expressionStatement(\n              t.callExpression(t.identifier(exportIdent), [\n                t.stringLiteral(name),\n                val,\n              ]),\n            );\n          }\n\n          const exportNames = [];\n          const exportValues: t.Expression[] = [];\n\n          const body = path.get(\"body\");\n\n          for (const path of body) {\n            if (path.isFunctionDeclaration()) {\n              beforeBody.push(path.node);\n              removedPaths.push(path);\n            } else if (path.isClassDeclaration()) {\n              variableIds.push(t.cloneNode(path.node.id));\n              path.replaceWith(\n                t.expressionStatement(\n                  t.assignmentExpression(\n                    \"=\",\n                    t.cloneNode(path.node.id),\n                    t.toExpression(path.node),\n                  ),\n                ),\n              );\n            } else if (path.isVariableDeclaration()) {\n              // Convert top-level variable declarations to \"var\",\n              // because they must be hoisted\n              path.node.kind = \"var\";\n            } else if (path.isImportDeclaration()) {\n              const source = path.node.source.value;\n              pushModule(source, \"imports\", path.node.specifiers);\n              for (const name of Object.keys(path.getBindingIdentifiers())) {\n                scope.removeBinding(name);\n                variableIds.push(t.identifier(name));\n              }\n              path.remove();\n            } else if (path.isExportAllDeclaration()) {\n              pushModule(path.node.source.value, \"exports\", path.node);\n              path.remove();\n            } else if (path.isExportDefaultDeclaration()) {\n              const declar = path.node.declaration;\n              if (t.isClassDeclaration(declar)) {\n                const id = declar.id;\n                if (id) {\n                  exportNames.push(\"default\");\n                  exportValues.push(scope.buildUndefinedNode());\n                  variableIds.push(t.cloneNode(id));\n                  addExportName(id.name, \"default\");\n                  path.replaceWith(\n                    t.expressionStatement(\n                      t.assignmentExpression(\n                        \"=\",\n                        t.cloneNode(id),\n                        t.toExpression(declar),\n                      ),\n                    ),\n                  );\n                } else {\n                  exportNames.push(\"default\");\n                  exportValues.push(t.toExpression(declar));\n                  removedPaths.push(path);\n                }\n              } else if (t.isFunctionDeclaration(declar)) {\n                const id = declar.id;\n                if (id) {\n                  beforeBody.push(declar);\n                  exportNames.push(\"default\");\n                  exportValues.push(t.cloneNode(id));\n                  addExportName(id.name, \"default\");\n                } else {\n                  exportNames.push(\"default\");\n                  exportValues.push(t.toExpression(declar));\n                }\n                removedPaths.push(path);\n              } else {\n                // @ts-expect-error TSDeclareFunction is not expected here\n                path.replaceWith(buildExportCall(\"default\", declar));\n              }\n            } else if (path.isExportNamedDeclaration()) {\n              const declar = path.node.declaration;\n\n              if (declar) {\n                path.replaceWith(declar);\n\n                if (t.isFunction(declar)) {\n                  const name = declar.id.name;\n                  addExportName(name, name);\n                  beforeBody.push(declar);\n                  exportNames.push(name);\n                  exportValues.push(t.cloneNode(declar.id));\n                  removedPaths.push(path);\n                } else if (t.isClass(declar)) {\n                  const name = declar.id.name;\n                  exportNames.push(name);\n                  exportValues.push(scope.buildUndefinedNode());\n                  variableIds.push(t.cloneNode(declar.id));\n                  path.replaceWith(\n                    t.expressionStatement(\n                      t.assignmentExpression(\n                        \"=\",\n                        t.cloneNode(declar.id),\n                        t.toExpression(declar),\n                      ),\n                    ),\n                  );\n                  addExportName(name, name);\n                } else {\n                  if (t.isVariableDeclaration(declar)) {\n                    // Convert top-level variable declarations to \"var\",\n                    // because they must be hoisted\n                    declar.kind = \"var\";\n                  }\n                  for (const name of Object.keys(\n                    t.getBindingIdentifiers(declar),\n                  )) {\n                    addExportName(name, name);\n                  }\n                }\n              } else {\n                const specifiers = path.node.specifiers;\n                if (specifiers?.length) {\n                  if (path.node.source) {\n                    pushModule(path.node.source.value, \"exports\", specifiers);\n                    path.remove();\n                  } else {\n                    const nodes = [];\n\n                    for (const specifier of specifiers) {\n                      // @ts-expect-error This isn't an \"export ... from\" declaration\n                      // because path.node.source is falsy, so the local specifier exists.\n                      const { local, exported } = specifier;\n\n                      const binding = scope.getBinding(local.name);\n                      const exportedName = getExportSpecifierName(\n                        exported,\n                        stringSpecifiers,\n                      );\n                      // hoisted function export\n                      if (\n                        binding &&\n                        t.isFunctionDeclaration(binding.path.node)\n                      ) {\n                        exportNames.push(exportedName);\n                        exportValues.push(t.cloneNode(local));\n                      }\n                      // only globals also exported this way\n                      else if (!binding) {\n                        nodes.push(buildExportCall(exportedName, local));\n                      }\n                      addExportName(local.name, exportedName);\n                    }\n\n                    path.replaceWithMultiple(nodes);\n                  }\n                } else {\n                  path.remove();\n                }\n              }\n            }\n          }\n\n          modules.forEach(function (specifiers) {\n            const setterBody = [];\n            const target = scope.generateUid(specifiers.key);\n\n            for (let specifier of specifiers.imports) {\n              if (t.isImportNamespaceSpecifier(specifier)) {\n                setterBody.push(\n                  t.expressionStatement(\n                    t.assignmentExpression(\n                      \"=\",\n                      specifier.local,\n                      t.identifier(target),\n                    ),\n                  ),\n                );\n              } else if (t.isImportDefaultSpecifier(specifier)) {\n                specifier = t.importSpecifier(\n                  specifier.local,\n                  t.identifier(\"default\"),\n                );\n              }\n\n              if (t.isImportSpecifier(specifier)) {\n                const { imported } = specifier;\n                setterBody.push(\n                  t.expressionStatement(\n                    t.assignmentExpression(\n                      \"=\",\n                      specifier.local,\n                      t.memberExpression(\n                        t.identifier(target),\n                        specifier.imported,\n                        /* computed */ imported.type === \"StringLiteral\",\n                      ),\n                    ),\n                  ),\n                );\n              }\n            }\n\n            if (specifiers.exports.length) {\n              const exportNames = [];\n              const exportValues = [];\n              let hasExportStar = false;\n\n              for (const node of specifiers.exports) {\n                if (t.isExportAllDeclaration(node)) {\n                  hasExportStar = true;\n                } else if (t.isExportSpecifier(node)) {\n                  const exportedName = getExportSpecifierName(\n                    node.exported,\n                    stringSpecifiers,\n                  );\n                  exportNames.push(exportedName);\n                  exportValues.push(\n                    t.memberExpression(\n                      t.identifier(target),\n                      node.local,\n                      t.isStringLiteral(node.local),\n                    ),\n                  );\n                } else {\n                  // todo\n                }\n              }\n\n              setterBody.push(\n                ...constructExportCall(\n                  path,\n                  t.identifier(exportIdent),\n                  exportNames,\n                  exportValues,\n                  hasExportStar ? t.identifier(target) : null,\n                  stringSpecifiers,\n                ),\n              );\n            }\n\n            sources.push(t.stringLiteral(specifiers.key));\n            setters.push(\n              t.functionExpression(\n                null,\n                [t.identifier(target)],\n                t.blockStatement(setterBody),\n              ),\n            );\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          hoistVariables(path, (id, name, hasInit) => {\n            variableIds.push(id);\n            if (!hasInit && name in exportMap) {\n              for (const exported of exportMap[name]) {\n                exportNames.push(exported);\n                exportValues.push(scope.buildUndefinedNode());\n              }\n            }\n          });\n\n          if (variableIds.length) {\n            beforeBody.unshift(\n              t.variableDeclaration(\n                \"var\",\n                variableIds.map(id => t.variableDeclarator(id)),\n              ),\n            );\n          }\n\n          if (exportNames.length) {\n            beforeBody.push(\n              ...constructExportCall(\n                path,\n                t.identifier(exportIdent),\n                exportNames,\n                exportValues,\n                null,\n                stringSpecifiers,\n              ),\n            );\n          }\n\n          path.traverse(reassignmentVisitor, {\n            exports: exportMap,\n            buildCall: buildExportCall,\n            scope,\n          });\n\n          for (const path of removedPaths) {\n            path.remove();\n          }\n\n          let hasTLA = false;\n          path.traverse({\n            AwaitExpression(path) {\n              hasTLA = true;\n              path.stop();\n            },\n            Function(path) {\n              path.skip();\n            },\n            // @ts-expect-error - todo: add noScope to type definitions\n            noScope: true,\n          });\n\n          path.node.body = [\n            buildTemplate({\n              SYSTEM_REGISTER: t.memberExpression(\n                t.identifier(systemGlobal),\n                t.identifier(\"register\"),\n              ),\n              BEFORE_BODY: beforeBody,\n              MODULE_NAME: moduleName,\n              SETTERS: t.arrayExpression(setters),\n              EXECUTE: t.functionExpression(\n                null,\n                [],\n                t.blockStatement(path.node.body),\n                false,\n                hasTLA,\n              ),\n              SOURCES: t.arrayExpression(sources),\n              EXPORT_IDENTIFIER: t.identifier(exportIdent),\n              CONTEXT_IDENTIFIER: t.identifier(contextIdent),\n            }),\n          ];\n        },\n      },\n    },\n  };\n});\n"],"mappings":"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"}