eac2716cda52839990730cbc7a795ac534595cb01f059904711f2b4c1b72757deb205e2af93e80252768268170841dbc96d8e32bf69d3eef1f8c383380403d 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.run = run;
  6. function _traverse() {
  7. const data = require("@babel/traverse");
  8. _traverse = function () {
  9. return data;
  10. };
  11. return data;
  12. }
  13. var _pluginPass = require("./plugin-pass.js");
  14. var _blockHoistPlugin = require("./block-hoist-plugin.js");
  15. var _normalizeOpts = require("./normalize-opts.js");
  16. var _normalizeFile = require("./normalize-file.js");
  17. var _generate = require("./file/generate.js");
  18. var _deepArray = require("../config/helpers/deep-array.js");
  19. var _async = require("../gensync-utils/async.js");
  20. function* run(config, code, ast) {
  21. const file = yield* (0, _normalizeFile.default)(config.passes, (0, _normalizeOpts.default)(config), code, ast);
  22. const opts = file.opts;
  23. try {
  24. yield* transformFile(file, config.passes);
  25. } catch (e) {
  26. var _opts$filename;
  27. e.message = `${(_opts$filename = opts.filename) != null ? _opts$filename : "unknown file"}: ${e.message}`;
  28. if (!e.code) {
  29. e.code = "BABEL_TRANSFORM_ERROR";
  30. }
  31. throw e;
  32. }
  33. let outputCode, outputMap;
  34. try {
  35. if (opts.code !== false) {
  36. ({
  37. outputCode,
  38. outputMap
  39. } = (0, _generate.default)(config.passes, file));
  40. }
  41. } catch (e) {
  42. var _opts$filename2;
  43. e.message = `${(_opts$filename2 = opts.filename) != null ? _opts$filename2 : "unknown file"}: ${e.message}`;
  44. if (!e.code) {
  45. e.code = "BABEL_GENERATE_ERROR";
  46. }
  47. throw e;
  48. }
  49. return {
  50. metadata: file.metadata,
  51. options: opts,
  52. ast: opts.ast === true ? file.ast : null,
  53. code: outputCode === undefined ? null : outputCode,
  54. map: outputMap === undefined ? null : outputMap,
  55. sourceType: file.ast.program.sourceType,
  56. externalDependencies: (0, _deepArray.flattenToSet)(config.externalDependencies)
  57. };
  58. }
  59. function* transformFile(file, pluginPasses) {
  60. const async = yield* (0, _async.isAsync)();
  61. for (const pluginPairs of pluginPasses) {
  62. const passPairs = [];
  63. const passes = [];
  64. const visitors = [];
  65. for (const plugin of pluginPairs.concat([(0, _blockHoistPlugin.default)()])) {
  66. const pass = new _pluginPass.default(file, plugin.key, plugin.options, async);
  67. passPairs.push([plugin, pass]);
  68. passes.push(pass);
  69. visitors.push(plugin.visitor);
  70. }
  71. for (const [plugin, pass] of passPairs) {
  72. if (plugin.pre) {
  73. const fn = (0, _async.maybeAsync)(plugin.pre, `You appear to be using an async plugin/preset, but Babel has been called synchronously`);
  74. yield* fn.call(pass, file);
  75. }
  76. }
  77. const visitor = _traverse().default.visitors.merge(visitors, passes, file.opts.wrapPluginVisitorMethod);
  78. {
  79. (0, _traverse().default)(file.ast, visitor, file.scope);
  80. }
  81. for (const [plugin, pass] of passPairs) {
  82. if (plugin.post) {
  83. const fn = (0, _async.maybeAsync)(plugin.post, `You appear to be using an async plugin/preset, but Babel has been called synchronously`);
  84. yield* fn.call(pass, file);
  85. }
  86. }
  87. }
  88. }
  89. 0 && 0;
  90. //# sourceMappingURL=index.js.map