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.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							1.8 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.default = void 0;
 | |
| 
 | |
| var _helperPluginUtils = require("@babel/helper-plugin-utils");
 | |
| 
 | |
| var _core = require("@babel/core");
 | |
| 
 | |
| function getName(key) {
 | |
|   if (_core.types.isIdentifier(key)) {
 | |
|     return key.name;
 | |
|   }
 | |
| 
 | |
|   return key.value.toString();
 | |
| }
 | |
| 
 | |
| var _default = (0, _helperPluginUtils.declare)(api => {
 | |
|   api.assertVersion(7);
 | |
|   return {
 | |
|     name: "transform-duplicate-keys",
 | |
|     visitor: {
 | |
|       ObjectExpression(path) {
 | |
|         const {
 | |
|           node
 | |
|         } = path;
 | |
|         const plainProps = node.properties.filter(prop => !_core.types.isSpreadElement(prop) && !prop.computed);
 | |
|         const alreadySeenData = Object.create(null);
 | |
|         const alreadySeenGetters = Object.create(null);
 | |
|         const alreadySeenSetters = Object.create(null);
 | |
| 
 | |
|         for (const prop of plainProps) {
 | |
|           const name = getName(prop.key);
 | |
|           let isDuplicate = false;
 | |
| 
 | |
|           switch (prop.kind) {
 | |
|             case "get":
 | |
|               if (alreadySeenData[name] || alreadySeenGetters[name]) {
 | |
|                 isDuplicate = true;
 | |
|               }
 | |
| 
 | |
|               alreadySeenGetters[name] = true;
 | |
|               break;
 | |
| 
 | |
|             case "set":
 | |
|               if (alreadySeenData[name] || alreadySeenSetters[name]) {
 | |
|                 isDuplicate = true;
 | |
|               }
 | |
| 
 | |
|               alreadySeenSetters[name] = true;
 | |
|               break;
 | |
| 
 | |
|             default:
 | |
|               if (alreadySeenData[name] || alreadySeenGetters[name] || alreadySeenSetters[name]) {
 | |
|                 isDuplicate = true;
 | |
|               }
 | |
| 
 | |
|               alreadySeenData[name] = true;
 | |
|           }
 | |
| 
 | |
|           if (isDuplicate) {
 | |
|             prop.computed = true;
 | |
|             prop.key = _core.types.stringLiteral(name);
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|     }
 | |
|   };
 | |
| });
 | |
| 
 | |
| exports.default = _default; |