@eslint/config-array
Advanced tools
Comparing version
@@ -394,2 +394,81 @@ // @ts-self-types="./index.d.ts" | ||
/** | ||
* Normalizes a pattern by removing the leading "./" if present. | ||
* @param {string} pattern The pattern to normalize. | ||
* @returns {string} The normalized pattern. | ||
*/ | ||
function normalizePattern(pattern) { | ||
if (isString(pattern)) { | ||
if (pattern.startsWith("./")) { | ||
return pattern.slice(2); | ||
} | ||
if (pattern.startsWith("!./")) { | ||
return `!${pattern.slice(3)}`; | ||
} | ||
} | ||
return pattern; | ||
} | ||
/** | ||
* Checks if a given pattern requires normalization. | ||
* @param {any} pattern The pattern to check. | ||
* @returns {boolean} True if the pattern needs normalization, false otherwise. | ||
* | ||
*/ | ||
function needsPatternNormalization(pattern) { | ||
return ( | ||
isString(pattern) && | ||
(pattern.startsWith("./") || pattern.startsWith("!./")) | ||
); | ||
} | ||
/** | ||
* Normalizes `files` and `ignores` patterns in a config by removing "./" prefixes. | ||
* @param {Object} config The config object to normalize patterns in. | ||
* @returns {Object} The normalized config object. | ||
*/ | ||
function normalizeConfigPatterns(config) { | ||
if (!config) { | ||
return config; | ||
} | ||
let needsNormalization = false; | ||
if (Array.isArray(config.files)) { | ||
needsNormalization = config.files.some(pattern => { | ||
if (Array.isArray(pattern)) { | ||
return pattern.some(needsPatternNormalization); | ||
} | ||
return needsPatternNormalization(pattern); | ||
}); | ||
} | ||
if (!needsNormalization && Array.isArray(config.ignores)) { | ||
needsNormalization = config.ignores.some(needsPatternNormalization); | ||
} | ||
if (!needsNormalization) { | ||
return config; | ||
} | ||
const newConfig = { ...config }; | ||
if (Array.isArray(newConfig.files)) { | ||
newConfig.files = newConfig.files.map(pattern => { | ||
if (Array.isArray(pattern)) { | ||
return pattern.map(normalizePattern); | ||
} | ||
return normalizePattern(pattern); | ||
}); | ||
} | ||
if (Array.isArray(newConfig.ignores)) { | ||
newConfig.ignores = newConfig.ignores.map(normalizePattern); | ||
} | ||
return newConfig; | ||
} | ||
/** | ||
* Normalizes a `ConfigArray` by flattening it and executing any functions | ||
@@ -444,3 +523,3 @@ * that are found inside. | ||
for await (const config of asyncIterable) { | ||
configs.push(config); | ||
configs.push(normalizeConfigPatterns(config)); | ||
} | ||
@@ -496,3 +575,9 @@ | ||
return [...flatTraverse(items)]; | ||
const configs = []; | ||
for (const config of flatTraverse(items)) { | ||
configs.push(normalizeConfigPatterns(config)); | ||
} | ||
return configs; | ||
} | ||
@@ -499,0 +584,0 @@ |
{ | ||
"name": "@eslint/config-array", | ||
"version": "0.19.2", | ||
"version": "0.20.0", | ||
"description": "General purpose glob-based configuration matching.", | ||
@@ -5,0 +5,0 @@ "author": "Nicholas C. Zakas", |
@@ -352,5 +352,5 @@ # Config Array | ||
<p><a href="https://automattic.com"><img src="https://images.opencollective.com/automattic/d0ef3e1/logo.png" alt="Automattic" height="128"></a> <a href="https://www.airbnb.com/"><img src="https://images.opencollective.com/airbnb/d327d66/logo.png" alt="Airbnb" height="128"></a></p><h3>Gold Sponsors</h3> | ||
<p><a href="https://qlty.sh/"><img src="https://images.opencollective.com/qltysh/33d157d/logo.png" alt="Qlty Software" height="96"></a> <a href="https://trunk.io/"><img src="https://images.opencollective.com/trunkio/fb92d60/avatar.png" alt="trunk.io" height="96"></a></p><h3>Silver Sponsors</h3> | ||
<p><a href="https://www.serptriumph.com/"><img src="https://images.opencollective.com/serp-triumph5/fea3074/logo.png" alt="SERP Triumph" height="64"></a> <a href="https://www.jetbrains.com/"><img src="https://images.opencollective.com/jetbrains/fe76f99/logo.png" alt="JetBrains" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://americanexpress.io"><img src="https://avatars.githubusercontent.com/u/3853301" alt="American Express" height="64"></a></p><h3>Bronze Sponsors</h3> | ||
<p><a href="https://cybozu.co.jp/"><img src="https://images.opencollective.com/cybozu/933e46d/logo.png" alt="Cybozu" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com/"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://www.gitbook.com"><img src="https://avatars.githubusercontent.com/u/7111340" alt="GitBook" height="32"></a> <a href="https://nolebase.ayaka.io"><img src="https://avatars.githubusercontent.com/u/11081491" alt="Neko" height="32"></a> <a href="https://nx.dev"><img src="https://avatars.githubusercontent.com/u/23692104" alt="Nx" height="32"></a> <a href="https://opensource.mercedes-benz.com/"><img src="https://avatars.githubusercontent.com/u/34240465" alt="Mercedes-Benz Group" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774" alt="HeroCoders" height="32"></a></p> | ||
<p><a href="https://qlty.sh/"><img src="https://images.opencollective.com/qltysh/33d157d/logo.png" alt="Qlty Software" height="96"></a> <a href="https://trunk.io/"><img src="https://images.opencollective.com/trunkio/fb92d60/avatar.png" alt="trunk.io" height="96"></a> <a href="https://shopify.engineering/"><img src="https://avatars.githubusercontent.com/u/8085" alt="Shopify" height="96"></a></p><h3>Silver Sponsors</h3> | ||
<p><a href="https://vite.dev/"><img src="https://images.opencollective.com/vite/e6d15e1/logo.png" alt="Vite" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a> <a href="https://stackblitz.com"><img src="https://avatars.githubusercontent.com/u/28635252" alt="StackBlitz" height="64"></a></p><h3>Bronze Sponsors</h3> | ||
<p><a href="https://cybozu.co.jp/"><img src="https://images.opencollective.com/cybozu/933e46d/logo.png" alt="Cybozu" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com/"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://www.gitbook.com"><img src="https://avatars.githubusercontent.com/u/7111340" alt="GitBook" height="32"></a> <a href="https://nolebase.ayaka.io"><img src="https://avatars.githubusercontent.com/u/11081491" alt="Neko" height="32"></a> <a href="https://nx.dev"><img src="https://avatars.githubusercontent.com/u/23692104" alt="Nx" height="32"></a> <a href="https://opensource.mercedes-benz.com/"><img src="https://avatars.githubusercontent.com/u/34240465" alt="Mercedes-Benz Group" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774" alt="HeroCoders" height="32"></a> <a href="https://www.lambdatest.com"><img src="https://avatars.githubusercontent.com/u/171592363" alt="LambdaTest" height="32"></a></p> | ||
<h3>Technology Sponsors</h3> | ||
@@ -357,0 +357,0 @@ Technology sponsors allow us to use their products and services for free as part of a contribution to the open source ecosystem and our work. |
Sorry, the diff of this file is not supported yet
318595
1.29%8361
1.7%