| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| |
| function _helperPluginUtils() { |
| const data = require("@babel/helper-plugin-utils"); |
| |
| _helperPluginUtils = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| function _helperRemapAsyncToGenerator() { |
| const data = _interopRequireDefault(require("@babel/helper-remap-async-to-generator")); |
| |
| _helperRemapAsyncToGenerator = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| function _pluginSyntaxAsyncGenerators() { |
| const data = _interopRequireDefault(require("@babel/plugin-syntax-async-generators")); |
| |
| _pluginSyntaxAsyncGenerators = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| function _core() { |
| const data = require("@babel/core"); |
| |
| _core = function () { |
| return data; |
| }; |
| |
| return data; |
| } |
| |
| var _forAwait = _interopRequireDefault(require("./for-await")); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
| |
| var _default = (0, _helperPluginUtils().declare)(api => { |
| api.assertVersion(7); |
| const yieldStarVisitor = { |
| Function(path) { |
| path.skip(); |
| }, |
| |
| YieldExpression({ |
| node |
| }, state) { |
| if (!node.delegate) return; |
| const callee = state.addHelper("asyncGeneratorDelegate"); |
| node.argument = _core().types.callExpression(callee, [_core().types.callExpression(state.addHelper("asyncIterator"), [node.argument]), state.addHelper("awaitAsyncGenerator")]); |
| } |
| |
| }; |
| const forAwaitVisitor = { |
| Function(path) { |
| path.skip(); |
| }, |
| |
| ForOfStatement(path, { |
| file |
| }) { |
| const { |
| node |
| } = path; |
| if (!node.await) return; |
| const build = (0, _forAwait.default)(path, { |
| getAsyncIterator: file.addHelper("asyncIterator") |
| }); |
| const { |
| declar, |
| loop |
| } = build; |
| const block = loop.body; |
| path.ensureBlock(); |
| |
| if (declar) { |
| block.body.push(declar); |
| } |
| |
| block.body = block.body.concat(node.body.body); |
| |
| _core().types.inherits(loop, node); |
| |
| _core().types.inherits(loop.body, node.body); |
| |
| if (build.replaceParent) { |
| path.parentPath.replaceWithMultiple(build.node); |
| } else { |
| path.replaceWithMultiple(build.node); |
| } |
| } |
| |
| }; |
| const visitor = { |
| Function(path, state) { |
| if (!path.node.async) return; |
| path.traverse(forAwaitVisitor, state); |
| if (!path.node.generator) return; |
| path.traverse(yieldStarVisitor, state); |
| (0, _helperRemapAsyncToGenerator().default)(path, { |
| wrapAsync: state.addHelper("wrapAsyncGenerator"), |
| wrapAwait: state.addHelper("awaitAsyncGenerator") |
| }); |
| } |
| |
| }; |
| return { |
| name: "proposal-async-generator-functions", |
| inherits: _pluginSyntaxAsyncGenerators().default, |
| visitor: { |
| Program(path, state) { |
| path.traverse(visitor, state); |
| } |
| |
| } |
| }; |
| }); |
| |
| exports.default = _default; |