index.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. function _helperPluginUtils() {
  7. const data = require("@babel/helper-plugin-utils");
  8. _helperPluginUtils = function () {
  9. return data;
  10. };
  11. return data;
  12. }
  13. function _path() {
  14. const data = require("path");
  15. _path = function () {
  16. return data;
  17. };
  18. return data;
  19. }
  20. function _helperModuleTransforms() {
  21. const data = require("@babel/helper-module-transforms");
  22. _helperModuleTransforms = function () {
  23. return data;
  24. };
  25. return data;
  26. }
  27. function _core() {
  28. const data = require("@babel/core");
  29. _core = function () {
  30. return data;
  31. };
  32. return data;
  33. }
  34. const buildPrerequisiteAssignment = (0, _core().template)(`
  35. GLOBAL_REFERENCE = GLOBAL_REFERENCE || {}
  36. `);
  37. const buildWrapper = (0, _core().template)(`
  38. (function (global, factory) {
  39. if (typeof define === "function" && define.amd) {
  40. define(MODULE_NAME, AMD_ARGUMENTS, factory);
  41. } else if (typeof exports !== "undefined") {
  42. factory(COMMONJS_ARGUMENTS);
  43. } else {
  44. var mod = { exports: {} };
  45. factory(BROWSER_ARGUMENTS);
  46. GLOBAL_TO_ASSIGN;
  47. }
  48. })(this, function(IMPORT_NAMES) {
  49. })
  50. `);
  51. var _default = (0, _helperPluginUtils().declare)((api, options) => {
  52. api.assertVersion(7);
  53. const {
  54. globals,
  55. exactGlobals,
  56. loose,
  57. allowTopLevelThis,
  58. strict,
  59. strictMode,
  60. noInterop
  61. } = options;
  62. function buildBrowserInit(browserGlobals, exactGlobals, filename, moduleName) {
  63. const moduleNameOrBasename = moduleName ? moduleName.value : (0, _path().basename)(filename, (0, _path().extname)(filename));
  64. let globalToAssign = _core().types.memberExpression(_core().types.identifier("global"), _core().types.identifier(_core().types.toIdentifier(moduleNameOrBasename)));
  65. let initAssignments = [];
  66. if (exactGlobals) {
  67. const globalName = browserGlobals[moduleNameOrBasename];
  68. if (globalName) {
  69. initAssignments = [];
  70. const members = globalName.split(".");
  71. globalToAssign = members.slice(1).reduce((accum, curr) => {
  72. initAssignments.push(buildPrerequisiteAssignment({
  73. GLOBAL_REFERENCE: _core().types.cloneNode(accum)
  74. }));
  75. return _core().types.memberExpression(accum, _core().types.identifier(curr));
  76. }, _core().types.memberExpression(_core().types.identifier("global"), _core().types.identifier(members[0])));
  77. }
  78. }
  79. initAssignments.push(_core().types.expressionStatement(_core().types.assignmentExpression("=", globalToAssign, _core().types.memberExpression(_core().types.identifier("mod"), _core().types.identifier("exports")))));
  80. return initAssignments;
  81. }
  82. function buildBrowserArg(browserGlobals, exactGlobals, source) {
  83. let memberExpression;
  84. if (exactGlobals) {
  85. const globalRef = browserGlobals[source];
  86. if (globalRef) {
  87. memberExpression = globalRef.split(".").reduce((accum, curr) => _core().types.memberExpression(accum, _core().types.identifier(curr)), _core().types.identifier("global"));
  88. } else {
  89. memberExpression = _core().types.memberExpression(_core().types.identifier("global"), _core().types.identifier(_core().types.toIdentifier(source)));
  90. }
  91. } else {
  92. const requireName = (0, _path().basename)(source, (0, _path().extname)(source));
  93. const globalName = browserGlobals[requireName] || requireName;
  94. memberExpression = _core().types.memberExpression(_core().types.identifier("global"), _core().types.identifier(_core().types.toIdentifier(globalName)));
  95. }
  96. return memberExpression;
  97. }
  98. return {
  99. name: "transform-modules-umd",
  100. visitor: {
  101. Program: {
  102. exit(path) {
  103. if (!(0, _helperModuleTransforms().isModule)(path)) return;
  104. const browserGlobals = globals || {};
  105. let moduleName = this.getModuleName();
  106. if (moduleName) moduleName = _core().types.stringLiteral(moduleName);
  107. const {
  108. meta,
  109. headers
  110. } = (0, _helperModuleTransforms().rewriteModuleStatementsAndPrepareHeader)(path, {
  111. loose,
  112. strict,
  113. strictMode,
  114. allowTopLevelThis,
  115. noInterop
  116. });
  117. const amdArgs = [];
  118. const commonjsArgs = [];
  119. const browserArgs = [];
  120. const importNames = [];
  121. if ((0, _helperModuleTransforms().hasExports)(meta)) {
  122. amdArgs.push(_core().types.stringLiteral("exports"));
  123. commonjsArgs.push(_core().types.identifier("exports"));
  124. browserArgs.push(_core().types.memberExpression(_core().types.identifier("mod"), _core().types.identifier("exports")));
  125. importNames.push(_core().types.identifier(meta.exportName));
  126. }
  127. for (const [source, metadata] of meta.source) {
  128. amdArgs.push(_core().types.stringLiteral(source));
  129. commonjsArgs.push(_core().types.callExpression(_core().types.identifier("require"), [_core().types.stringLiteral(source)]));
  130. browserArgs.push(buildBrowserArg(browserGlobals, exactGlobals, source));
  131. importNames.push(_core().types.identifier(metadata.name));
  132. if (!(0, _helperModuleTransforms().isSideEffectImport)(metadata)) {
  133. const interop = (0, _helperModuleTransforms().wrapInterop)(path, _core().types.identifier(metadata.name), metadata.interop);
  134. if (interop) {
  135. const header = _core().types.expressionStatement(_core().types.assignmentExpression("=", _core().types.identifier(metadata.name), interop));
  136. header.loc = meta.loc;
  137. headers.push(header);
  138. }
  139. }
  140. headers.push(...(0, _helperModuleTransforms().buildNamespaceInitStatements)(meta, metadata, loose));
  141. }
  142. (0, _helperModuleTransforms().ensureStatementsHoisted)(headers);
  143. path.unshiftContainer("body", headers);
  144. const {
  145. body,
  146. directives
  147. } = path.node;
  148. path.node.directives = [];
  149. path.node.body = [];
  150. const umdWrapper = path.pushContainer("body", [buildWrapper({
  151. MODULE_NAME: moduleName,
  152. AMD_ARGUMENTS: _core().types.arrayExpression(amdArgs),
  153. COMMONJS_ARGUMENTS: commonjsArgs,
  154. BROWSER_ARGUMENTS: browserArgs,
  155. IMPORT_NAMES: importNames,
  156. GLOBAL_TO_ASSIGN: buildBrowserInit(browserGlobals, exactGlobals, this.filename || "unknown", moduleName)
  157. })])[0];
  158. const umdFactory = umdWrapper.get("expression.arguments")[1].get("body");
  159. umdFactory.pushContainer("directives", directives);
  160. umdFactory.pushContainer("body", body);
  161. }
  162. }
  163. }
  164. };
  165. });
  166. exports.default = _default;