diff --git a/@pob/eslint-config/lib/_base.js b/@pob/eslint-config/lib/_base.js index eed2a9c6f..928c086be 100644 --- a/@pob/eslint-config/lib/_base.js +++ b/@pob/eslint-config/lib/_base.js @@ -1,5 +1,6 @@ import js from "@eslint/js"; import pobPlugin from "@pob/eslint-plugin"; +import regexpPluginConfigs from "./plugins/regexp.js"; import unicornPluginConfigs from "./plugins/unicorn.js"; import bestPracticesConfig from "./rules/best-practices.js"; import codeQualityConfig from "./rules/code-quality.js"; @@ -30,6 +31,7 @@ export default [ js.configs.recommended, pobPlugin.configs.base, ...unicornPluginConfigs, + ...regexpPluginConfigs, bestPracticesConfig, codeQualityConfig, errorsConfig, diff --git a/@pob/eslint-config/lib/plugins/regexp.js b/@pob/eslint-config/lib/plugins/regexp.js new file mode 100644 index 000000000..4affb2722 --- /dev/null +++ b/@pob/eslint-config/lib/plugins/regexp.js @@ -0,0 +1,9 @@ +import eslintPluginRegexp from "eslint-plugin-regexp"; + +export default [ + eslintPluginRegexp.configs["flat/recommended"], + { + name: "@pob/eslint-config/regexp", + rules: {}, + }, +]; diff --git a/@pob/eslint-config/lib/plugins/unicorn.js b/@pob/eslint-config/lib/plugins/unicorn.js index 66ad6e858..fbb0cc1e2 100644 --- a/@pob/eslint-config/lib/plugins/unicorn.js +++ b/@pob/eslint-config/lib/plugins/unicorn.js @@ -56,9 +56,6 @@ export default [ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/new-for-builtins.md "unicorn/new-for-builtins": "error", - // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/better-regex.md - "unicorn/better-regex": "error", - // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-spread.md "unicorn/prefer-spread": "error", @@ -339,6 +336,15 @@ export default [ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-blob-reading-methods.md "unicorn/prefer-blob-reading-methods": "error", + + // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-global-this.md + "unicorn/prefer-global-this": "warn", + + // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/prefer-math-min-max.md + "unicorn/prefer-math-min-max": "error", + + // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/consistent-existence-index-check.md + "unicorn/consistent-existence-index-check": "error", }, }, { diff --git a/@pob/eslint-config/package.json b/@pob/eslint-config/package.json index e9f02f795..d4adc4e2c 100644 --- a/@pob/eslint-config/package.json +++ b/@pob/eslint-config/package.json @@ -50,13 +50,15 @@ "confusing-browser-globals": "^1.0.11", "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^17.4.0", - "eslint-plugin-unicorn": "^55.0.0" + "eslint-plugin-regexp": "^2.7.0", + "eslint-plugin-unicorn": "^56.0.0" }, "devDependencies": { "eslint": "9.14.0", "eslint-plugin-import": "2.29.1", "eslint-plugin-n": "17.4.0", - "eslint-plugin-unicorn": "55.0.0", + "eslint-plugin-regexp": "2.7.0", + "eslint-plugin-unicorn": "56.0.0", "typescript": "5.6.3" } } diff --git a/@pob/eslint-config/test-lint/errors/no-control-regex.mjs b/@pob/eslint-config/test-lint/errors/no-control-regex.mjs index 19075756f..50c145dc2 100644 --- a/@pob/eslint-config/test-lint/errors/no-control-regex.mjs +++ b/@pob/eslint-config/test-lint/errors/no-control-regex.mjs @@ -1,2 +1,2 @@ -// eslint-disable-next-line no-control-regex +// eslint-disable-next-line no-control-regex, regexp/control-character-escape export const pattern1 = /\u0000/; diff --git a/@pob/eslint-config/test-lint/errors/no-empty-character-class.mjs b/@pob/eslint-config/test-lint/errors/no-empty-character-class.mjs index f34b1749c..1d981c38e 100644 --- a/@pob/eslint-config/test-lint/errors/no-empty-character-class.mjs +++ b/@pob/eslint-config/test-lint/errors/no-empty-character-class.mjs @@ -1,2 +1,2 @@ -// eslint-disable-next-line no-empty-character-class +// eslint-disable-next-line no-empty-character-class, regexp/no-empty-character-class /^abc[]/.test("abcdefg"); // false diff --git a/@pob/eslint-config/test-lint/errors/no-invalid-regexp.mjs b/@pob/eslint-config/test-lint/errors/no-invalid-regexp.mjs index 52e365a65..5d89b3bf5 100644 --- a/@pob/eslint-config/test-lint/errors/no-invalid-regexp.mjs +++ b/@pob/eslint-config/test-lint/errors/no-invalid-regexp.mjs @@ -1,2 +1,2 @@ -// eslint-disable-next-line no-invalid-regexp, prefer-regex-literals, unicorn/new-for-builtins -RegExp("["); +// eslint-disable-next-line no-invalid-regexp, prefer-regex-literals, regexp/no-invalid-regexp +export const regexp = new RegExp("["); diff --git a/@pob/eslint-config/test-lint/errors/no-misleading-character-class.mjs b/@pob/eslint-config/test-lint/errors/no-misleading-character-class.mjs index fc2739963..055b8ca75 100644 --- a/@pob/eslint-config/test-lint/errors/no-misleading-character-class.mjs +++ b/@pob/eslint-config/test-lint/errors/no-misleading-character-class.mjs @@ -1,2 +1,2 @@ -// eslint-disable-next-line no-misleading-character-class +// eslint-disable-next-line no-misleading-character-class, regexp/no-misleading-unicode-character /^[πŸ‘ΆπŸ»]$/u.test("πŸ‘ΆπŸ»"); // β†’ false diff --git a/@pob/eslint-config/test-lint/errors/no-useless-backreference.mjs b/@pob/eslint-config/test-lint/errors/no-useless-backreference.mjs index 54a748118..905f7b270 100644 --- a/@pob/eslint-config/test-lint/errors/no-useless-backreference.mjs +++ b/@pob/eslint-config/test-lint/errors/no-useless-backreference.mjs @@ -1,2 +1,2 @@ -// eslint-disable-next-line no-useless-backreference +// eslint-disable-next-line no-useless-backreference, regexp/no-useless-backreference export const r = /^(?:(a)|\1b)$/; // reference to (a) into another alternative diff --git a/@pob/eslint-config/test-lint/regexp/no-contradiction-with-assertion.js b/@pob/eslint-config/test-lint/regexp/no-contradiction-with-assertion.js new file mode 100644 index 000000000..75f062679 --- /dev/null +++ b/@pob/eslint-config/test-lint/regexp/no-contradiction-with-assertion.js @@ -0,0 +1,4 @@ +// eslint-disable-next-line regexp/no-contradiction-with-assertion +export const foo1 = /(?=a)(\w|-)/; +// eslint-disable-next-line regexp/no-contradiction-with-assertion +export const foo2 = /(?=a)b*a/; diff --git a/package.json b/package.json index 5e898fac4..02952685b 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "eslint-plugin-n": "17.4.0", "eslint-plugin-react": "7.35.2", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-unicorn": "55.0.0", + "eslint-plugin-unicorn": "56.0.0", "semver": "7.6.3", "typescript": "5.6.3" } diff --git a/yarn.lock b/yarn.lock index 8487596f6..d7a686dd5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,7 +22,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.5, @babel/helper-validator-identifier@npm:^7.24.7": +"@babel/helper-validator-identifier@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-validator-identifier@npm:7.24.7" checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 @@ -261,7 +261,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.6.0": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.6.0, @eslint-community/regexpp@npm:^4.8.0": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 @@ -636,7 +636,7 @@ __metadata: eslint-plugin-n: "npm:17.4.0" eslint-plugin-react: "npm:7.35.2" eslint-plugin-react-hooks: "npm:5.0.0" - eslint-plugin-unicorn: "npm:55.0.0" + eslint-plugin-unicorn: "npm:56.0.0" semver: "npm:7.6.3" typescript: "npm:5.6.3" languageName: unknown @@ -690,7 +690,8 @@ __metadata: eslint: "npm:9.14.0" eslint-plugin-import: "npm:2.29.1" eslint-plugin-n: "npm:17.4.0" - eslint-plugin-unicorn: "npm:55.0.0" + eslint-plugin-regexp: "npm:2.7.0" + eslint-plugin-unicorn: "npm:56.0.0" typescript: "npm:5.6.3" peerDependencies: eslint: ^9.9.0 @@ -1317,17 +1318,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" +"browserslist@npm:^4.24.2": + version: 4.24.2 + resolution: "browserslist@npm:4.24.2" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" + caniuse-lite: "npm:^1.0.30001669" + electron-to-chromium: "npm:^1.5.41" node-releases: "npm:^2.0.18" - update-browserslist-db: "npm:^1.1.0" + update-browserslist-db: "npm:^1.1.1" bin: browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + checksum: 10c0/d747c9fb65ed7b4f1abcae4959405707ed9a7b835639f8a9ba0da2911995a6ab9b0648fd05baf2a4d4e3cf7f9fdbad56d3753f91881e365992c1d49c8d88ff7a languageName: node linkType: hard @@ -1358,10 +1359,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001651 - resolution: "caniuse-lite@npm:1.0.30001651" - checksum: 10c0/7821278952a6dbd17358e5d08083d258f092e2a530f5bc1840657cb140fbbc5ec44293bc888258c44a18a9570cde149ed05819ac8320b9710cf22f699891e6ad +"caniuse-lite@npm:^1.0.30001669": + version: 1.0.30001680 + resolution: "caniuse-lite@npm:1.0.30001680" + checksum: 10c0/11a4e7f6f5d5f965cfd4b7dc4aef34e12a26e99647f02b5ac9fd7f7670845473b95ada416a785473237e4b1b67281f7b043c8736c85b77097f6b697e8950b15f languageName: node linkType: hard @@ -1501,6 +1502,13 @@ __metadata: languageName: node linkType: hard +"comment-parser@npm:^1.4.0": + version: 1.4.1 + resolution: "comment-parser@npm:1.4.1" + checksum: 10c0/d6c4be3f5be058f98b24f2d557f745d8fe1cc9eb75bebbdccabd404a0e1ed41563171b16285f593011f8b6a5ec81f564fb1f2121418ac5cbf0f49255bf0840dd + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -1624,12 +1632,12 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.37.0": - version: 3.38.0 - resolution: "core-js-compat@npm:3.38.0" +"core-js-compat@npm:^3.38.1": + version: 3.39.0 + resolution: "core-js-compat@npm:3.39.0" dependencies: - browserslist: "npm:^4.23.3" - checksum: 10c0/9d653a448b8a491034358d2f052e63dda86f75fb65646e2d313a938212470ba1c2f5a83bf31cc583d6c87a9e8d7b0d49458447cab2ff36c4caa097ae381de336 + browserslist: "npm:^4.24.2" + checksum: 10c0/880579a3dab235e3b6350f1e324269c600753b48e891ea859331618d5051e68b7a95db6a03ad2f3cc7df4397318c25a5bc7740562ad39e94f56568638d09d414 languageName: node linkType: hard @@ -1838,10 +1846,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.6 - resolution: "electron-to-chromium@npm:1.5.6" - checksum: 10c0/1dfef4feaa9f4e5231b8b0697f1f55623eb2ffd263b50e6d4ff995a0927653997ba116640ae06786661f8d24c7b99fa6727c0796e9c60d748f473674d78ab31e +"electron-to-chromium@npm:^1.5.41": + version: 1.5.63 + resolution: "electron-to-chromium@npm:1.5.63" + checksum: 10c0/fe1b175805309b04e5a2242c3168f22543e5369aed01fceedfe0f0eafe3931e8609d8a140e527394b314cfe64d581913aba6f1d3c72c23069c7d8241e5dfa4ef languageName: node linkType: hard @@ -2055,10 +2063,10 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 languageName: node linkType: hard @@ -2229,17 +2237,34 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-unicorn@npm:55.0.0": - version: 55.0.0 - resolution: "eslint-plugin-unicorn@npm:55.0.0" +"eslint-plugin-regexp@npm:2.7.0": + version: 2.7.0 + resolution: "eslint-plugin-regexp@npm:2.7.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.11.0" + comment-parser: "npm:^1.4.0" + jsdoc-type-pratt-parser: "npm:^4.0.0" + refa: "npm:^0.12.1" + regexp-ast-analysis: "npm:^0.7.1" + scslre: "npm:^0.3.0" + peerDependencies: + eslint: ">=8.44.0" + checksum: 10c0/c4882b441bab92e89c82cb27d6650540ad318750df5e99b42989f0fdf9ea381a9156de8470f1221483f98b5dc9cd6c493da73ccc18d94dee8d4a0f0ce78bd122 + languageName: node + linkType: hard + +"eslint-plugin-unicorn@npm:56.0.0": + version: 56.0.0 + resolution: "eslint-plugin-unicorn@npm:56.0.0" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.5" + "@babel/helper-validator-identifier": "npm:^7.24.7" "@eslint-community/eslint-utils": "npm:^4.4.0" ci-info: "npm:^4.0.0" clean-regexp: "npm:^1.0.0" - core-js-compat: "npm:^3.37.0" - esquery: "npm:^1.5.0" - globals: "npm:^15.7.0" + core-js-compat: "npm:^3.38.1" + esquery: "npm:^1.6.0" + globals: "npm:^15.9.0" indent-string: "npm:^4.0.0" is-builtin-module: "npm:^3.2.1" jsesc: "npm:^3.0.2" @@ -2247,11 +2272,11 @@ __metadata: read-pkg-up: "npm:^7.0.1" regexp-tree: "npm:^0.1.27" regjsparser: "npm:^0.10.0" - semver: "npm:^7.6.1" + semver: "npm:^7.6.3" strip-indent: "npm:^3.0.0" peerDependencies: eslint: ">=8.56.0" - checksum: 10c0/31620da5c823abc791a3f4c9a0ab19baf21820bd38f018eafbc862ea0bbc3e4baedbdaaaf48f2dc1b2a59dfc7b341e654f2126c394f5d62fb5216e632d8a2c03 + checksum: 10c0/514b8da5423041e88723e9a46e1d9b77b8713b4bb3cd9beb58949907f2f4ce6533a9e1d7508bd0583d2f48c191f8134f27cd229dfb05f97431ecec49f24fcbf6 languageName: node linkType: hard @@ -2340,12 +2365,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.5.0, esquery@npm:^1.6.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10c0/a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 languageName: node linkType: hard @@ -2713,10 +2738,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:^15.0.0, globals@npm:^15.7.0": - version: 15.9.0 - resolution: "globals@npm:15.9.0" - checksum: 10c0/de4b553e412e7e830998578d51b605c492256fb2a9273eaeec6ec9ee519f1c5aa50de57e3979911607fd7593a4066420e01d8c3d551e7a6a236e96c521aee36c +"globals@npm:^15.0.0, globals@npm:^15.9.0": + version: 15.12.0 + resolution: "globals@npm:15.12.0" + checksum: 10c0/f34e0a1845b694f45188331742af9f488b07ba7440a06e9d2039fce0386fbbfc24afdbb9846ebdccd4092d03644e43081c49eb27b30f4b88e43af156e1c1dc34 languageName: node linkType: hard @@ -3327,6 +3352,13 @@ __metadata: languageName: node linkType: hard +"jsdoc-type-pratt-parser@npm:^4.0.0": + version: 4.1.0 + resolution: "jsdoc-type-pratt-parser@npm:4.1.0" + checksum: 10c0/7700372d2e733a32f7ea0a1df9cec6752321a5345c11a91b2ab478a031a426e934f16d5c1f15c8566c7b2c10af9f27892a29c2c789039f595470e929a4aa60ea + languageName: node + linkType: hard + "jsesc@npm:^3.0.2": version: 3.0.2 resolution: "jsesc@npm:3.0.2" @@ -4237,10 +4269,10 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard @@ -4409,6 +4441,15 @@ __metadata: languageName: node linkType: hard +"refa@npm:^0.12.0, refa@npm:^0.12.1": + version: 0.12.1 + resolution: "refa@npm:0.12.1" + dependencies: + "@eslint-community/regexpp": "npm:^4.8.0" + checksum: 10c0/5c2f3dc5421f73aba44ec3d67bad58f36ff921dc13b0a921e1784c0510cf26be6d4e14010955a71607e67ff23a815f3ac30b337d06b5a2e8914417b67626c900 + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.4": version: 1.0.4 resolution: "reflect.getprototypeof@npm:1.0.4" @@ -4423,6 +4464,16 @@ __metadata: languageName: node linkType: hard +"regexp-ast-analysis@npm:^0.7.0, regexp-ast-analysis@npm:^0.7.1": + version: 0.7.1 + resolution: "regexp-ast-analysis@npm:0.7.1" + dependencies: + "@eslint-community/regexpp": "npm:^4.8.0" + refa: "npm:^0.12.1" + checksum: 10c0/1b0e6d66e1e619b42a0e7f62b4c9983d0ce69d94fc759802c02272cbab8abd2e0d5b94186472de4e7c4baaf5826ca674d3c7c083615e39c4be55d1ff9d12c823 + languageName: node + linkType: hard + "regexp-tree@npm:^0.1.27": version: 0.1.27 resolution: "regexp-tree@npm:0.1.27" @@ -4614,6 +4665,17 @@ __metadata: languageName: node linkType: hard +"scslre@npm:^0.3.0": + version: 0.3.0 + resolution: "scslre@npm:0.3.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.8.0" + refa: "npm:^0.12.0" + regexp-ast-analysis: "npm:^0.7.0" + checksum: 10c0/47eb72cf913693b453b7622dfee26871b4c408169874b31b8a1f3de8f41698e6dbacd7565fccc8d24cd2fd30f53c21f16995a7f9072e8b25cd938a6c3a750c3c + languageName: node + linkType: hard + "semver-utils@npm:^1.1.4": version: 1.1.4 resolution: "semver-utils@npm:1.1.4" @@ -4630,7 +4692,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.6.3, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.1": +"semver@npm:7.6.3, semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -5203,17 +5265,17 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.1.0": - version: 1.1.0 - resolution: "update-browserslist-db@npm:1.1.0" +"update-browserslist-db@npm:^1.1.1": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" dependencies: - escalade: "npm:^3.1.2" - picocolors: "npm:^1.0.1" + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.0" peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + checksum: 10c0/536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80 languageName: node linkType: hard