summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/lib/config/config-cache.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/eslint/lib/config/config-cache.js')
-rw-r--r--tools/node_modules/eslint/lib/config/config-cache.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/tools/node_modules/eslint/lib/config/config-cache.js b/tools/node_modules/eslint/lib/config/config-cache.js
new file mode 100644
index 0000000000..07436a87c8
--- /dev/null
+++ b/tools/node_modules/eslint/lib/config/config-cache.js
@@ -0,0 +1,130 @@
+/**
+ * @fileoverview Responsible for caching config files
+ * @author Sylvan Mably
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Helpers
+//------------------------------------------------------------------------------
+
+/**
+ * Get a string hash for a config vector
+ * @param {Array<Object>} vector config vector to hash
+ * @returns {string} hash of the vector values
+ * @private
+ */
+function hash(vector) {
+ return JSON.stringify(vector);
+}
+
+//------------------------------------------------------------------------------
+// API
+//------------------------------------------------------------------------------
+
+/**
+ * Configuration caching class
+ */
+module.exports = class ConfigCache {
+
+ constructor() {
+ this.configFullNameCache = new Map();
+ this.localHierarchyCache = new Map();
+ this.mergedVectorCache = new Map();
+ this.mergedCache = new Map();
+ }
+
+ /**
+ * Gets a config object from the cache for the specified config file path.
+ * @param {string} configFullName the name of the configuration as used in the eslint config(e.g. 'plugin:node/recommended'),
+ * or the absolute path to a config file. This should uniquely identify a config.
+ * @returns {Object|null} config object, if found in the cache, otherwise null
+ * @private
+ */
+ getConfig(configFullName) {
+ return this.configFullNameCache.get(configFullName);
+ }
+
+ /**
+ * Sets a config object in the cache for the specified config file path.
+ * @param {string} configFullName the name of the configuration as used in the eslint config(e.g. 'plugin:node/recommended'),
+ * or the absolute path to a config file. This should uniquely identify a config.
+ * @param {Object} config the config object to add to the cache
+ * @returns {void}
+ * @private
+ */
+ setConfig(configFullName, config) {
+ this.configFullNameCache.set(configFullName, config);
+ }
+
+ /**
+ * Gets a list of hierarchy-local config objects that apply to the specified directory.
+ * @param {string} directory the path to the directory
+ * @returns {Object[]|null} a list of config objects, if found in the cache, otherwise null
+ * @private
+ */
+ getHierarchyLocalConfigs(directory) {
+ return this.localHierarchyCache.get(directory);
+ }
+
+ /**
+ * For each of the supplied parent directories, sets the list of config objects for that directory to the
+ * appropriate subset of the supplied parent config objects.
+ * @param {string[]} parentDirectories a list of parent directories to add to the config cache
+ * @param {Object[]} parentConfigs a list of config objects that apply to the lowest directory in parentDirectories
+ * @returns {void}
+ * @private
+ */
+ setHierarchyLocalConfigs(parentDirectories, parentConfigs) {
+ parentDirectories.forEach((localConfigDirectory, i) => {
+ const directoryParentConfigs = parentConfigs.slice(0, parentConfigs.length - i);
+
+ this.localHierarchyCache.set(localConfigDirectory, directoryParentConfigs);
+ });
+ }
+
+ /**
+ * Gets a merged config object corresponding to the supplied vector.
+ * @param {Array<Object>} vector the vector to find a merged config for
+ * @returns {Object|null} a merged config object, if found in the cache, otherwise null
+ * @private
+ */
+ getMergedVectorConfig(vector) {
+ return this.mergedVectorCache.get(hash(vector));
+ }
+
+ /**
+ * Sets a merged config object in the cache for the supplied vector.
+ * @param {Array<Object>} vector the vector to save a merged config for
+ * @param {Object} config the merged config object to add to the cache
+ * @returns {void}
+ * @private
+ */
+ setMergedVectorConfig(vector, config) {
+ this.mergedVectorCache.set(hash(vector), config);
+ }
+
+ /**
+ * Gets a merged config object corresponding to the supplied vector, including configuration options from outside
+ * the vector.
+ * @param {Array<Object>} vector the vector to find a merged config for
+ * @returns {Object|null} a merged config object, if found in the cache, otherwise null
+ * @private
+ */
+ getMergedConfig(vector) {
+ return this.mergedCache.get(hash(vector));
+ }
+
+ /**
+ * Sets a merged config object in the cache for the supplied vector, including configuration options from outside
+ * the vector.
+ * @param {Array<Object>} vector the vector to save a merged config for
+ * @param {Object} config the merged config object to add to the cache
+ * @returns {void}
+ * @private
+ */
+ setMergedConfig(vector, config) {
+ this.mergedCache.set(hash(vector), config);
+ }
+};