|                                                                                                               |  | /** * @fileoverview Shared functions to work with configs. * @author Nicholas C. Zakas */
"use strict";
//-----------------------------------------------------------------------------
// Functions
//-----------------------------------------------------------------------------
/** * Parses a ruleId into its plugin and rule parts. * @param {string} ruleId The rule ID to parse. * @returns {{pluginName:string,ruleName:string}} The plugin and rule *      parts of the ruleId; */function parseRuleId(ruleId) {    let pluginName, ruleName;
    // distinguish between core rules and plugin rules
    if (ruleId.includes("/")) {
        // mimic scoped npm packages
        if (ruleId.startsWith("@")) {            pluginName = ruleId.slice(0, ruleId.lastIndexOf("/"));        } else {            pluginName = ruleId.slice(0, ruleId.indexOf("/"));        }
        ruleName = ruleId.slice(pluginName.length + 1);    } else {        pluginName = "@";        ruleName = ruleId;    }
    return {        pluginName,        ruleName    };}
/** * Retrieves a rule instance from a given config based on the ruleId. * @param {string} ruleId The rule ID to look for. * @param {FlatConfig} config The config to search. * @returns {import("../shared/types").Rule|undefined} The rule if found *      or undefined if not. */function getRuleFromConfig(ruleId, config) {
    const { pluginName, ruleName } = parseRuleId(ruleId);
    const plugin = config.plugins && config.plugins[pluginName];    let rule = plugin && plugin.rules && plugin.rules[ruleName];
    // normalize function rules into objects
    if (rule && typeof rule === "function") {        rule = {            create: rule        };    }
    return rule;}
/** * Gets a complete options schema for a rule. * @param {{create: Function, schema: (Array|null)}} rule A new-style rule object * @returns {Object} JSON Schema for the rule's options. */function getRuleOptionsSchema(rule) {
    if (!rule) {        return null;    }
    const schema = rule.schema || rule.meta && rule.meta.schema;
    if (Array.isArray(schema)) {        if (schema.length) {            return {                type: "array",                items: schema,                minItems: 0,                maxItems: schema.length            };        }        return {            type: "array",            minItems: 0,            maxItems: 0        };
    }
    // Given a full schema, leave it alone
    return schema || null;}
//-----------------------------------------------------------------------------
// Exports
//-----------------------------------------------------------------------------
module.exports = {    parseRuleId,    getRuleFromConfig,    getRuleOptionsSchema};
 |