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
						
					
					
				| "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
 |