index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 _helperRemapAsyncToGenerator() {
  14. const data = _interopRequireDefault(require("@babel/helper-remap-async-to-generator"));
  15. _helperRemapAsyncToGenerator = function () {
  16. return data;
  17. };
  18. return data;
  19. }
  20. function _pluginSyntaxAsyncGenerators() {
  21. const data = _interopRequireDefault(require("@babel/plugin-syntax-async-generators"));
  22. _pluginSyntaxAsyncGenerators = 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. var _forAwait = _interopRequireDefault(require("./for-await"));
  35. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  36. var _default = (0, _helperPluginUtils().declare)(api => {
  37. api.assertVersion(7);
  38. const yieldStarVisitor = {
  39. Function(path) {
  40. path.skip();
  41. },
  42. YieldExpression({
  43. node
  44. }, state) {
  45. if (!node.delegate) return;
  46. const callee = state.addHelper("asyncGeneratorDelegate");
  47. node.argument = _core().types.callExpression(callee, [_core().types.callExpression(state.addHelper("asyncIterator"), [node.argument]), state.addHelper("awaitAsyncGenerator")]);
  48. }
  49. };
  50. const forAwaitVisitor = {
  51. Function(path) {
  52. path.skip();
  53. },
  54. ForOfStatement(path, {
  55. file
  56. }) {
  57. const {
  58. node
  59. } = path;
  60. if (!node.await) return;
  61. const build = (0, _forAwait.default)(path, {
  62. getAsyncIterator: file.addHelper("asyncIterator")
  63. });
  64. const {
  65. declar,
  66. loop
  67. } = build;
  68. const block = loop.body;
  69. path.ensureBlock();
  70. if (declar) {
  71. block.body.push(declar);
  72. }
  73. block.body = block.body.concat(node.body.body);
  74. _core().types.inherits(loop, node);
  75. _core().types.inherits(loop.body, node.body);
  76. if (build.replaceParent) {
  77. path.parentPath.replaceWithMultiple(build.node);
  78. } else {
  79. path.replaceWithMultiple(build.node);
  80. }
  81. }
  82. };
  83. const visitor = {
  84. Function(path, state) {
  85. if (!path.node.async) return;
  86. path.traverse(forAwaitVisitor, state);
  87. if (!path.node.generator) return;
  88. path.traverse(yieldStarVisitor, state);
  89. (0, _helperRemapAsyncToGenerator().default)(path, {
  90. wrapAsync: state.addHelper("wrapAsyncGenerator"),
  91. wrapAwait: state.addHelper("awaitAsyncGenerator")
  92. });
  93. }
  94. };
  95. return {
  96. name: "proposal-async-generator-functions",
  97. inherits: _pluginSyntaxAsyncGenerators().default,
  98. visitor: {
  99. Program(path, state) {
  100. path.traverse(visitor, state);
  101. }
  102. }
  103. };
  104. });
  105. exports.default = _default;