{"version":3,"names":["Definition","PatternVisitor","OriginalPatternVisitor","Referencer","OriginalReferencer","Scope","ScopeManager","require","getKeys","fallback","visitorKeysMap","getVisitorValues","nodeType","client","FLOW_FLIPPED_ALIAS_KEYS","VISITOR_KEYS","getTypesInfo","flowFlippedAliasKeys","concat","Object","entries","reduce","acc","key","value","includes","propertyTypes","callProperties","type","values","indexers","properties","types","params","argument","elementType","qualification","rest","returnType","typeAnnotation","typeParameters","id","ArrayPattern","node","elements","forEach","visit","ObjectPattern","_client","WeakMap","constructor","options","scopeManager","_classPrivateFieldInitSpec","writable","_classPrivateFieldSet","visitPattern","callback","_checkIdentifierOrVisit","left","processRightHandNodes","visitor","rightHandNodes","visitClass","_visitArray","decorators","typeParamScope","_nestTypeParamScope","_visitTypeAnnotation","implements","superTypeParameters","close","visitFunction","visitProperty","_node$value","InterfaceDeclaration","_createScopeVariable","extends","body","TypeAlias","right","ClassProperty","_visitClassProperty","ClassPrivateProperty","PropertyDefinition","ClassPrivateMethod","MethodDefinition","DeclareModule","_visitDeclareX","DeclareFunction","DeclareVariable","DeclareClass","OptionalMemberExpression","MemberExpression","name","currentScope","variableScope","__define","parentScope","__currentScope","scope","__nestScope","j","length","apply","arguments","Array","isArray","visitorValues","_classPrivateFieldGet","i","visitorValue","propertyType","nodeProperty","k","loopPropertyNode","l","nodeList","module","exports","analyzeScope","ast","parserOptions","_parserOptions$ecmaFe","ignoreEval","optimistic","directive","nodejsScope","sourceType","ecmaFeatures","globalReturn","impliedStrict","ecmaVersion","childVisitorKeys","getVisitorKeys","referencer"],"sources":["../src/analyze-scope.cjs"],"sourcesContent":["const {\n Definition,\n PatternVisitor: OriginalPatternVisitor,\n Referencer: OriginalReferencer,\n Scope,\n ScopeManager,\n} = process.env.BABEL_8_BREAKING\n ? require(\"eslint-scope\")\n : require(\"@nicolo-ribaudo/eslint-scope-5-internals\");\nconst { getKeys: fallback } = require(\"eslint-visitor-keys\");\n\nlet visitorKeysMap;\nfunction getVisitorValues(nodeType, client) {\n if (visitorKeysMap) return visitorKeysMap[nodeType];\n\n const { FLOW_FLIPPED_ALIAS_KEYS, VISITOR_KEYS } = client.getTypesInfo();\n\n const flowFlippedAliasKeys = FLOW_FLIPPED_ALIAS_KEYS.concat([\n \"ArrayPattern\",\n \"ClassDeclaration\",\n \"ClassExpression\",\n \"FunctionDeclaration\",\n \"FunctionExpression\",\n \"Identifier\",\n \"ObjectPattern\",\n \"RestElement\",\n ]);\n\n visitorKeysMap = Object.entries(VISITOR_KEYS).reduce((acc, [key, value]) => {\n if (!flowFlippedAliasKeys.includes(value)) {\n acc[key] = value;\n }\n return acc;\n }, {});\n\n return visitorKeysMap[nodeType];\n}\n\nconst propertyTypes = {\n // loops\n callProperties: { type: \"loop\", values: [\"value\"] },\n indexers: { type: \"loop\", values: [\"key\", \"value\"] },\n properties: { type: \"loop\", values: [\"argument\", \"value\"] },\n types: { type: \"loop\" },\n params: { type: \"loop\" },\n // single property\n argument: { type: \"single\" },\n elementType: { type: \"single\" },\n qualification: { type: \"single\" },\n rest: { type: \"single\" },\n returnType: { type: \"single\" },\n // others\n typeAnnotation: { type: \"typeAnnotation\" },\n typeParameters: { type: \"typeParameters\" },\n id: { type: \"id\" },\n};\n\nclass PatternVisitor extends OriginalPatternVisitor {\n ArrayPattern(node) {\n node.elements.forEach(this.visit, this);\n }\n\n ObjectPattern(node) {\n node.properties.forEach(this.visit, this);\n }\n}\n\nclass Referencer extends OriginalReferencer {\n #client;\n\n constructor(options, scopeManager, client) {\n super(options, scopeManager);\n this.#client = client;\n }\n\n // inherits.\n visitPattern(node, options, callback) {\n if (!node) {\n return;\n }\n\n // Visit type annotations.\n this._checkIdentifierOrVisit(node.typeAnnotation);\n if (node.type === \"AssignmentPattern\") {\n this._checkIdentifierOrVisit(node.left.typeAnnotation);\n }\n\n // Overwrite `super.visitPattern(node, options, callback)` in order to not visit `ArrayPattern#typeAnnotation` and `ObjectPattern#typeAnnotation`.\n if (typeof options === \"function\") {\n callback = options;\n options = { processRightHandNodes: false };\n }\n\n const visitor = new PatternVisitor(this.options, node, callback);\n visitor.visit(node);\n\n // Process the right hand nodes recursively.\n if (options.processRightHandNodes) {\n visitor.rightHandNodes.forEach(this.visit, this);\n }\n }\n\n // inherits.\n visitClass(node) {\n // Decorators.\n this._visitArray(node.decorators);\n\n // Flow type parameters.\n const typeParamScope = this._nestTypeParamScope(node);\n\n // Flow super types.\n this._visitTypeAnnotation(node.implements);\n this._visitTypeAnnotation(\n node.superTypeParameters && node.superTypeParameters.params,\n );\n\n // Basic.\n super.visitClass(node);\n\n // Close the type parameter scope.\n if (typeParamScope) {\n this.close(node);\n }\n }\n\n // inherits.\n visitFunction(node) {\n const typeParamScope = this._nestTypeParamScope(node);\n\n // Flow return types.\n this._checkIdentifierOrVisit(node.returnType);\n\n // Basic.\n super.visitFunction(node);\n\n // Close the type parameter scope.\n if (typeParamScope) {\n this.close(node);\n }\n }\n\n // inherits.\n visitProperty(node) {\n if (node.value?.type === \"TypeCastExpression\") {\n this._visitTypeAnnotation(node.value);\n }\n this._visitArray(node.decorators);\n super.visitProperty(node);\n }\n\n InterfaceDeclaration(node) {\n this._createScopeVariable(node, node.id);\n\n const typeParamScope = this._nestTypeParamScope(node);\n\n // TODO: Handle mixins\n this._visitArray(node.extends);\n this.visit(node.body);\n\n if (typeParamScope) {\n this.close(node);\n }\n }\n\n TypeAlias(node) {\n this._createScopeVariable(node, node.id);\n\n const typeParamScope = this._nestTypeParamScope(node);\n\n this.visit(node.right);\n\n if (typeParamScope) {\n this.close(node);\n }\n }\n\n ClassProperty(node) {\n this._visitClassProperty(node);\n }\n\n ClassPrivateProperty(node) {\n this._visitClassProperty(node);\n }\n\n PropertyDefinition(node) {\n this._visitClassProperty(node);\n }\n\n // TODO: Update to visit type annotations when TypeScript/Flow support this syntax.\n ClassPrivateMethod(node) {\n super.MethodDefinition(node);\n }\n\n DeclareModule(node) {\n this._visitDeclareX(node);\n }\n\n DeclareFunction(node) {\n this._visitDeclareX(node);\n }\n\n DeclareVariable(node) {\n this._visitDeclareX(node);\n }\n\n DeclareClass(node) {\n this._visitDeclareX(node);\n }\n\n // visit OptionalMemberExpression as a MemberExpression.\n OptionalMemberExpression(node) {\n super.MemberExpression(node);\n }\n\n _visitClassProperty(node) {\n this._visitTypeAnnotation(node.typeAnnotation);\n this.visitProperty(node);\n }\n\n _visitDeclareX(node) {\n if (node.id) {\n this._createScopeVariable(node, node.id);\n }\n\n const typeParamScope = this._nestTypeParamScope(node);\n if (typeParamScope) {\n this.close(node);\n }\n }\n\n _createScopeVariable(node, name) {\n this.currentScope().variableScope.__define(\n name,\n new Definition(\"Variable\", name, node, null, null, null),\n );\n }\n\n _nestTypeParamScope(node) {\n if (!node.typeParameters) {\n return null;\n }\n\n const parentScope = this.scopeManager.__currentScope;\n const scope = new Scope(\n this.scopeManager,\n \"type-parameters\",\n parentScope,\n node,\n false,\n );\n\n this.scopeManager.__nestScope(scope);\n for (let j = 0; j < node.typeParameters.params.length; j++) {\n const name = node.typeParameters.params[j];\n scope.__define(name, new Definition(\"TypeParameter\", name, name));\n if (name.typeAnnotation) {\n this._checkIdentifierOrVisit(name);\n }\n }\n scope.__define = function () {\n return parentScope.__define.apply(parentScope, arguments);\n };\n\n return scope;\n }\n\n _visitTypeAnnotation(node) {\n if (!node) {\n return;\n }\n if (Array.isArray(node)) {\n node.forEach(this._visitTypeAnnotation, this);\n return;\n }\n\n // get property to check (params, id, etc...)\n const visitorValues = getVisitorValues(node.type, this.#client);\n if (!visitorValues) {\n return;\n }\n\n // can have multiple properties\n for (let i = 0; i < visitorValues.length; i++) {\n const visitorValue = visitorValues[i];\n const propertyType = propertyTypes[visitorValue];\n const nodeProperty = node[visitorValue];\n // check if property or type is defined\n if (propertyType == null || nodeProperty == null) {\n continue;\n }\n if (propertyType.type === \"loop\") {\n for (let j = 0; j < nodeProperty.length; j++) {\n if (Array.isArray(propertyType.values)) {\n for (let k = 0; k < propertyType.values.length; k++) {\n const loopPropertyNode = nodeProperty[j][propertyType.values[k]];\n if (loopPropertyNode) {\n this._checkIdentifierOrVisit(loopPropertyNode);\n }\n }\n } else {\n this._checkIdentifierOrVisit(nodeProperty[j]);\n }\n }\n } else if (propertyType.type === \"single\") {\n this._checkIdentifierOrVisit(nodeProperty);\n } else if (propertyType.type === \"typeAnnotation\") {\n this._visitTypeAnnotation(node.typeAnnotation);\n } else if (propertyType.type === \"typeParameters\") {\n for (let l = 0; l < node.typeParameters.params.length; l++) {\n this._checkIdentifierOrVisit(node.typeParameters.params[l]);\n }\n } else if (propertyType.type === \"id\") {\n if (node.id.type === \"Identifier\") {\n this._checkIdentifierOrVisit(node.id);\n } else {\n this._visitTypeAnnotation(node.id);\n }\n }\n }\n }\n\n _checkIdentifierOrVisit(node) {\n if (node?.typeAnnotation) {\n this._visitTypeAnnotation(node.typeAnnotation);\n } else if (node?.type === \"Identifier\") {\n this.visit(node);\n } else {\n this._visitTypeAnnotation(node);\n }\n }\n\n _visitArray(nodeList) {\n if (nodeList) {\n for (const node of nodeList) {\n this.visit(node);\n }\n }\n }\n}\n\nmodule.exports = function analyzeScope(ast, parserOptions, client) {\n const options = {\n ignoreEval: true,\n optimistic: false,\n directive: false,\n nodejsScope:\n ast.sourceType === \"script\" &&\n parserOptions.ecmaFeatures?.globalReturn === true,\n impliedStrict: false,\n sourceType: ast.sourceType,\n ecmaVersion: parserOptions.ecmaVersion,\n fallback,\n };\n\n options.childVisitorKeys = client.getVisitorKeys();\n\n const scopeManager = new ScopeManager(options);\n const referencer = new Referencer(options, scopeManager, client);\n\n referencer.visit(ast);\n\n return scopeManager;\n};\n"],"mappings":"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"}