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.
		
		
		
		
		
			
		
			
				
					65 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					65 lines
				
				2.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = void 0;
							 | 
						||
| 
								 | 
							
								var _helperPluginUtils = require("@babel/helper-plugin-utils");
							 | 
						||
| 
								 | 
							
								var _pluginSyntaxClassStaticBlock = require("@babel/plugin-syntax-class-static-block");
							 | 
						||
| 
								 | 
							
								var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin");
							 | 
						||
| 
								 | 
							
								function generateUid(scope, denyList) {
							 | 
						||
| 
								 | 
							
								  const name = "";
							 | 
						||
| 
								 | 
							
								  let uid;
							 | 
						||
| 
								 | 
							
								  let i = 1;
							 | 
						||
| 
								 | 
							
								  do {
							 | 
						||
| 
								 | 
							
								    uid = scope._generateUid(name, i);
							 | 
						||
| 
								 | 
							
								    i++;
							 | 
						||
| 
								 | 
							
								  } while (denyList.has(uid));
							 | 
						||
| 
								 | 
							
								  return uid;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								var _default = (0, _helperPluginUtils.declare)(({
							 | 
						||
| 
								 | 
							
								  types: t,
							 | 
						||
| 
								 | 
							
								  template,
							 | 
						||
| 
								 | 
							
								  assertVersion
							 | 
						||
| 
								 | 
							
								}) => {
							 | 
						||
| 
								 | 
							
								  assertVersion("^7.12.0");
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    name: "proposal-class-static-block",
							 | 
						||
| 
								 | 
							
								    inherits: _pluginSyntaxClassStaticBlock.default,
							 | 
						||
| 
								 | 
							
								    pre() {
							 | 
						||
| 
								 | 
							
								      (0, _helperCreateClassFeaturesPlugin.enableFeature)(this.file, _helperCreateClassFeaturesPlugin.FEATURES.staticBlocks, false);
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    visitor: {
							 | 
						||
| 
								 | 
							
								      ClassBody(classBody) {
							 | 
						||
| 
								 | 
							
								        const {
							 | 
						||
| 
								 | 
							
								          scope
							 | 
						||
| 
								 | 
							
								        } = classBody;
							 | 
						||
| 
								 | 
							
								        const privateNames = new Set();
							 | 
						||
| 
								 | 
							
								        const body = classBody.get("body");
							 | 
						||
| 
								 | 
							
								        for (const path of body) {
							 | 
						||
| 
								 | 
							
								          if (path.isPrivate()) {
							 | 
						||
| 
								 | 
							
								            privateNames.add(path.get("key.id").node.name);
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        for (const path of body) {
							 | 
						||
| 
								 | 
							
								          if (!path.isStaticBlock()) continue;
							 | 
						||
| 
								 | 
							
								          const staticBlockPrivateId = generateUid(scope, privateNames);
							 | 
						||
| 
								 | 
							
								          privateNames.add(staticBlockPrivateId);
							 | 
						||
| 
								 | 
							
								          const staticBlockRef = t.privateName(t.identifier(staticBlockPrivateId));
							 | 
						||
| 
								 | 
							
								          let replacement;
							 | 
						||
| 
								 | 
							
								          const blockBody = path.node.body;
							 | 
						||
| 
								 | 
							
								          if (blockBody.length === 1 && t.isExpressionStatement(blockBody[0])) {
							 | 
						||
| 
								 | 
							
								            replacement = blockBody[0].expression;
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            replacement = template.expression.ast`(() => { ${blockBody} })()`;
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          path.replaceWith(t.classPrivateProperty(staticBlockRef, replacement, [], true));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = _default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=index.js.map
							 |