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.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							2.0 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
Object.defineProperty(exports, "__esModule", { | 
						|
  value: true | 
						|
}); | 
						|
exports.default = _default; | 
						|
 | 
						|
var _t = require("@babel/types"); | 
						|
 | 
						|
const { | 
						|
  assignmentExpression, | 
						|
  cloneNode, | 
						|
  isIdentifier, | 
						|
  isLiteral, | 
						|
  isMemberExpression, | 
						|
  isPrivateName, | 
						|
  isPureish, | 
						|
  isSuper, | 
						|
  memberExpression, | 
						|
  toComputedKey | 
						|
} = _t; | 
						|
 | 
						|
function getObjRef(node, nodes, scope) { | 
						|
  let ref; | 
						|
 | 
						|
  if (isIdentifier(node)) { | 
						|
    if (scope.hasBinding(node.name)) { | 
						|
      return node; | 
						|
    } else { | 
						|
      ref = node; | 
						|
    } | 
						|
  } else if (isMemberExpression(node)) { | 
						|
    ref = node.object; | 
						|
 | 
						|
    if (isSuper(ref) || isIdentifier(ref) && scope.hasBinding(ref.name)) { | 
						|
      return ref; | 
						|
    } | 
						|
  } else { | 
						|
    throw new Error(`We can't explode this node type ${node["type"]}`); | 
						|
  } | 
						|
 | 
						|
  const temp = scope.generateUidIdentifierBasedOnNode(ref); | 
						|
  scope.push({ | 
						|
    id: temp | 
						|
  }); | 
						|
  nodes.push(assignmentExpression("=", cloneNode(temp), cloneNode(ref))); | 
						|
  return temp; | 
						|
} | 
						|
 | 
						|
function getPropRef(node, nodes, scope) { | 
						|
  const prop = node.property; | 
						|
 | 
						|
  if (isPrivateName(prop)) { | 
						|
    throw new Error("We can't generate property ref for private name, please install `@babel/plugin-proposal-class-properties`"); | 
						|
  } | 
						|
 | 
						|
  const key = toComputedKey(node, prop); | 
						|
  if (isLiteral(key) && isPureish(key)) return key; | 
						|
  const temp = scope.generateUidIdentifierBasedOnNode(prop); | 
						|
  scope.push({ | 
						|
    id: temp | 
						|
  }); | 
						|
  nodes.push(assignmentExpression("=", cloneNode(temp), cloneNode(prop))); | 
						|
  return temp; | 
						|
} | 
						|
 | 
						|
function _default(node, nodes, file, scope, allowedSingleIdent) { | 
						|
  let obj; | 
						|
 | 
						|
  if (isIdentifier(node) && allowedSingleIdent) { | 
						|
    obj = node; | 
						|
  } else { | 
						|
    obj = getObjRef(node, nodes, scope); | 
						|
  } | 
						|
 | 
						|
  let ref, uid; | 
						|
 | 
						|
  if (isIdentifier(node)) { | 
						|
    ref = cloneNode(node); | 
						|
    uid = obj; | 
						|
  } else { | 
						|
    const prop = getPropRef(node, nodes, scope); | 
						|
    const computed = node.computed || isLiteral(prop); | 
						|
    uid = memberExpression(cloneNode(obj), cloneNode(prop), computed); | 
						|
    ref = memberExpression(cloneNode(obj), cloneNode(prop), computed); | 
						|
  } | 
						|
 | 
						|
  return { | 
						|
    uid: uid, | 
						|
    ref: ref | 
						|
  }; | 
						|
} |