transform.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = transform;
  6. var _traverse = _interopRequireDefault(require("next/dist/compiled/babel/traverse"));
  7. var _generator = _interopRequireDefault(require("next/dist/compiled/babel/generator"));
  8. var _coreLibNormalizeFile = _interopRequireDefault(require("next/dist/compiled/babel/core-lib-normalize-file"));
  9. var _coreLibNormalizeOpts = _interopRequireDefault(require("next/dist/compiled/babel/core-lib-normalize-opts"));
  10. var _coreLibBlockHoistPlugin = _interopRequireDefault(require("next/dist/compiled/babel/core-lib-block-hoist-plugin"));
  11. var _coreLibPluginPass = _interopRequireDefault(require("next/dist/compiled/babel/core-lib-plugin-pass"));
  12. var _getConfig = _interopRequireDefault(require("./get-config"));
  13. var _util = require("./util");
  14. function transform(source, inputSourceMap, loaderOptions, filename, target, parentSpan) {
  15. const getConfigSpan = parentSpan.traceChild("babel-turbo-get-config");
  16. const babelConfig = _getConfig.default.call(this, {
  17. source,
  18. loaderOptions,
  19. inputSourceMap,
  20. target,
  21. filename
  22. });
  23. getConfigSpan.stop();
  24. const normalizeSpan = parentSpan.traceChild("babel-turbo-normalize-file");
  25. const file = (0, _util).consumeIterator((0, _coreLibNormalizeFile).default(babelConfig.passes, (0, _coreLibNormalizeOpts).default(babelConfig), source));
  26. normalizeSpan.stop();
  27. const transformSpan = parentSpan.traceChild("babel-turbo-transform");
  28. transformAst(file, babelConfig, transformSpan);
  29. transformSpan.stop();
  30. const generateSpan = parentSpan.traceChild("babel-turbo-generate");
  31. const { code , map } = (0, _generator).default(file.ast, file.opts.generatorOpts, file.code);
  32. generateSpan.stop();
  33. return {
  34. code,
  35. map
  36. };
  37. }
  38. function _interopRequireDefault(obj) {
  39. return obj && obj.__esModule ? obj : {
  40. default: obj
  41. };
  42. }
  43. function getTraversalParams(file, pluginPairs) {
  44. const passPairs = [];
  45. const passes = [];
  46. const visitors = [];
  47. for (const plugin of pluginPairs.concat((0, _coreLibBlockHoistPlugin).default())){
  48. const pass = new _coreLibPluginPass.default(file, plugin.key, plugin.options);
  49. passPairs.push([
  50. plugin,
  51. pass
  52. ]);
  53. passes.push(pass);
  54. visitors.push(plugin.visitor);
  55. }
  56. return {
  57. passPairs,
  58. passes,
  59. visitors
  60. };
  61. }
  62. function invokePluginPre(file, passPairs) {
  63. for (const [{ pre }, pass] of passPairs){
  64. if (pre) {
  65. pre.call(pass, file);
  66. }
  67. }
  68. }
  69. function invokePluginPost(file, passPairs) {
  70. for (const [{ post }, pass] of passPairs){
  71. if (post) {
  72. post.call(pass, file);
  73. }
  74. }
  75. }
  76. function transformAstPass(file, pluginPairs, parentSpan) {
  77. const { passPairs , passes , visitors } = getTraversalParams(file, pluginPairs);
  78. invokePluginPre(file, passPairs);
  79. const visitor = _traverse.default.visitors.merge(visitors, passes, // @ts-ignore - the exported types are incorrect here
  80. file.opts.wrapPluginVisitorMethod);
  81. parentSpan.traceChild("babel-turbo-traverse").traceFn(()=>(0, _traverse).default(file.ast, visitor, file.scope));
  82. invokePluginPost(file, passPairs);
  83. }
  84. function transformAst(file, babelConfig, parentSpan) {
  85. for (const pluginPairs of babelConfig.passes){
  86. transformAstPass(file, pluginPairs, parentSpan);
  87. }
  88. }
  89. //# sourceMappingURL=transform.js.map