Update ESLint-related packages

R=jacktfranklin@chromium.org

No-Presubmit: True
Bug: none
Change-Id: I52dc24b12e350787085c5e3d131cface7ea87142
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3060705
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Paul Lewis <aerotwist@chromium.org>
diff --git a/node_modules/eslint/lib/config/flat-config-array.js b/node_modules/eslint/lib/config/flat-config-array.js
new file mode 100644
index 0000000..ecf396a
--- /dev/null
+++ b/node_modules/eslint/lib/config/flat-config-array.js
@@ -0,0 +1,125 @@
+/**
+ * @fileoverview Flat Config Array
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+//-----------------------------------------------------------------------------
+// Requirements
+//-----------------------------------------------------------------------------
+
+const { ConfigArray, ConfigArraySymbol } = require("@humanwhocodes/config-array");
+const { flatConfigSchema } = require("./flat-config-schema");
+const { RuleValidator } = require("./rule-validator");
+const { defaultConfig } = require("./default-config");
+const recommendedConfig = require("../../conf/eslint-recommended");
+const allConfig = require("../../conf/eslint-all");
+
+//-----------------------------------------------------------------------------
+// Helpers
+//-----------------------------------------------------------------------------
+
+const ruleValidator = new RuleValidator();
+
+/**
+ * Splits a plugin identifier in the form a/b/c into two parts: a/b and c.
+ * @param {string} identifier The identifier to parse.
+ * @returns {{objectName: string, pluginName: string}} The parts of the plugin
+ *      name.
+ */
+function splitPluginIdentifier(identifier) {
+    const parts = identifier.split("/");
+
+    return {
+        objectName: parts.pop(),
+        pluginName: parts.join("/")
+    };
+}
+
+//-----------------------------------------------------------------------------
+// Exports
+//-----------------------------------------------------------------------------
+
+/**
+ * Represents an array containing configuration information for ESLint.
+ */
+class FlatConfigArray extends ConfigArray {
+
+    /**
+     * Creates a new instance.
+     * @param {*[]} configs An array of configuration information.
+     * @param {{basePath: string, baseConfig: FlatConfig}} options The options
+     *      to use for the config array instance.
+     */
+    constructor(configs, { basePath, baseConfig = defaultConfig }) {
+        super(configs, {
+            basePath,
+            schema: flatConfigSchema
+        });
+
+        this.unshift(baseConfig);
+    }
+
+    /* eslint-disable class-methods-use-this */
+    /**
+     * Replaces a config with another config to allow us to put strings
+     * in the config array that will be replaced by objects before
+     * normalization.
+     * @param {Object} config The config to preprocess.
+     * @returns {Object} The preprocessed config.
+     */
+    [ConfigArraySymbol.preprocessConfig](config) {
+        if (config === "eslint:recommended") {
+            return recommendedConfig;
+        }
+
+        if (config === "eslint:all") {
+            return allConfig;
+        }
+
+        return config;
+    }
+
+    /**
+     * Finalizes the config by replacing plugin references with their objects
+     * and validating rule option schemas.
+     * @param {Object} config The config to finalize.
+     * @returns {Object} The finalized config.
+     * @throws {TypeError} If the config is invalid.
+     */
+    [ConfigArraySymbol.finalizeConfig](config) {
+
+        const { plugins, languageOptions, processor } = config;
+
+        // Check parser value
+        if (languageOptions && languageOptions.parser && typeof languageOptions.parser === "string") {
+            const { pluginName, objectName: parserName } = splitPluginIdentifier(languageOptions.parser);
+
+            if (!plugins || !plugins[pluginName] || !plugins[pluginName].parsers || !plugins[pluginName].parsers[parserName]) {
+                throw new TypeError(`Key "parser": Could not find "${parserName}" in plugin "${pluginName}".`);
+            }
+
+            languageOptions.parser = plugins[pluginName].parsers[parserName];
+        }
+
+        // Check processor value
+        if (processor && typeof processor === "string") {
+            const { pluginName, objectName: processorName } = splitPluginIdentifier(processor);
+
+            if (!plugins || !plugins[pluginName] || !plugins[pluginName].processors || !plugins[pluginName].processors[processorName]) {
+                throw new TypeError(`Key "processor": Could not find "${processorName}" in plugin "${pluginName}".`);
+            }
+
+            config.processor = plugins[pluginName].processors[processorName];
+        }
+
+        ruleValidator.validate(config);
+
+        return config;
+    }
+    /* eslint-enable class-methods-use-this */
+
+}
+
+exports.FlatConfigArray = FlatConfigArray;