You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					91 lines
				
				2.7 KiB
			
		
		
			
		
	
	
					91 lines
				
				2.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = void 0;
							 | 
						||
| 
								 | 
							
								var _helperPluginUtils = require("@babel/helper-plugin-utils");
							 | 
						||
| 
								 | 
							
								var _helperRemapAsyncToGenerator = require("@babel/helper-remap-async-to-generator");
							 | 
						||
| 
								 | 
							
								var _pluginSyntaxAsyncGenerators = require("@babel/plugin-syntax-async-generators");
							 | 
						||
| 
								 | 
							
								var _core = require("@babel/core");
							 | 
						||
| 
								 | 
							
								var _forAwait = require("./for-await");
							 | 
						||
| 
								 | 
							
								var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
							 | 
						||
| 
								 | 
							
								var _default = (0, _helperPluginUtils.declare)(api => {
							 | 
						||
| 
								 | 
							
								  api.assertVersion(7);
							 | 
						||
| 
								 | 
							
								  const yieldStarVisitor = _core.traverse.visitors.merge([{
							 | 
						||
| 
								 | 
							
								    ArrowFunctionExpression(path) {
							 | 
						||
| 
								 | 
							
								      path.skip();
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    YieldExpression({
							 | 
						||
| 
								 | 
							
								      node
							 | 
						||
| 
								 | 
							
								    }, state) {
							 | 
						||
| 
								 | 
							
								      if (!node.delegate) return;
							 | 
						||
| 
								 | 
							
								      const asyncIter = _core.types.callExpression(state.addHelper("asyncIterator"), [node.argument]);
							 | 
						||
| 
								 | 
							
								      node.argument = _core.types.callExpression(state.addHelper("asyncGeneratorDelegate"), [asyncIter, state.addHelper("awaitAsyncGenerator")]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, _helperEnvironmentVisitor.default]);
							 | 
						||
| 
								 | 
							
								  const forAwaitVisitor = _core.traverse.visitors.merge([{
							 | 
						||
| 
								 | 
							
								    ArrowFunctionExpression(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);
							 | 
						||
| 
								 | 
							
								        if (path.node.body.body.length) {
							 | 
						||
| 
								 | 
							
								          block.body.push(_core.types.blockStatement(path.node.body.body));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        block.body.push(...path.node.body.body);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      _core.types.inherits(loop, node);
							 | 
						||
| 
								 | 
							
								      _core.types.inherits(loop.body, node.body);
							 | 
						||
| 
								 | 
							
								      const p = build.replaceParent ? path.parentPath : path;
							 | 
						||
| 
								 | 
							
								      p.replaceWithMultiple(build.node);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      p.scope.parent.crawl();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, _helperEnvironmentVisitor.default]);
							 | 
						||
| 
								 | 
							
								  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;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=index.js.map
							 |