|                                                                                                                   |  | /** * @fileoverview `Map` to load rules lazily. * @author Toru Nagashima <https://github.com/mysticatea>
 */"use strict";
const debug = require("debug")("eslint:rules");
/** @typedef {import("./types").Rule} Rule */
/** * The `Map` object that loads each rule when it's accessed. * @example * const rules = new LazyLoadingRuleMap([ *     ["eqeqeq", () => require("eqeqeq")], *     ["semi", () => require("semi")], *     ["no-unused-vars", () => require("no-unused-vars")] * ]); * * rules.get("semi"); // call `() => require("semi")` here.
 * * @extends {Map<string, () => Rule>} */class LazyLoadingRuleMap extends Map {
    /**     * Initialize this map.     * @param {Array<[string, function(): Rule]>} loaders The rule loaders.     */    constructor(loaders) {        let remaining = loaders.length;
        super(            debug.enabled                ? loaders.map(([ruleId, load]) => {                    let cache = null;
                    return [                        ruleId,                        () => {                            if (!cache) {                                debug("Loading rule %o (remaining=%d)", ruleId, --remaining);                                cache = load();                            }                            return cache;                        }                    ];                })                : loaders        );
        // `super(...iterable)` uses `this.set()`, so disable it here.
        Object.defineProperty(LazyLoadingRuleMap.prototype, "set", {            configurable: true,            value: void 0        });    }
    /**     * Get a rule.     * Each rule will be loaded on the first access.     * @param {string} ruleId The rule ID to get.     * @returns {Rule|undefined} The rule.     */    get(ruleId) {        const load = super.get(ruleId);
        return load && load();    }
    /**     * Iterate rules.     * @returns {IterableIterator<Rule>} Rules.     */    *values() {        for (const load of super.values()) {            yield load();        }    }
    /**     * Iterate rules.     * @returns {IterableIterator<[string, Rule]>} Rules.     */    *entries() {        for (const [ruleId, load] of super.entries()) {            yield [ruleId, load()];        }    }
    /**     * Call a function with each rule.     * @param {Function} callbackFn The callback function.     * @param {any} [thisArg] The object to pass to `this` of the callback function.     * @returns {void}     */    forEach(callbackFn, thisArg) {        for (const [ruleId, load] of super.entries()) {            callbackFn.call(thisArg, load(), ruleId, this);        }    }}
// Forbid mutation.
Object.defineProperties(LazyLoadingRuleMap.prototype, {    clear: { configurable: true, value: void 0 },    delete: { configurable: true, value: void 0 },    [Symbol.iterator]: {        configurable: true,        writable: true,        value: LazyLoadingRuleMap.prototype.entries    }});
module.exports = { LazyLoadingRuleMap };
 |