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.
		
		
		
		
		
			
		
			
				
					75 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					75 lines
				
				3.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = void 0;
							 | 
						||
| 
								 | 
							
								var _helperPluginUtils = require("@babel/helper-plugin-utils");
							 | 
						||
| 
								 | 
							
								var _helperCompilationTargets = require("@babel/helper-compilation-targets");
							 | 
						||
| 
								 | 
							
								var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
							 | 
						||
| 
								 | 
							
								var _helperFunctionName = require("@babel/helper-function-name");
							 | 
						||
| 
								 | 
							
								var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
							 | 
						||
| 
								 | 
							
								var _core = require("@babel/core");
							 | 
						||
| 
								 | 
							
								var _globals = require("globals");
							 | 
						||
| 
								 | 
							
								var _transformClass = require("./transformClass");
							 | 
						||
| 
								 | 
							
								const getBuiltinClasses = category => Object.keys(_globals[category]).filter(name => /^[A-Z]/.test(name));
							 | 
						||
| 
								 | 
							
								const builtinClasses = new Set([...getBuiltinClasses("builtin"), ...getBuiltinClasses("browser")]);
							 | 
						||
| 
								 | 
							
								var _default = (0, _helperPluginUtils.declare)((api, options) => {
							 | 
						||
| 
								 | 
							
								  var _api$assumption, _api$assumption2, _api$assumption3, _api$assumption4;
							 | 
						||
| 
								 | 
							
								  api.assertVersion(7);
							 | 
						||
| 
								 | 
							
								  const {
							 | 
						||
| 
								 | 
							
								    loose = false
							 | 
						||
| 
								 | 
							
								  } = options;
							 | 
						||
| 
								 | 
							
								  const setClassMethods = (_api$assumption = api.assumption("setClassMethods")) != null ? _api$assumption : loose;
							 | 
						||
| 
								 | 
							
								  const constantSuper = (_api$assumption2 = api.assumption("constantSuper")) != null ? _api$assumption2 : loose;
							 | 
						||
| 
								 | 
							
								  const superIsCallableConstructor = (_api$assumption3 = api.assumption("superIsCallableConstructor")) != null ? _api$assumption3 : loose;
							 | 
						||
| 
								 | 
							
								  const noClassCalls = (_api$assumption4 = api.assumption("noClassCalls")) != null ? _api$assumption4 : loose;
							 | 
						||
| 
								 | 
							
								  const supportUnicodeId = !(0, _helperCompilationTargets.isRequired)("transform-unicode-escapes", api.targets());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const VISITED = new WeakSet();
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    name: "transform-classes",
							 | 
						||
| 
								 | 
							
								    visitor: {
							 | 
						||
| 
								 | 
							
								      ExportDefaultDeclaration(path) {
							 | 
						||
| 
								 | 
							
								        if (!path.get("declaration").isClassDeclaration()) return;
							 | 
						||
| 
								 | 
							
								        (0, _helperSplitExportDeclaration.default)(path);
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      ClassDeclaration(path) {
							 | 
						||
| 
								 | 
							
								        const {
							 | 
						||
| 
								 | 
							
								          node
							 | 
						||
| 
								 | 
							
								        } = path;
							 | 
						||
| 
								 | 
							
								        const ref = node.id || path.scope.generateUidIdentifier("class");
							 | 
						||
| 
								 | 
							
								        path.replaceWith(_core.types.variableDeclaration("let", [_core.types.variableDeclarator(ref, _core.types.toExpression(node))]));
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      ClassExpression(path, state) {
							 | 
						||
| 
								 | 
							
								        const {
							 | 
						||
| 
								 | 
							
								          node
							 | 
						||
| 
								 | 
							
								        } = path;
							 | 
						||
| 
								 | 
							
								        if (VISITED.has(node)) return;
							 | 
						||
| 
								 | 
							
								        const inferred = (0, _helperFunctionName.default)(path, undefined, supportUnicodeId);
							 | 
						||
| 
								 | 
							
								        if (inferred && inferred !== node) {
							 | 
						||
| 
								 | 
							
								          path.replaceWith(inferred);
							 | 
						||
| 
								 | 
							
								          return;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        VISITED.add(node);
							 | 
						||
| 
								 | 
							
								        const [replacedPath] = path.replaceWith((0, _transformClass.default)(path, state.file, builtinClasses, loose, {
							 | 
						||
| 
								 | 
							
								          setClassMethods,
							 | 
						||
| 
								 | 
							
								          constantSuper,
							 | 
						||
| 
								 | 
							
								          superIsCallableConstructor,
							 | 
						||
| 
								 | 
							
								          noClassCalls
							 | 
						||
| 
								 | 
							
								        }, supportUnicodeId));
							 | 
						||
| 
								 | 
							
								        if (replacedPath.isCallExpression()) {
							 | 
						||
| 
								 | 
							
								          (0, _helperAnnotateAsPure.default)(replacedPath);
							 | 
						||
| 
								 | 
							
								          const callee = replacedPath.get("callee");
							 | 
						||
| 
								 | 
							
								          if (callee.isArrowFunctionExpression()) {
							 | 
						||
| 
								 | 
							
								            callee.arrowFunctionToExpression();
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = _default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=index.js.map
							 |