| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- 'use strict';
 
- const {ReferenceTracker} = require('@eslint-community/eslint-utils');
 
- const createTraceMap = (object, type) => {
 
- 	let map = {[type]: true};
 
- 	const path = object.split('.').reverse();
 
- 	for (const name of path) {
 
- 		map = {[name]: map};
 
- 	}
 
- 	return map;
 
- };
 
- class GlobalReferenceTracker {
 
- 	#traceMap = {};
 
- 	#filter;
 
- 	#handle;
 
- 	constructor({
 
- 		object,
 
- 		objects = [object],
 
- 		filter,
 
- 		handle,
 
- 		type = ReferenceTracker.READ,
 
- 	}) {
 
- 		for (const object of objects) {
 
- 			Object.assign(this.#traceMap, createTraceMap(object, type));
 
- 		}
 
- 		this.#filter = filter;
 
- 		this.#handle = handle;
 
- 	}
 
- 	* track(globalScope) {
 
- 		const tracker = new ReferenceTracker(globalScope);
 
- 		for (const reference of tracker.iterateGlobalReferences(this.#traceMap)) {
 
- 			if (this.#filter && !this.#filter(reference)) {
 
- 				continue;
 
- 			}
 
- 			const problems = this.#handle(reference);
 
- 			if (!problems) {
 
- 				continue;
 
- 			}
 
- 			if (problems[Symbol.iterator]) {
 
- 				yield * problems;
 
- 			} else {
 
- 				yield problems;
 
- 			}
 
- 		}
 
- 	}
 
- 	createListeners(context) {
 
- 		return {
 
- 			'Program:exit': () => this.track(context.getScope()),
 
- 		};
 
- 	}
 
- }
 
- Object.assign(GlobalReferenceTracker, {
 
- 	READ: ReferenceTracker.READ,
 
- 	CALL: ReferenceTracker.CALL,
 
- 	CONSTRUCT: ReferenceTracker.CONSTRUCT,
 
- });
 
- module.exports = {
 
- 	GlobalReferenceTracker,
 
- };
 
 
  |