├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── README.md ├── docs └── rules │ ├── newline-between-switch-case.md │ └── no-case-curly.md ├── package-lock.json ├── package.json ├── src ├── index.js └── rules │ ├── newline-between-switch-case.js │ └── no-case-curly.js └── tests ├── .eslintrc.json ├── index.js └── src ├── rules ├── newline-between-switch-case.js └── no-case-curly.js └── utils.js /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/** 2 | /lib 3 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "ecmaVersion": "2018" 4 | }, 5 | "env": { 6 | "node": true 7 | }, 8 | "rules": {} 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | node_modules 3 | .idea 4 | /lib 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | sudo: false 3 | node_js: 4 | - "18" 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to this project will be documented in this file. 3 | This project adheres to [Semantic Versioning](http://semver.org/). 4 | 5 | ## [1.1.2] - 2016-08-01 6 | - Fix recommended config 7 | 8 | ## [1.1.1] - 2016-07-23 9 | - Remove extraneous files from published package 10 | 11 | ## [1.1.0] - 2016-07-17 12 | - Add autofixing 13 | 14 | ## [1.0.1] - 2016-07-17 15 | - fix typo in readme 16 | 17 | ## [1.0.0] - 2016-07-17 18 | ### Added 19 | - Initial release 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ESLint-Plugin-Switch-Case 2 | ========================= 3 | 4 | [![Maintenance Status][status-image]][status-url] [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] 5 | 6 | Switch-case-specific linting rules for ESLint. 7 | 8 | # Installation 9 | 10 | Install [ESLint](https://www.github.com/eslint/eslint) either locally or globally. 11 | 12 | $ npm install eslint 13 | 14 | If you installed `ESLint` globally, you have to install the plugin globally too. Otherwise, install it locally. 15 | 16 | $ npm install eslint-plugin-switch-case 17 | 18 | # Configuration 19 | 20 | Add a `plugins` section and specify eslint-plugin-switch-case as a plugin. 21 | 22 | Then, enable all of the rules that you would like to use. 23 | 24 | ## Recommended configuration 25 | This plugin exports a `recommended` configuration that enforces all the rules. You can configure the plugin as follows: 26 | 27 | ```json 28 | { 29 | "plugins": ["switch-case"], 30 | "extends": ["plugin:switch-case/recommended"] 31 | } 32 | ``` 33 | # List of provided rules 34 | Rules are divided into categories for your convenience. All rules are off by default, unless you use one of the plugin's configurations which turn all relevant rules on. 35 | 36 | ### Stylistic Issues 37 | These rules are purely matters of style and are quite subjective. 38 | * [no-case-curly](docs/rules/no-case-curly.md): Forbid curly brackets around case statements. 39 | * [newline-between-switch-case](docs/rules/newline-between-switch-case.md): Configure newlines around switch cases. 40 | 41 | # Contributing 42 | Contributions are always welcome!. 43 | 44 | # License 45 | 46 | eslint-plugin-switch-case is licensed under the [MIT License](http://www.opensource.org/licenses/mit-license.php). 47 | 48 | [npm-url]: https://npmjs.org/package/eslint-plugin-switch-case 49 | [npm-image]: http://img.shields.io/npm/v/eslint-plugin-switch-case.svg?style=flat-square 50 | 51 | [travis-url]: https://travis-ci.org/lukeapage/eslint-plugin-switch-case 52 | [travis-image]: http://img.shields.io/travis/lukeapage/eslint-plugin-switch-case/master.svg?style=flat-square 53 | 54 | [deps-url]: https://david-dm.org/lukeapage/eslint-plugin-switch-case 55 | [deps-image]: https://img.shields.io/david/dev/lukeapage/eslint-plugin-switch-case.svg?style=flat-square 56 | 57 | [status-url]: https://github.com/lukeapage/eslint-plugin-switch-case/pulse 58 | [status-image]: http://img.shields.io/badge/status-maintained-brightgreen.svg?style=flat-square 59 | -------------------------------------------------------------------------------- /docs/rules/newline-between-switch-case.md: -------------------------------------------------------------------------------- 1 | # newline-between-switch-case 2 | 3 | Require newlines between switch cases. 4 | 5 | ## Options 6 | 7 | The rule takes a first option of either "always" or "never" as to whether there should be a newline between cases. It also takes an object with the following options: 8 | 9 | * fallthrough - "always" or "never" - whether or not to have newlines between cases that fallthrough to each other. 10 | 11 | ## Rule Details 12 | 13 | The following patterns are considered problems: 14 | 15 | ```js 16 | /*eslint switch-case/newline-between-switch-case: ["error", "always"]*/ 17 | 18 | switch (a) { 19 | case 0: 20 | case 1: 21 | doSomething(); 22 | break; 23 | case 2: 24 | doSomething(); 25 | break; 26 | } 27 | 28 | ``` 29 | 30 | The following patterns are not considered warnings: 31 | 32 | ```js 33 | /*eslint switch-case: "error"*/ 34 | 35 | /*eslint switch-case/newline-between-switch-case: ["error", "always"]*/ 36 | 37 | switch (a) { 38 | case 0: 39 | 40 | case 1: 41 | doSomething(); 42 | break; 43 | 44 | case 2: 45 | doSomething(); 46 | break; 47 | } 48 | 49 | ``` 50 | 51 | ## fallthrough option 52 | 53 | The following patterns are considered problems: 54 | 55 | ```js 56 | /*eslint switch-case/newline-between-switch-case: ["error", "always", { "fallthrough": "never"}]*/ 57 | 58 | switch (a) { 59 | case 0: 60 | 61 | case 1: 62 | doSomething(); 63 | break; 64 | } 65 | 66 | ``` 67 | 68 | The following patterns are not considered warnings: 69 | 70 | ```js 71 | /*eslint switch-case: "error"*/ 72 | 73 | /*eslint switch-case/newline-between-switch-case: ["error", "always", { "fallthrough": "never"}]*/ 74 | 75 | switch (a) { 76 | case 0: 77 | case 1: 78 | doSomething(); 79 | break; 80 | } 81 | 82 | ``` 83 | 84 | ## When Not To Use It 85 | 86 | If you don't want to enforce newlines between switch cases. 87 | -------------------------------------------------------------------------------- /docs/rules/no-case-curly.md: -------------------------------------------------------------------------------- 1 | # no-case-curly 2 | 3 | Long switch statements containing unrelated code for each case can get messy. One sign that you have unrelated code is if you need curly braces because you are initialising variables. This rule prevents this and recommends pulling out the code to a seperate function. 4 | 5 | ## Rule Details 6 | 7 | The following patterns are considered problems: 8 | 9 | ```js 10 | /*eslint switch-case/no-case-curly: "error"*/ 11 | 12 | switch (a) { 13 | case 1: { 14 | let b = a + c; 15 | let d = g(b); 16 | return h(b, d); 17 | break; 18 | } 19 | } 20 | 21 | ``` 22 | 23 | The following patterns are not considered warnings: 24 | 25 | ```js 26 | /*eslint switch-case: "error"*/ 27 | 28 | switch(a) { 29 | case 1: 30 | return descriptive(a); 31 | } 32 | 33 | ``` 34 | 35 | ## When Not To Use It 36 | 37 | If you need switch statement cases to have their own variables/scope. 38 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-switch-case", 3 | "version": "3.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "eslint-plugin-switch-case", 9 | "version": "3.0.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "eslint": "^9.8.0", 13 | "mocha": "^9.2.2" 14 | }, 15 | "engines": { 16 | "node": ">=18" 17 | }, 18 | "peerDependencies": { 19 | "eslint": "^9.8.0" 20 | } 21 | }, 22 | "node_modules/@eslint-community/eslint-utils": { 23 | "version": "4.4.0", 24 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 25 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 26 | "dev": true, 27 | "dependencies": { 28 | "eslint-visitor-keys": "^3.3.0" 29 | }, 30 | "engines": { 31 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 32 | }, 33 | "peerDependencies": { 34 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 35 | } 36 | }, 37 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 38 | "version": "3.4.3", 39 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 40 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 41 | "dev": true, 42 | "engines": { 43 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 44 | }, 45 | "funding": { 46 | "url": "https://opencollective.com/eslint" 47 | } 48 | }, 49 | "node_modules/@eslint-community/regexpp": { 50 | "version": "4.11.0", 51 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", 52 | "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", 53 | "dev": true, 54 | "engines": { 55 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 56 | } 57 | }, 58 | "node_modules/@eslint/config-array": { 59 | "version": "0.17.1", 60 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", 61 | "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", 62 | "dev": true, 63 | "dependencies": { 64 | "@eslint/object-schema": "^2.1.4", 65 | "debug": "^4.3.1", 66 | "minimatch": "^3.1.2" 67 | }, 68 | "engines": { 69 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 70 | } 71 | }, 72 | "node_modules/@eslint/config-array/node_modules/debug": { 73 | "version": "4.3.6", 74 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 75 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 76 | "dev": true, 77 | "dependencies": { 78 | "ms": "2.1.2" 79 | }, 80 | "engines": { 81 | "node": ">=6.0" 82 | }, 83 | "peerDependenciesMeta": { 84 | "supports-color": { 85 | "optional": true 86 | } 87 | } 88 | }, 89 | "node_modules/@eslint/config-array/node_modules/ms": { 90 | "version": "2.1.2", 91 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 92 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 93 | "dev": true 94 | }, 95 | "node_modules/@eslint/eslintrc": { 96 | "version": "3.1.0", 97 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", 98 | "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", 99 | "dev": true, 100 | "dependencies": { 101 | "ajv": "^6.12.4", 102 | "debug": "^4.3.2", 103 | "espree": "^10.0.1", 104 | "globals": "^14.0.0", 105 | "ignore": "^5.2.0", 106 | "import-fresh": "^3.2.1", 107 | "js-yaml": "^4.1.0", 108 | "minimatch": "^3.1.2", 109 | "strip-json-comments": "^3.1.1" 110 | }, 111 | "engines": { 112 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 113 | }, 114 | "funding": { 115 | "url": "https://opencollective.com/eslint" 116 | } 117 | }, 118 | "node_modules/@eslint/eslintrc/node_modules/argparse": { 119 | "version": "2.0.1", 120 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 121 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 122 | "dev": true 123 | }, 124 | "node_modules/@eslint/eslintrc/node_modules/debug": { 125 | "version": "4.3.6", 126 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 127 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 128 | "dev": true, 129 | "dependencies": { 130 | "ms": "2.1.2" 131 | }, 132 | "engines": { 133 | "node": ">=6.0" 134 | }, 135 | "peerDependenciesMeta": { 136 | "supports-color": { 137 | "optional": true 138 | } 139 | } 140 | }, 141 | "node_modules/@eslint/eslintrc/node_modules/globals": { 142 | "version": "14.0.0", 143 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 144 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 145 | "dev": true, 146 | "engines": { 147 | "node": ">=18" 148 | }, 149 | "funding": { 150 | "url": "https://github.com/sponsors/sindresorhus" 151 | } 152 | }, 153 | "node_modules/@eslint/eslintrc/node_modules/js-yaml": { 154 | "version": "4.1.0", 155 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 156 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 157 | "dev": true, 158 | "dependencies": { 159 | "argparse": "^2.0.1" 160 | }, 161 | "bin": { 162 | "js-yaml": "bin/js-yaml.js" 163 | } 164 | }, 165 | "node_modules/@eslint/eslintrc/node_modules/ms": { 166 | "version": "2.1.2", 167 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 168 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 169 | "dev": true 170 | }, 171 | "node_modules/@eslint/js": { 172 | "version": "9.8.0", 173 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", 174 | "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", 175 | "dev": true, 176 | "engines": { 177 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 178 | } 179 | }, 180 | "node_modules/@eslint/object-schema": { 181 | "version": "2.1.4", 182 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", 183 | "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", 184 | "dev": true, 185 | "engines": { 186 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 187 | } 188 | }, 189 | "node_modules/@humanwhocodes/module-importer": { 190 | "version": "1.0.1", 191 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 192 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 193 | "dev": true, 194 | "engines": { 195 | "node": ">=12.22" 196 | }, 197 | "funding": { 198 | "type": "github", 199 | "url": "https://github.com/sponsors/nzakas" 200 | } 201 | }, 202 | "node_modules/@humanwhocodes/retry": { 203 | "version": "0.3.0", 204 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", 205 | "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", 206 | "dev": true, 207 | "engines": { 208 | "node": ">=18.18" 209 | }, 210 | "funding": { 211 | "type": "github", 212 | "url": "https://github.com/sponsors/nzakas" 213 | } 214 | }, 215 | "node_modules/@nodelib/fs.scandir": { 216 | "version": "2.1.5", 217 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 218 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 219 | "dev": true, 220 | "dependencies": { 221 | "@nodelib/fs.stat": "2.0.5", 222 | "run-parallel": "^1.1.9" 223 | }, 224 | "engines": { 225 | "node": ">= 8" 226 | } 227 | }, 228 | "node_modules/@nodelib/fs.stat": { 229 | "version": "2.0.5", 230 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 231 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 232 | "dev": true, 233 | "engines": { 234 | "node": ">= 8" 235 | } 236 | }, 237 | "node_modules/@nodelib/fs.walk": { 238 | "version": "1.2.8", 239 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 240 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 241 | "dev": true, 242 | "dependencies": { 243 | "@nodelib/fs.scandir": "2.1.5", 244 | "fastq": "^1.6.0" 245 | }, 246 | "engines": { 247 | "node": ">= 8" 248 | } 249 | }, 250 | "node_modules/@ungap/promise-all-settled": { 251 | "version": "1.1.2", 252 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 253 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 254 | "dev": true 255 | }, 256 | "node_modules/acorn": { 257 | "version": "8.12.1", 258 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 259 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 260 | "dev": true, 261 | "bin": { 262 | "acorn": "bin/acorn" 263 | }, 264 | "engines": { 265 | "node": ">=0.4.0" 266 | } 267 | }, 268 | "node_modules/acorn-jsx": { 269 | "version": "5.3.2", 270 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 271 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 272 | "dev": true, 273 | "peerDependencies": { 274 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 275 | } 276 | }, 277 | "node_modules/ajv": { 278 | "version": "6.12.6", 279 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 280 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 281 | "dev": true, 282 | "dependencies": { 283 | "fast-deep-equal": "^3.1.1", 284 | "fast-json-stable-stringify": "^2.0.0", 285 | "json-schema-traverse": "^0.4.1", 286 | "uri-js": "^4.2.2" 287 | }, 288 | "funding": { 289 | "type": "github", 290 | "url": "https://github.com/sponsors/epoberezkin" 291 | } 292 | }, 293 | "node_modules/ansi-colors": { 294 | "version": "4.1.1", 295 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 296 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 297 | "dev": true, 298 | "engines": { 299 | "node": ">=6" 300 | } 301 | }, 302 | "node_modules/ansi-regex": { 303 | "version": "5.0.1", 304 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 305 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 306 | "dev": true, 307 | "engines": { 308 | "node": ">=8" 309 | } 310 | }, 311 | "node_modules/anymatch": { 312 | "version": "3.1.2", 313 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 314 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 315 | "dev": true, 316 | "dependencies": { 317 | "normalize-path": "^3.0.0", 318 | "picomatch": "^2.0.4" 319 | }, 320 | "engines": { 321 | "node": ">= 8" 322 | } 323 | }, 324 | "node_modules/balanced-match": { 325 | "version": "0.4.2", 326 | "dev": true, 327 | "license": "MIT" 328 | }, 329 | "node_modules/binary-extensions": { 330 | "version": "2.2.0", 331 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 332 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 333 | "dev": true, 334 | "engines": { 335 | "node": ">=8" 336 | } 337 | }, 338 | "node_modules/brace-expansion": { 339 | "version": "1.1.7", 340 | "dev": true, 341 | "license": "MIT", 342 | "dependencies": { 343 | "balanced-match": "^0.4.1", 344 | "concat-map": "0.0.1" 345 | } 346 | }, 347 | "node_modules/braces": { 348 | "version": "3.0.3", 349 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 350 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 351 | "dev": true, 352 | "license": "MIT", 353 | "dependencies": { 354 | "fill-range": "^7.1.1" 355 | }, 356 | "engines": { 357 | "node": ">=8" 358 | } 359 | }, 360 | "node_modules/browser-stdout": { 361 | "version": "1.3.1", 362 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 363 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 364 | "dev": true 365 | }, 366 | "node_modules/callsites": { 367 | "version": "3.1.0", 368 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 369 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 370 | "dev": true, 371 | "engines": { 372 | "node": ">=6" 373 | } 374 | }, 375 | "node_modules/chokidar": { 376 | "version": "3.5.3", 377 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 378 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 379 | "dev": true, 380 | "funding": [ 381 | { 382 | "type": "individual", 383 | "url": "https://paulmillr.com/funding/" 384 | } 385 | ], 386 | "dependencies": { 387 | "anymatch": "~3.1.2", 388 | "braces": "~3.0.2", 389 | "glob-parent": "~5.1.2", 390 | "is-binary-path": "~2.1.0", 391 | "is-glob": "~4.0.1", 392 | "normalize-path": "~3.0.0", 393 | "readdirp": "~3.6.0" 394 | }, 395 | "engines": { 396 | "node": ">= 8.10.0" 397 | }, 398 | "optionalDependencies": { 399 | "fsevents": "~2.3.2" 400 | } 401 | }, 402 | "node_modules/color-convert": { 403 | "version": "2.0.1", 404 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 405 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 406 | "dev": true, 407 | "dependencies": { 408 | "color-name": "~1.1.4" 409 | }, 410 | "engines": { 411 | "node": ">=7.0.0" 412 | } 413 | }, 414 | "node_modules/color-name": { 415 | "version": "1.1.4", 416 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 417 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 418 | "dev": true 419 | }, 420 | "node_modules/concat-map": { 421 | "version": "0.0.1", 422 | "dev": true, 423 | "license": "MIT" 424 | }, 425 | "node_modules/cross-spawn": { 426 | "version": "7.0.3", 427 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 428 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 429 | "dev": true, 430 | "dependencies": { 431 | "path-key": "^3.1.0", 432 | "shebang-command": "^2.0.0", 433 | "which": "^2.0.1" 434 | }, 435 | "engines": { 436 | "node": ">= 8" 437 | } 438 | }, 439 | "node_modules/cross-spawn/node_modules/which": { 440 | "version": "2.0.2", 441 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 442 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 443 | "dev": true, 444 | "dependencies": { 445 | "isexe": "^2.0.0" 446 | }, 447 | "bin": { 448 | "node-which": "bin/node-which" 449 | }, 450 | "engines": { 451 | "node": ">= 8" 452 | } 453 | }, 454 | "node_modules/deep-is": { 455 | "version": "0.1.4", 456 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 457 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 458 | "dev": true 459 | }, 460 | "node_modules/diff": { 461 | "version": "5.0.0", 462 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 463 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 464 | "dev": true, 465 | "engines": { 466 | "node": ">=0.3.1" 467 | } 468 | }, 469 | "node_modules/emoji-regex": { 470 | "version": "8.0.0", 471 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 472 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 473 | "dev": true 474 | }, 475 | "node_modules/escalade": { 476 | "version": "3.1.1", 477 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 478 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 479 | "dev": true, 480 | "engines": { 481 | "node": ">=6" 482 | } 483 | }, 484 | "node_modules/eslint": { 485 | "version": "9.8.0", 486 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", 487 | "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", 488 | "dev": true, 489 | "dependencies": { 490 | "@eslint-community/eslint-utils": "^4.2.0", 491 | "@eslint-community/regexpp": "^4.11.0", 492 | "@eslint/config-array": "^0.17.1", 493 | "@eslint/eslintrc": "^3.1.0", 494 | "@eslint/js": "9.8.0", 495 | "@humanwhocodes/module-importer": "^1.0.1", 496 | "@humanwhocodes/retry": "^0.3.0", 497 | "@nodelib/fs.walk": "^1.2.8", 498 | "ajv": "^6.12.4", 499 | "chalk": "^4.0.0", 500 | "cross-spawn": "^7.0.2", 501 | "debug": "^4.3.2", 502 | "escape-string-regexp": "^4.0.0", 503 | "eslint-scope": "^8.0.2", 504 | "eslint-visitor-keys": "^4.0.0", 505 | "espree": "^10.1.0", 506 | "esquery": "^1.5.0", 507 | "esutils": "^2.0.2", 508 | "fast-deep-equal": "^3.1.3", 509 | "file-entry-cache": "^8.0.0", 510 | "find-up": "^5.0.0", 511 | "glob-parent": "^6.0.2", 512 | "ignore": "^5.2.0", 513 | "imurmurhash": "^0.1.4", 514 | "is-glob": "^4.0.0", 515 | "is-path-inside": "^3.0.3", 516 | "json-stable-stringify-without-jsonify": "^1.0.1", 517 | "levn": "^0.4.1", 518 | "lodash.merge": "^4.6.2", 519 | "minimatch": "^3.1.2", 520 | "natural-compare": "^1.4.0", 521 | "optionator": "^0.9.3", 522 | "strip-ansi": "^6.0.1", 523 | "text-table": "^0.2.0" 524 | }, 525 | "bin": { 526 | "eslint": "bin/eslint.js" 527 | }, 528 | "engines": { 529 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 530 | }, 531 | "funding": { 532 | "url": "https://eslint.org/donate" 533 | } 534 | }, 535 | "node_modules/eslint-scope": { 536 | "version": "8.0.2", 537 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", 538 | "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", 539 | "dev": true, 540 | "dependencies": { 541 | "esrecurse": "^4.3.0", 542 | "estraverse": "^5.2.0" 543 | }, 544 | "engines": { 545 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 546 | }, 547 | "funding": { 548 | "url": "https://opencollective.com/eslint" 549 | } 550 | }, 551 | "node_modules/eslint-visitor-keys": { 552 | "version": "4.0.0", 553 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 554 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 555 | "dev": true, 556 | "engines": { 557 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 558 | }, 559 | "funding": { 560 | "url": "https://opencollective.com/eslint" 561 | } 562 | }, 563 | "node_modules/eslint/node_modules/ansi-styles": { 564 | "version": "4.3.0", 565 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 566 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 567 | "dev": true, 568 | "dependencies": { 569 | "color-convert": "^2.0.1" 570 | }, 571 | "engines": { 572 | "node": ">=8" 573 | }, 574 | "funding": { 575 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 576 | } 577 | }, 578 | "node_modules/eslint/node_modules/chalk": { 579 | "version": "4.1.2", 580 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 581 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 582 | "dev": true, 583 | "dependencies": { 584 | "ansi-styles": "^4.1.0", 585 | "supports-color": "^7.1.0" 586 | }, 587 | "engines": { 588 | "node": ">=10" 589 | }, 590 | "funding": { 591 | "url": "https://github.com/chalk/chalk?sponsor=1" 592 | } 593 | }, 594 | "node_modules/eslint/node_modules/debug": { 595 | "version": "4.3.4", 596 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 597 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 598 | "dev": true, 599 | "dependencies": { 600 | "ms": "2.1.2" 601 | }, 602 | "engines": { 603 | "node": ">=6.0" 604 | }, 605 | "peerDependenciesMeta": { 606 | "supports-color": { 607 | "optional": true 608 | } 609 | } 610 | }, 611 | "node_modules/eslint/node_modules/escape-string-regexp": { 612 | "version": "4.0.0", 613 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 614 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 615 | "dev": true, 616 | "engines": { 617 | "node": ">=10" 618 | }, 619 | "funding": { 620 | "url": "https://github.com/sponsors/sindresorhus" 621 | } 622 | }, 623 | "node_modules/eslint/node_modules/find-up": { 624 | "version": "5.0.0", 625 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 626 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 627 | "dev": true, 628 | "dependencies": { 629 | "locate-path": "^6.0.0", 630 | "path-exists": "^4.0.0" 631 | }, 632 | "engines": { 633 | "node": ">=10" 634 | }, 635 | "funding": { 636 | "url": "https://github.com/sponsors/sindresorhus" 637 | } 638 | }, 639 | "node_modules/eslint/node_modules/glob-parent": { 640 | "version": "6.0.2", 641 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 642 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 643 | "dev": true, 644 | "dependencies": { 645 | "is-glob": "^4.0.3" 646 | }, 647 | "engines": { 648 | "node": ">=10.13.0" 649 | } 650 | }, 651 | "node_modules/eslint/node_modules/has-flag": { 652 | "version": "4.0.0", 653 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 654 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 655 | "dev": true, 656 | "engines": { 657 | "node": ">=8" 658 | } 659 | }, 660 | "node_modules/eslint/node_modules/locate-path": { 661 | "version": "6.0.0", 662 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 663 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 664 | "dev": true, 665 | "dependencies": { 666 | "p-locate": "^5.0.0" 667 | }, 668 | "engines": { 669 | "node": ">=10" 670 | }, 671 | "funding": { 672 | "url": "https://github.com/sponsors/sindresorhus" 673 | } 674 | }, 675 | "node_modules/eslint/node_modules/ms": { 676 | "version": "2.1.2", 677 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 678 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 679 | "dev": true 680 | }, 681 | "node_modules/eslint/node_modules/p-limit": { 682 | "version": "3.1.0", 683 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 684 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 685 | "dev": true, 686 | "dependencies": { 687 | "yocto-queue": "^0.1.0" 688 | }, 689 | "engines": { 690 | "node": ">=10" 691 | }, 692 | "funding": { 693 | "url": "https://github.com/sponsors/sindresorhus" 694 | } 695 | }, 696 | "node_modules/eslint/node_modules/p-locate": { 697 | "version": "5.0.0", 698 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 699 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 700 | "dev": true, 701 | "dependencies": { 702 | "p-limit": "^3.0.2" 703 | }, 704 | "engines": { 705 | "node": ">=10" 706 | }, 707 | "funding": { 708 | "url": "https://github.com/sponsors/sindresorhus" 709 | } 710 | }, 711 | "node_modules/eslint/node_modules/path-exists": { 712 | "version": "4.0.0", 713 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 714 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 715 | "dev": true, 716 | "engines": { 717 | "node": ">=8" 718 | } 719 | }, 720 | "node_modules/eslint/node_modules/supports-color": { 721 | "version": "7.2.0", 722 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 723 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 724 | "dev": true, 725 | "dependencies": { 726 | "has-flag": "^4.0.0" 727 | }, 728 | "engines": { 729 | "node": ">=8" 730 | } 731 | }, 732 | "node_modules/espree": { 733 | "version": "10.1.0", 734 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", 735 | "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", 736 | "dev": true, 737 | "dependencies": { 738 | "acorn": "^8.12.0", 739 | "acorn-jsx": "^5.3.2", 740 | "eslint-visitor-keys": "^4.0.0" 741 | }, 742 | "engines": { 743 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 744 | }, 745 | "funding": { 746 | "url": "https://opencollective.com/eslint" 747 | } 748 | }, 749 | "node_modules/esquery": { 750 | "version": "1.6.0", 751 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 752 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 753 | "dev": true, 754 | "dependencies": { 755 | "estraverse": "^5.1.0" 756 | }, 757 | "engines": { 758 | "node": ">=0.10" 759 | } 760 | }, 761 | "node_modules/esrecurse": { 762 | "version": "4.3.0", 763 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 764 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 765 | "dev": true, 766 | "dependencies": { 767 | "estraverse": "^5.2.0" 768 | }, 769 | "engines": { 770 | "node": ">=4.0" 771 | } 772 | }, 773 | "node_modules/estraverse": { 774 | "version": "5.3.0", 775 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 776 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 777 | "dev": true, 778 | "engines": { 779 | "node": ">=4.0" 780 | } 781 | }, 782 | "node_modules/esutils": { 783 | "version": "2.0.2", 784 | "dev": true, 785 | "engines": { 786 | "node": ">=0.10.0" 787 | } 788 | }, 789 | "node_modules/fast-deep-equal": { 790 | "version": "3.1.3", 791 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 792 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 793 | "dev": true 794 | }, 795 | "node_modules/fast-json-stable-stringify": { 796 | "version": "2.1.0", 797 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 798 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 799 | "dev": true 800 | }, 801 | "node_modules/fast-levenshtein": { 802 | "version": "2.0.6", 803 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 804 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 805 | "dev": true 806 | }, 807 | "node_modules/fastq": { 808 | "version": "1.17.1", 809 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 810 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 811 | "dev": true, 812 | "dependencies": { 813 | "reusify": "^1.0.4" 814 | } 815 | }, 816 | "node_modules/file-entry-cache": { 817 | "version": "8.0.0", 818 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 819 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 820 | "dev": true, 821 | "dependencies": { 822 | "flat-cache": "^4.0.0" 823 | }, 824 | "engines": { 825 | "node": ">=16.0.0" 826 | } 827 | }, 828 | "node_modules/fill-range": { 829 | "version": "7.1.1", 830 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 831 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 832 | "dev": true, 833 | "license": "MIT", 834 | "dependencies": { 835 | "to-regex-range": "^5.0.1" 836 | }, 837 | "engines": { 838 | "node": ">=8" 839 | } 840 | }, 841 | "node_modules/flat": { 842 | "version": "5.0.2", 843 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 844 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 845 | "dev": true, 846 | "bin": { 847 | "flat": "cli.js" 848 | } 849 | }, 850 | "node_modules/flat-cache": { 851 | "version": "4.0.1", 852 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 853 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 854 | "dev": true, 855 | "dependencies": { 856 | "flatted": "^3.2.9", 857 | "keyv": "^4.5.4" 858 | }, 859 | "engines": { 860 | "node": ">=16" 861 | } 862 | }, 863 | "node_modules/flatted": { 864 | "version": "3.3.1", 865 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 866 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 867 | "dev": true 868 | }, 869 | "node_modules/fs.realpath": { 870 | "version": "1.0.0", 871 | "dev": true, 872 | "license": "ISC" 873 | }, 874 | "node_modules/fsevents": { 875 | "version": "2.3.2", 876 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 877 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 878 | "dev": true, 879 | "hasInstallScript": true, 880 | "optional": true, 881 | "os": [ 882 | "darwin" 883 | ], 884 | "engines": { 885 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 886 | } 887 | }, 888 | "node_modules/get-caller-file": { 889 | "version": "2.0.5", 890 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 891 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 892 | "dev": true, 893 | "engines": { 894 | "node": "6.* || 8.* || >= 10.*" 895 | } 896 | }, 897 | "node_modules/glob": { 898 | "version": "7.2.0", 899 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 900 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 901 | "dev": true, 902 | "dependencies": { 903 | "fs.realpath": "^1.0.0", 904 | "inflight": "^1.0.4", 905 | "inherits": "2", 906 | "minimatch": "^3.0.4", 907 | "once": "^1.3.0", 908 | "path-is-absolute": "^1.0.0" 909 | }, 910 | "engines": { 911 | "node": "*" 912 | }, 913 | "funding": { 914 | "url": "https://github.com/sponsors/isaacs" 915 | } 916 | }, 917 | "node_modules/glob-parent": { 918 | "version": "5.1.2", 919 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 920 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 921 | "dev": true, 922 | "dependencies": { 923 | "is-glob": "^4.0.1" 924 | }, 925 | "engines": { 926 | "node": ">= 6" 927 | } 928 | }, 929 | "node_modules/growl": { 930 | "version": "1.10.5", 931 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 932 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 933 | "dev": true, 934 | "engines": { 935 | "node": ">=4.x" 936 | } 937 | }, 938 | "node_modules/he": { 939 | "version": "1.2.0", 940 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 941 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 942 | "dev": true, 943 | "bin": { 944 | "he": "bin/he" 945 | } 946 | }, 947 | "node_modules/ignore": { 948 | "version": "5.3.1", 949 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 950 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 951 | "dev": true, 952 | "engines": { 953 | "node": ">= 4" 954 | } 955 | }, 956 | "node_modules/import-fresh": { 957 | "version": "3.3.0", 958 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 959 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 960 | "dev": true, 961 | "dependencies": { 962 | "parent-module": "^1.0.0", 963 | "resolve-from": "^4.0.0" 964 | }, 965 | "engines": { 966 | "node": ">=6" 967 | }, 968 | "funding": { 969 | "url": "https://github.com/sponsors/sindresorhus" 970 | } 971 | }, 972 | "node_modules/imurmurhash": { 973 | "version": "0.1.4", 974 | "dev": true, 975 | "license": "MIT", 976 | "engines": { 977 | "node": ">=0.8.19" 978 | } 979 | }, 980 | "node_modules/inflight": { 981 | "version": "1.0.6", 982 | "dev": true, 983 | "license": "ISC", 984 | "dependencies": { 985 | "once": "^1.3.0", 986 | "wrappy": "1" 987 | } 988 | }, 989 | "node_modules/inherits": { 990 | "version": "2.0.3", 991 | "dev": true, 992 | "license": "ISC" 993 | }, 994 | "node_modules/is-binary-path": { 995 | "version": "2.1.0", 996 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 997 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 998 | "dev": true, 999 | "dependencies": { 1000 | "binary-extensions": "^2.0.0" 1001 | }, 1002 | "engines": { 1003 | "node": ">=8" 1004 | } 1005 | }, 1006 | "node_modules/is-extglob": { 1007 | "version": "2.1.1", 1008 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1009 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1010 | "dev": true, 1011 | "engines": { 1012 | "node": ">=0.10.0" 1013 | } 1014 | }, 1015 | "node_modules/is-fullwidth-code-point": { 1016 | "version": "3.0.0", 1017 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1018 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1019 | "dev": true, 1020 | "engines": { 1021 | "node": ">=8" 1022 | } 1023 | }, 1024 | "node_modules/is-glob": { 1025 | "version": "4.0.3", 1026 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1027 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1028 | "dev": true, 1029 | "dependencies": { 1030 | "is-extglob": "^2.1.1" 1031 | }, 1032 | "engines": { 1033 | "node": ">=0.10.0" 1034 | } 1035 | }, 1036 | "node_modules/is-number": { 1037 | "version": "7.0.0", 1038 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1039 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1040 | "dev": true, 1041 | "license": "MIT", 1042 | "engines": { 1043 | "node": ">=0.12.0" 1044 | } 1045 | }, 1046 | "node_modules/is-path-inside": { 1047 | "version": "3.0.3", 1048 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1049 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1050 | "dev": true, 1051 | "engines": { 1052 | "node": ">=8" 1053 | } 1054 | }, 1055 | "node_modules/is-plain-obj": { 1056 | "version": "2.1.0", 1057 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1058 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 1059 | "dev": true, 1060 | "engines": { 1061 | "node": ">=8" 1062 | } 1063 | }, 1064 | "node_modules/is-unicode-supported": { 1065 | "version": "0.1.0", 1066 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 1067 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 1068 | "dev": true, 1069 | "engines": { 1070 | "node": ">=10" 1071 | }, 1072 | "funding": { 1073 | "url": "https://github.com/sponsors/sindresorhus" 1074 | } 1075 | }, 1076 | "node_modules/isexe": { 1077 | "version": "2.0.0", 1078 | "dev": true, 1079 | "license": "ISC" 1080 | }, 1081 | "node_modules/json-buffer": { 1082 | "version": "3.0.1", 1083 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1084 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1085 | "dev": true 1086 | }, 1087 | "node_modules/json-schema-traverse": { 1088 | "version": "0.4.1", 1089 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1090 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1091 | "dev": true 1092 | }, 1093 | "node_modules/json-stable-stringify-without-jsonify": { 1094 | "version": "1.0.1", 1095 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1096 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1097 | "dev": true 1098 | }, 1099 | "node_modules/keyv": { 1100 | "version": "4.5.4", 1101 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1102 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1103 | "dev": true, 1104 | "dependencies": { 1105 | "json-buffer": "3.0.1" 1106 | } 1107 | }, 1108 | "node_modules/levn": { 1109 | "version": "0.4.1", 1110 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1111 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1112 | "dev": true, 1113 | "dependencies": { 1114 | "prelude-ls": "^1.2.1", 1115 | "type-check": "~0.4.0" 1116 | }, 1117 | "engines": { 1118 | "node": ">= 0.8.0" 1119 | } 1120 | }, 1121 | "node_modules/lodash.merge": { 1122 | "version": "4.6.2", 1123 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1124 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1125 | "dev": true 1126 | }, 1127 | "node_modules/log-symbols": { 1128 | "version": "4.1.0", 1129 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 1130 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 1131 | "dev": true, 1132 | "dependencies": { 1133 | "chalk": "^4.1.0", 1134 | "is-unicode-supported": "^0.1.0" 1135 | }, 1136 | "engines": { 1137 | "node": ">=10" 1138 | }, 1139 | "funding": { 1140 | "url": "https://github.com/sponsors/sindresorhus" 1141 | } 1142 | }, 1143 | "node_modules/log-symbols/node_modules/ansi-styles": { 1144 | "version": "4.3.0", 1145 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1146 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "color-convert": "^2.0.1" 1150 | }, 1151 | "engines": { 1152 | "node": ">=8" 1153 | }, 1154 | "funding": { 1155 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1156 | } 1157 | }, 1158 | "node_modules/log-symbols/node_modules/chalk": { 1159 | "version": "4.1.2", 1160 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1161 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1162 | "dev": true, 1163 | "dependencies": { 1164 | "ansi-styles": "^4.1.0", 1165 | "supports-color": "^7.1.0" 1166 | }, 1167 | "engines": { 1168 | "node": ">=10" 1169 | }, 1170 | "funding": { 1171 | "url": "https://github.com/chalk/chalk?sponsor=1" 1172 | } 1173 | }, 1174 | "node_modules/log-symbols/node_modules/has-flag": { 1175 | "version": "4.0.0", 1176 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1177 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1178 | "dev": true, 1179 | "engines": { 1180 | "node": ">=8" 1181 | } 1182 | }, 1183 | "node_modules/log-symbols/node_modules/supports-color": { 1184 | "version": "7.2.0", 1185 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1186 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1187 | "dev": true, 1188 | "dependencies": { 1189 | "has-flag": "^4.0.0" 1190 | }, 1191 | "engines": { 1192 | "node": ">=8" 1193 | } 1194 | }, 1195 | "node_modules/minimatch": { 1196 | "version": "3.1.2", 1197 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1198 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1199 | "dev": true, 1200 | "dependencies": { 1201 | "brace-expansion": "^1.1.7" 1202 | }, 1203 | "engines": { 1204 | "node": "*" 1205 | } 1206 | }, 1207 | "node_modules/mocha": { 1208 | "version": "9.2.2", 1209 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", 1210 | "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", 1211 | "dev": true, 1212 | "dependencies": { 1213 | "@ungap/promise-all-settled": "1.1.2", 1214 | "ansi-colors": "4.1.1", 1215 | "browser-stdout": "1.3.1", 1216 | "chokidar": "3.5.3", 1217 | "debug": "4.3.3", 1218 | "diff": "5.0.0", 1219 | "escape-string-regexp": "4.0.0", 1220 | "find-up": "5.0.0", 1221 | "glob": "7.2.0", 1222 | "growl": "1.10.5", 1223 | "he": "1.2.0", 1224 | "js-yaml": "4.1.0", 1225 | "log-symbols": "4.1.0", 1226 | "minimatch": "4.2.1", 1227 | "ms": "2.1.3", 1228 | "nanoid": "3.3.1", 1229 | "serialize-javascript": "6.0.0", 1230 | "strip-json-comments": "3.1.1", 1231 | "supports-color": "8.1.1", 1232 | "which": "2.0.2", 1233 | "workerpool": "6.2.0", 1234 | "yargs": "16.2.0", 1235 | "yargs-parser": "20.2.4", 1236 | "yargs-unparser": "2.0.0" 1237 | }, 1238 | "bin": { 1239 | "_mocha": "bin/_mocha", 1240 | "mocha": "bin/mocha" 1241 | }, 1242 | "engines": { 1243 | "node": ">= 12.0.0" 1244 | }, 1245 | "funding": { 1246 | "type": "opencollective", 1247 | "url": "https://opencollective.com/mochajs" 1248 | } 1249 | }, 1250 | "node_modules/mocha/node_modules/ansi-styles": { 1251 | "version": "4.3.0", 1252 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1253 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1254 | "dev": true, 1255 | "dependencies": { 1256 | "color-convert": "^2.0.1" 1257 | }, 1258 | "engines": { 1259 | "node": ">=8" 1260 | }, 1261 | "funding": { 1262 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1263 | } 1264 | }, 1265 | "node_modules/mocha/node_modules/argparse": { 1266 | "version": "2.0.1", 1267 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1268 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1269 | "dev": true 1270 | }, 1271 | "node_modules/mocha/node_modules/cliui": { 1272 | "version": "7.0.4", 1273 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1274 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1275 | "dev": true, 1276 | "dependencies": { 1277 | "string-width": "^4.2.0", 1278 | "strip-ansi": "^6.0.0", 1279 | "wrap-ansi": "^7.0.0" 1280 | } 1281 | }, 1282 | "node_modules/mocha/node_modules/debug": { 1283 | "version": "4.3.3", 1284 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1285 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1286 | "dev": true, 1287 | "dependencies": { 1288 | "ms": "2.1.2" 1289 | }, 1290 | "engines": { 1291 | "node": ">=6.0" 1292 | }, 1293 | "peerDependenciesMeta": { 1294 | "supports-color": { 1295 | "optional": true 1296 | } 1297 | } 1298 | }, 1299 | "node_modules/mocha/node_modules/debug/node_modules/ms": { 1300 | "version": "2.1.2", 1301 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1302 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1303 | "dev": true 1304 | }, 1305 | "node_modules/mocha/node_modules/escape-string-regexp": { 1306 | "version": "4.0.0", 1307 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1308 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1309 | "dev": true, 1310 | "engines": { 1311 | "node": ">=10" 1312 | }, 1313 | "funding": { 1314 | "url": "https://github.com/sponsors/sindresorhus" 1315 | } 1316 | }, 1317 | "node_modules/mocha/node_modules/find-up": { 1318 | "version": "5.0.0", 1319 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1320 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1321 | "dev": true, 1322 | "dependencies": { 1323 | "locate-path": "^6.0.0", 1324 | "path-exists": "^4.0.0" 1325 | }, 1326 | "engines": { 1327 | "node": ">=10" 1328 | }, 1329 | "funding": { 1330 | "url": "https://github.com/sponsors/sindresorhus" 1331 | } 1332 | }, 1333 | "node_modules/mocha/node_modules/has-flag": { 1334 | "version": "4.0.0", 1335 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1336 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1337 | "dev": true, 1338 | "engines": { 1339 | "node": ">=8" 1340 | } 1341 | }, 1342 | "node_modules/mocha/node_modules/js-yaml": { 1343 | "version": "4.1.0", 1344 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1345 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1346 | "dev": true, 1347 | "dependencies": { 1348 | "argparse": "^2.0.1" 1349 | }, 1350 | "bin": { 1351 | "js-yaml": "bin/js-yaml.js" 1352 | } 1353 | }, 1354 | "node_modules/mocha/node_modules/locate-path": { 1355 | "version": "6.0.0", 1356 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1357 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1358 | "dev": true, 1359 | "dependencies": { 1360 | "p-locate": "^5.0.0" 1361 | }, 1362 | "engines": { 1363 | "node": ">=10" 1364 | }, 1365 | "funding": { 1366 | "url": "https://github.com/sponsors/sindresorhus" 1367 | } 1368 | }, 1369 | "node_modules/mocha/node_modules/minimatch": { 1370 | "version": "4.2.1", 1371 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", 1372 | "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", 1373 | "dev": true, 1374 | "dependencies": { 1375 | "brace-expansion": "^1.1.7" 1376 | }, 1377 | "engines": { 1378 | "node": ">=10" 1379 | } 1380 | }, 1381 | "node_modules/mocha/node_modules/ms": { 1382 | "version": "2.1.3", 1383 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1384 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1385 | "dev": true 1386 | }, 1387 | "node_modules/mocha/node_modules/p-limit": { 1388 | "version": "3.1.0", 1389 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1390 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1391 | "dev": true, 1392 | "dependencies": { 1393 | "yocto-queue": "^0.1.0" 1394 | }, 1395 | "engines": { 1396 | "node": ">=10" 1397 | }, 1398 | "funding": { 1399 | "url": "https://github.com/sponsors/sindresorhus" 1400 | } 1401 | }, 1402 | "node_modules/mocha/node_modules/p-locate": { 1403 | "version": "5.0.0", 1404 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1405 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "p-limit": "^3.0.2" 1409 | }, 1410 | "engines": { 1411 | "node": ">=10" 1412 | }, 1413 | "funding": { 1414 | "url": "https://github.com/sponsors/sindresorhus" 1415 | } 1416 | }, 1417 | "node_modules/mocha/node_modules/path-exists": { 1418 | "version": "4.0.0", 1419 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1420 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1421 | "dev": true, 1422 | "engines": { 1423 | "node": ">=8" 1424 | } 1425 | }, 1426 | "node_modules/mocha/node_modules/supports-color": { 1427 | "version": "8.1.1", 1428 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 1429 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 1430 | "dev": true, 1431 | "dependencies": { 1432 | "has-flag": "^4.0.0" 1433 | }, 1434 | "engines": { 1435 | "node": ">=10" 1436 | }, 1437 | "funding": { 1438 | "url": "https://github.com/chalk/supports-color?sponsor=1" 1439 | } 1440 | }, 1441 | "node_modules/mocha/node_modules/which": { 1442 | "version": "2.0.2", 1443 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1444 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1445 | "dev": true, 1446 | "dependencies": { 1447 | "isexe": "^2.0.0" 1448 | }, 1449 | "bin": { 1450 | "node-which": "bin/node-which" 1451 | }, 1452 | "engines": { 1453 | "node": ">= 8" 1454 | } 1455 | }, 1456 | "node_modules/mocha/node_modules/wrap-ansi": { 1457 | "version": "7.0.0", 1458 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1459 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1460 | "dev": true, 1461 | "dependencies": { 1462 | "ansi-styles": "^4.0.0", 1463 | "string-width": "^4.1.0", 1464 | "strip-ansi": "^6.0.0" 1465 | }, 1466 | "engines": { 1467 | "node": ">=10" 1468 | }, 1469 | "funding": { 1470 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1471 | } 1472 | }, 1473 | "node_modules/mocha/node_modules/y18n": { 1474 | "version": "5.0.8", 1475 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1476 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1477 | "dev": true, 1478 | "engines": { 1479 | "node": ">=10" 1480 | } 1481 | }, 1482 | "node_modules/mocha/node_modules/yargs": { 1483 | "version": "16.2.0", 1484 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1485 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1486 | "dev": true, 1487 | "dependencies": { 1488 | "cliui": "^7.0.2", 1489 | "escalade": "^3.1.1", 1490 | "get-caller-file": "^2.0.5", 1491 | "require-directory": "^2.1.1", 1492 | "string-width": "^4.2.0", 1493 | "y18n": "^5.0.5", 1494 | "yargs-parser": "^20.2.2" 1495 | }, 1496 | "engines": { 1497 | "node": ">=10" 1498 | } 1499 | }, 1500 | "node_modules/mocha/node_modules/yargs-parser": { 1501 | "version": "20.2.4", 1502 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 1503 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 1504 | "dev": true, 1505 | "engines": { 1506 | "node": ">=10" 1507 | } 1508 | }, 1509 | "node_modules/nanoid": { 1510 | "version": "3.3.1", 1511 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 1512 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 1513 | "dev": true, 1514 | "bin": { 1515 | "nanoid": "bin/nanoid.cjs" 1516 | }, 1517 | "engines": { 1518 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1519 | } 1520 | }, 1521 | "node_modules/natural-compare": { 1522 | "version": "1.4.0", 1523 | "dev": true, 1524 | "license": "MIT" 1525 | }, 1526 | "node_modules/normalize-path": { 1527 | "version": "3.0.0", 1528 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1529 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1530 | "dev": true, 1531 | "engines": { 1532 | "node": ">=0.10.0" 1533 | } 1534 | }, 1535 | "node_modules/once": { 1536 | "version": "1.4.0", 1537 | "dev": true, 1538 | "license": "ISC", 1539 | "dependencies": { 1540 | "wrappy": "1" 1541 | } 1542 | }, 1543 | "node_modules/optionator": { 1544 | "version": "0.9.4", 1545 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 1546 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 1547 | "dev": true, 1548 | "dependencies": { 1549 | "deep-is": "^0.1.3", 1550 | "fast-levenshtein": "^2.0.6", 1551 | "levn": "^0.4.1", 1552 | "prelude-ls": "^1.2.1", 1553 | "type-check": "^0.4.0", 1554 | "word-wrap": "^1.2.5" 1555 | }, 1556 | "engines": { 1557 | "node": ">= 0.8.0" 1558 | } 1559 | }, 1560 | "node_modules/parent-module": { 1561 | "version": "1.0.1", 1562 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1563 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1564 | "dev": true, 1565 | "dependencies": { 1566 | "callsites": "^3.0.0" 1567 | }, 1568 | "engines": { 1569 | "node": ">=6" 1570 | } 1571 | }, 1572 | "node_modules/path-is-absolute": { 1573 | "version": "1.0.1", 1574 | "dev": true, 1575 | "license": "MIT", 1576 | "engines": { 1577 | "node": ">=0.10.0" 1578 | } 1579 | }, 1580 | "node_modules/path-key": { 1581 | "version": "3.1.1", 1582 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1583 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1584 | "dev": true, 1585 | "engines": { 1586 | "node": ">=8" 1587 | } 1588 | }, 1589 | "node_modules/picomatch": { 1590 | "version": "2.3.1", 1591 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1592 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1593 | "dev": true, 1594 | "engines": { 1595 | "node": ">=8.6" 1596 | }, 1597 | "funding": { 1598 | "url": "https://github.com/sponsors/jonschlinkert" 1599 | } 1600 | }, 1601 | "node_modules/prelude-ls": { 1602 | "version": "1.2.1", 1603 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1604 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1605 | "dev": true, 1606 | "engines": { 1607 | "node": ">= 0.8.0" 1608 | } 1609 | }, 1610 | "node_modules/punycode": { 1611 | "version": "2.3.1", 1612 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1613 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1614 | "dev": true, 1615 | "engines": { 1616 | "node": ">=6" 1617 | } 1618 | }, 1619 | "node_modules/queue-microtask": { 1620 | "version": "1.2.3", 1621 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1622 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1623 | "dev": true, 1624 | "funding": [ 1625 | { 1626 | "type": "github", 1627 | "url": "https://github.com/sponsors/feross" 1628 | }, 1629 | { 1630 | "type": "patreon", 1631 | "url": "https://www.patreon.com/feross" 1632 | }, 1633 | { 1634 | "type": "consulting", 1635 | "url": "https://feross.org/support" 1636 | } 1637 | ] 1638 | }, 1639 | "node_modules/randombytes": { 1640 | "version": "2.1.0", 1641 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1642 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1643 | "dev": true, 1644 | "dependencies": { 1645 | "safe-buffer": "^5.1.0" 1646 | } 1647 | }, 1648 | "node_modules/readdirp": { 1649 | "version": "3.6.0", 1650 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1651 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1652 | "dev": true, 1653 | "dependencies": { 1654 | "picomatch": "^2.2.1" 1655 | }, 1656 | "engines": { 1657 | "node": ">=8.10.0" 1658 | } 1659 | }, 1660 | "node_modules/require-directory": { 1661 | "version": "2.1.1", 1662 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1663 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1664 | "dev": true, 1665 | "engines": { 1666 | "node": ">=0.10.0" 1667 | } 1668 | }, 1669 | "node_modules/resolve-from": { 1670 | "version": "4.0.0", 1671 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1672 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1673 | "dev": true, 1674 | "engines": { 1675 | "node": ">=4" 1676 | } 1677 | }, 1678 | "node_modules/reusify": { 1679 | "version": "1.0.4", 1680 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1681 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1682 | "dev": true, 1683 | "engines": { 1684 | "iojs": ">=1.0.0", 1685 | "node": ">=0.10.0" 1686 | } 1687 | }, 1688 | "node_modules/run-parallel": { 1689 | "version": "1.2.0", 1690 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1691 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1692 | "dev": true, 1693 | "funding": [ 1694 | { 1695 | "type": "github", 1696 | "url": "https://github.com/sponsors/feross" 1697 | }, 1698 | { 1699 | "type": "patreon", 1700 | "url": "https://www.patreon.com/feross" 1701 | }, 1702 | { 1703 | "type": "consulting", 1704 | "url": "https://feross.org/support" 1705 | } 1706 | ], 1707 | "dependencies": { 1708 | "queue-microtask": "^1.2.2" 1709 | } 1710 | }, 1711 | "node_modules/safe-buffer": { 1712 | "version": "5.1.2", 1713 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1714 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1715 | "dev": true 1716 | }, 1717 | "node_modules/serialize-javascript": { 1718 | "version": "6.0.0", 1719 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 1720 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 1721 | "dev": true, 1722 | "dependencies": { 1723 | "randombytes": "^2.1.0" 1724 | } 1725 | }, 1726 | "node_modules/shebang-command": { 1727 | "version": "2.0.0", 1728 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1729 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1730 | "dev": true, 1731 | "dependencies": { 1732 | "shebang-regex": "^3.0.0" 1733 | }, 1734 | "engines": { 1735 | "node": ">=8" 1736 | } 1737 | }, 1738 | "node_modules/shebang-regex": { 1739 | "version": "3.0.0", 1740 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1741 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1742 | "dev": true, 1743 | "engines": { 1744 | "node": ">=8" 1745 | } 1746 | }, 1747 | "node_modules/string-width": { 1748 | "version": "4.2.3", 1749 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1750 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1751 | "dev": true, 1752 | "dependencies": { 1753 | "emoji-regex": "^8.0.0", 1754 | "is-fullwidth-code-point": "^3.0.0", 1755 | "strip-ansi": "^6.0.1" 1756 | }, 1757 | "engines": { 1758 | "node": ">=8" 1759 | } 1760 | }, 1761 | "node_modules/strip-ansi": { 1762 | "version": "6.0.1", 1763 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1764 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1765 | "dev": true, 1766 | "dependencies": { 1767 | "ansi-regex": "^5.0.1" 1768 | }, 1769 | "engines": { 1770 | "node": ">=8" 1771 | } 1772 | }, 1773 | "node_modules/strip-json-comments": { 1774 | "version": "3.1.1", 1775 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1776 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1777 | "dev": true, 1778 | "engines": { 1779 | "node": ">=8" 1780 | }, 1781 | "funding": { 1782 | "url": "https://github.com/sponsors/sindresorhus" 1783 | } 1784 | }, 1785 | "node_modules/text-table": { 1786 | "version": "0.2.0", 1787 | "dev": true, 1788 | "license": "MIT" 1789 | }, 1790 | "node_modules/to-regex-range": { 1791 | "version": "5.0.1", 1792 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1793 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1794 | "dev": true, 1795 | "license": "MIT", 1796 | "dependencies": { 1797 | "is-number": "^7.0.0" 1798 | }, 1799 | "engines": { 1800 | "node": ">=8.0" 1801 | } 1802 | }, 1803 | "node_modules/type-check": { 1804 | "version": "0.4.0", 1805 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1806 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1807 | "dev": true, 1808 | "dependencies": { 1809 | "prelude-ls": "^1.2.1" 1810 | }, 1811 | "engines": { 1812 | "node": ">= 0.8.0" 1813 | } 1814 | }, 1815 | "node_modules/uri-js": { 1816 | "version": "4.4.1", 1817 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1818 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1819 | "dev": true, 1820 | "dependencies": { 1821 | "punycode": "^2.1.0" 1822 | } 1823 | }, 1824 | "node_modules/word-wrap": { 1825 | "version": "1.2.5", 1826 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 1827 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 1828 | "dev": true, 1829 | "engines": { 1830 | "node": ">=0.10.0" 1831 | } 1832 | }, 1833 | "node_modules/workerpool": { 1834 | "version": "6.2.0", 1835 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", 1836 | "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", 1837 | "dev": true 1838 | }, 1839 | "node_modules/wrappy": { 1840 | "version": "1.0.2", 1841 | "dev": true, 1842 | "license": "ISC" 1843 | }, 1844 | "node_modules/yargs-unparser": { 1845 | "version": "2.0.0", 1846 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 1847 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 1848 | "dev": true, 1849 | "dependencies": { 1850 | "camelcase": "^6.0.0", 1851 | "decamelize": "^4.0.0", 1852 | "flat": "^5.0.2", 1853 | "is-plain-obj": "^2.1.0" 1854 | }, 1855 | "engines": { 1856 | "node": ">=10" 1857 | } 1858 | }, 1859 | "node_modules/yargs-unparser/node_modules/camelcase": { 1860 | "version": "6.3.0", 1861 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 1862 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 1863 | "dev": true, 1864 | "engines": { 1865 | "node": ">=10" 1866 | }, 1867 | "funding": { 1868 | "url": "https://github.com/sponsors/sindresorhus" 1869 | } 1870 | }, 1871 | "node_modules/yargs-unparser/node_modules/decamelize": { 1872 | "version": "4.0.0", 1873 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 1874 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 1875 | "dev": true, 1876 | "engines": { 1877 | "node": ">=10" 1878 | }, 1879 | "funding": { 1880 | "url": "https://github.com/sponsors/sindresorhus" 1881 | } 1882 | }, 1883 | "node_modules/yocto-queue": { 1884 | "version": "0.1.0", 1885 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1886 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1887 | "dev": true, 1888 | "engines": { 1889 | "node": ">=10" 1890 | }, 1891 | "funding": { 1892 | "url": "https://github.com/sponsors/sindresorhus" 1893 | } 1894 | } 1895 | }, 1896 | "dependencies": { 1897 | "@eslint-community/eslint-utils": { 1898 | "version": "4.4.0", 1899 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 1900 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 1901 | "dev": true, 1902 | "requires": { 1903 | "eslint-visitor-keys": "^3.3.0" 1904 | }, 1905 | "dependencies": { 1906 | "eslint-visitor-keys": { 1907 | "version": "3.4.3", 1908 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1909 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1910 | "dev": true 1911 | } 1912 | } 1913 | }, 1914 | "@eslint-community/regexpp": { 1915 | "version": "4.11.0", 1916 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", 1917 | "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", 1918 | "dev": true 1919 | }, 1920 | "@eslint/config-array": { 1921 | "version": "0.17.1", 1922 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", 1923 | "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", 1924 | "dev": true, 1925 | "requires": { 1926 | "@eslint/object-schema": "^2.1.4", 1927 | "debug": "^4.3.1", 1928 | "minimatch": "^3.1.2" 1929 | }, 1930 | "dependencies": { 1931 | "debug": { 1932 | "version": "4.3.6", 1933 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 1934 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 1935 | "dev": true, 1936 | "requires": { 1937 | "ms": "2.1.2" 1938 | } 1939 | }, 1940 | "ms": { 1941 | "version": "2.1.2", 1942 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1943 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1944 | "dev": true 1945 | } 1946 | } 1947 | }, 1948 | "@eslint/eslintrc": { 1949 | "version": "3.1.0", 1950 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", 1951 | "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", 1952 | "dev": true, 1953 | "requires": { 1954 | "ajv": "^6.12.4", 1955 | "debug": "^4.3.2", 1956 | "espree": "^10.0.1", 1957 | "globals": "^14.0.0", 1958 | "ignore": "^5.2.0", 1959 | "import-fresh": "^3.2.1", 1960 | "js-yaml": "^4.1.0", 1961 | "minimatch": "^3.1.2", 1962 | "strip-json-comments": "^3.1.1" 1963 | }, 1964 | "dependencies": { 1965 | "argparse": { 1966 | "version": "2.0.1", 1967 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1968 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1969 | "dev": true 1970 | }, 1971 | "debug": { 1972 | "version": "4.3.6", 1973 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 1974 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 1975 | "dev": true, 1976 | "requires": { 1977 | "ms": "2.1.2" 1978 | } 1979 | }, 1980 | "globals": { 1981 | "version": "14.0.0", 1982 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 1983 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 1984 | "dev": true 1985 | }, 1986 | "js-yaml": { 1987 | "version": "4.1.0", 1988 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1989 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1990 | "dev": true, 1991 | "requires": { 1992 | "argparse": "^2.0.1" 1993 | } 1994 | }, 1995 | "ms": { 1996 | "version": "2.1.2", 1997 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1998 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1999 | "dev": true 2000 | } 2001 | } 2002 | }, 2003 | "@eslint/js": { 2004 | "version": "9.8.0", 2005 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", 2006 | "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", 2007 | "dev": true 2008 | }, 2009 | "@eslint/object-schema": { 2010 | "version": "2.1.4", 2011 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", 2012 | "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", 2013 | "dev": true 2014 | }, 2015 | "@humanwhocodes/module-importer": { 2016 | "version": "1.0.1", 2017 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 2018 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 2019 | "dev": true 2020 | }, 2021 | "@humanwhocodes/retry": { 2022 | "version": "0.3.0", 2023 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", 2024 | "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", 2025 | "dev": true 2026 | }, 2027 | "@nodelib/fs.scandir": { 2028 | "version": "2.1.5", 2029 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2030 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2031 | "dev": true, 2032 | "requires": { 2033 | "@nodelib/fs.stat": "2.0.5", 2034 | "run-parallel": "^1.1.9" 2035 | } 2036 | }, 2037 | "@nodelib/fs.stat": { 2038 | "version": "2.0.5", 2039 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2040 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2041 | "dev": true 2042 | }, 2043 | "@nodelib/fs.walk": { 2044 | "version": "1.2.8", 2045 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2046 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2047 | "dev": true, 2048 | "requires": { 2049 | "@nodelib/fs.scandir": "2.1.5", 2050 | "fastq": "^1.6.0" 2051 | } 2052 | }, 2053 | "@ungap/promise-all-settled": { 2054 | "version": "1.1.2", 2055 | "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", 2056 | "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", 2057 | "dev": true 2058 | }, 2059 | "acorn": { 2060 | "version": "8.12.1", 2061 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", 2062 | "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", 2063 | "dev": true 2064 | }, 2065 | "acorn-jsx": { 2066 | "version": "5.3.2", 2067 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2068 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2069 | "dev": true, 2070 | "requires": {} 2071 | }, 2072 | "ajv": { 2073 | "version": "6.12.6", 2074 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2075 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2076 | "dev": true, 2077 | "requires": { 2078 | "fast-deep-equal": "^3.1.1", 2079 | "fast-json-stable-stringify": "^2.0.0", 2080 | "json-schema-traverse": "^0.4.1", 2081 | "uri-js": "^4.2.2" 2082 | } 2083 | }, 2084 | "ansi-colors": { 2085 | "version": "4.1.1", 2086 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 2087 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 2088 | "dev": true 2089 | }, 2090 | "ansi-regex": { 2091 | "version": "5.0.1", 2092 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2093 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2094 | "dev": true 2095 | }, 2096 | "anymatch": { 2097 | "version": "3.1.2", 2098 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 2099 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 2100 | "dev": true, 2101 | "requires": { 2102 | "normalize-path": "^3.0.0", 2103 | "picomatch": "^2.0.4" 2104 | } 2105 | }, 2106 | "balanced-match": { 2107 | "version": "0.4.2", 2108 | "dev": true 2109 | }, 2110 | "binary-extensions": { 2111 | "version": "2.2.0", 2112 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2113 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2114 | "dev": true 2115 | }, 2116 | "brace-expansion": { 2117 | "version": "1.1.7", 2118 | "dev": true, 2119 | "requires": { 2120 | "balanced-match": "^0.4.1", 2121 | "concat-map": "0.0.1" 2122 | } 2123 | }, 2124 | "braces": { 2125 | "version": "3.0.3", 2126 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 2127 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 2128 | "dev": true, 2129 | "requires": { 2130 | "fill-range": "^7.1.1" 2131 | } 2132 | }, 2133 | "browser-stdout": { 2134 | "version": "1.3.1", 2135 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 2136 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 2137 | "dev": true 2138 | }, 2139 | "callsites": { 2140 | "version": "3.1.0", 2141 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2142 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2143 | "dev": true 2144 | }, 2145 | "chokidar": { 2146 | "version": "3.5.3", 2147 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2148 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2149 | "dev": true, 2150 | "requires": { 2151 | "anymatch": "~3.1.2", 2152 | "braces": "~3.0.2", 2153 | "fsevents": "~2.3.2", 2154 | "glob-parent": "~5.1.2", 2155 | "is-binary-path": "~2.1.0", 2156 | "is-glob": "~4.0.1", 2157 | "normalize-path": "~3.0.0", 2158 | "readdirp": "~3.6.0" 2159 | } 2160 | }, 2161 | "color-convert": { 2162 | "version": "2.0.1", 2163 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2164 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2165 | "dev": true, 2166 | "requires": { 2167 | "color-name": "~1.1.4" 2168 | } 2169 | }, 2170 | "color-name": { 2171 | "version": "1.1.4", 2172 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2173 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2174 | "dev": true 2175 | }, 2176 | "concat-map": { 2177 | "version": "0.0.1", 2178 | "dev": true 2179 | }, 2180 | "cross-spawn": { 2181 | "version": "7.0.3", 2182 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 2183 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 2184 | "dev": true, 2185 | "requires": { 2186 | "path-key": "^3.1.0", 2187 | "shebang-command": "^2.0.0", 2188 | "which": "^2.0.1" 2189 | }, 2190 | "dependencies": { 2191 | "which": { 2192 | "version": "2.0.2", 2193 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2194 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2195 | "dev": true, 2196 | "requires": { 2197 | "isexe": "^2.0.0" 2198 | } 2199 | } 2200 | } 2201 | }, 2202 | "deep-is": { 2203 | "version": "0.1.4", 2204 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2205 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2206 | "dev": true 2207 | }, 2208 | "diff": { 2209 | "version": "5.0.0", 2210 | "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", 2211 | "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", 2212 | "dev": true 2213 | }, 2214 | "emoji-regex": { 2215 | "version": "8.0.0", 2216 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2217 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2218 | "dev": true 2219 | }, 2220 | "escalade": { 2221 | "version": "3.1.1", 2222 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2223 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2224 | "dev": true 2225 | }, 2226 | "eslint": { 2227 | "version": "9.8.0", 2228 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", 2229 | "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", 2230 | "dev": true, 2231 | "requires": { 2232 | "@eslint-community/eslint-utils": "^4.2.0", 2233 | "@eslint-community/regexpp": "^4.11.0", 2234 | "@eslint/config-array": "^0.17.1", 2235 | "@eslint/eslintrc": "^3.1.0", 2236 | "@eslint/js": "9.8.0", 2237 | "@humanwhocodes/module-importer": "^1.0.1", 2238 | "@humanwhocodes/retry": "^0.3.0", 2239 | "@nodelib/fs.walk": "^1.2.8", 2240 | "ajv": "^6.12.4", 2241 | "chalk": "^4.0.0", 2242 | "cross-spawn": "^7.0.2", 2243 | "debug": "^4.3.2", 2244 | "escape-string-regexp": "^4.0.0", 2245 | "eslint-scope": "^8.0.2", 2246 | "eslint-visitor-keys": "^4.0.0", 2247 | "espree": "^10.1.0", 2248 | "esquery": "^1.5.0", 2249 | "esutils": "^2.0.2", 2250 | "fast-deep-equal": "^3.1.3", 2251 | "file-entry-cache": "^8.0.0", 2252 | "find-up": "^5.0.0", 2253 | "glob-parent": "^6.0.2", 2254 | "ignore": "^5.2.0", 2255 | "imurmurhash": "^0.1.4", 2256 | "is-glob": "^4.0.0", 2257 | "is-path-inside": "^3.0.3", 2258 | "json-stable-stringify-without-jsonify": "^1.0.1", 2259 | "levn": "^0.4.1", 2260 | "lodash.merge": "^4.6.2", 2261 | "minimatch": "^3.1.2", 2262 | "natural-compare": "^1.4.0", 2263 | "optionator": "^0.9.3", 2264 | "strip-ansi": "^6.0.1", 2265 | "text-table": "^0.2.0" 2266 | }, 2267 | "dependencies": { 2268 | "ansi-styles": { 2269 | "version": "4.3.0", 2270 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2271 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2272 | "dev": true, 2273 | "requires": { 2274 | "color-convert": "^2.0.1" 2275 | } 2276 | }, 2277 | "chalk": { 2278 | "version": "4.1.2", 2279 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2280 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2281 | "dev": true, 2282 | "requires": { 2283 | "ansi-styles": "^4.1.0", 2284 | "supports-color": "^7.1.0" 2285 | } 2286 | }, 2287 | "debug": { 2288 | "version": "4.3.4", 2289 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2290 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2291 | "dev": true, 2292 | "requires": { 2293 | "ms": "2.1.2" 2294 | } 2295 | }, 2296 | "escape-string-regexp": { 2297 | "version": "4.0.0", 2298 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2299 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2300 | "dev": true 2301 | }, 2302 | "find-up": { 2303 | "version": "5.0.0", 2304 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2305 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2306 | "dev": true, 2307 | "requires": { 2308 | "locate-path": "^6.0.0", 2309 | "path-exists": "^4.0.0" 2310 | } 2311 | }, 2312 | "glob-parent": { 2313 | "version": "6.0.2", 2314 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2315 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2316 | "dev": true, 2317 | "requires": { 2318 | "is-glob": "^4.0.3" 2319 | } 2320 | }, 2321 | "has-flag": { 2322 | "version": "4.0.0", 2323 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2324 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2325 | "dev": true 2326 | }, 2327 | "locate-path": { 2328 | "version": "6.0.0", 2329 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2330 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2331 | "dev": true, 2332 | "requires": { 2333 | "p-locate": "^5.0.0" 2334 | } 2335 | }, 2336 | "ms": { 2337 | "version": "2.1.2", 2338 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2339 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2340 | "dev": true 2341 | }, 2342 | "p-limit": { 2343 | "version": "3.1.0", 2344 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2345 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2346 | "dev": true, 2347 | "requires": { 2348 | "yocto-queue": "^0.1.0" 2349 | } 2350 | }, 2351 | "p-locate": { 2352 | "version": "5.0.0", 2353 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2354 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2355 | "dev": true, 2356 | "requires": { 2357 | "p-limit": "^3.0.2" 2358 | } 2359 | }, 2360 | "path-exists": { 2361 | "version": "4.0.0", 2362 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2363 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2364 | "dev": true 2365 | }, 2366 | "supports-color": { 2367 | "version": "7.2.0", 2368 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2369 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2370 | "dev": true, 2371 | "requires": { 2372 | "has-flag": "^4.0.0" 2373 | } 2374 | } 2375 | } 2376 | }, 2377 | "eslint-scope": { 2378 | "version": "8.0.2", 2379 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", 2380 | "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", 2381 | "dev": true, 2382 | "requires": { 2383 | "esrecurse": "^4.3.0", 2384 | "estraverse": "^5.2.0" 2385 | } 2386 | }, 2387 | "eslint-visitor-keys": { 2388 | "version": "4.0.0", 2389 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", 2390 | "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", 2391 | "dev": true 2392 | }, 2393 | "espree": { 2394 | "version": "10.1.0", 2395 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", 2396 | "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", 2397 | "dev": true, 2398 | "requires": { 2399 | "acorn": "^8.12.0", 2400 | "acorn-jsx": "^5.3.2", 2401 | "eslint-visitor-keys": "^4.0.0" 2402 | } 2403 | }, 2404 | "esquery": { 2405 | "version": "1.6.0", 2406 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2407 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2408 | "dev": true, 2409 | "requires": { 2410 | "estraverse": "^5.1.0" 2411 | } 2412 | }, 2413 | "esrecurse": { 2414 | "version": "4.3.0", 2415 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2416 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2417 | "dev": true, 2418 | "requires": { 2419 | "estraverse": "^5.2.0" 2420 | } 2421 | }, 2422 | "estraverse": { 2423 | "version": "5.3.0", 2424 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2425 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2426 | "dev": true 2427 | }, 2428 | "esutils": { 2429 | "version": "2.0.2", 2430 | "dev": true 2431 | }, 2432 | "fast-deep-equal": { 2433 | "version": "3.1.3", 2434 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2435 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2436 | "dev": true 2437 | }, 2438 | "fast-json-stable-stringify": { 2439 | "version": "2.1.0", 2440 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2441 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2442 | "dev": true 2443 | }, 2444 | "fast-levenshtein": { 2445 | "version": "2.0.6", 2446 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2447 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2448 | "dev": true 2449 | }, 2450 | "fastq": { 2451 | "version": "1.17.1", 2452 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 2453 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 2454 | "dev": true, 2455 | "requires": { 2456 | "reusify": "^1.0.4" 2457 | } 2458 | }, 2459 | "file-entry-cache": { 2460 | "version": "8.0.0", 2461 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2462 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2463 | "dev": true, 2464 | "requires": { 2465 | "flat-cache": "^4.0.0" 2466 | } 2467 | }, 2468 | "fill-range": { 2469 | "version": "7.1.1", 2470 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 2471 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 2472 | "dev": true, 2473 | "requires": { 2474 | "to-regex-range": "^5.0.1" 2475 | } 2476 | }, 2477 | "flat": { 2478 | "version": "5.0.2", 2479 | "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", 2480 | "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", 2481 | "dev": true 2482 | }, 2483 | "flat-cache": { 2484 | "version": "4.0.1", 2485 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2486 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2487 | "dev": true, 2488 | "requires": { 2489 | "flatted": "^3.2.9", 2490 | "keyv": "^4.5.4" 2491 | } 2492 | }, 2493 | "flatted": { 2494 | "version": "3.3.1", 2495 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 2496 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 2497 | "dev": true 2498 | }, 2499 | "fs.realpath": { 2500 | "version": "1.0.0", 2501 | "dev": true 2502 | }, 2503 | "fsevents": { 2504 | "version": "2.3.2", 2505 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2506 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2507 | "dev": true, 2508 | "optional": true 2509 | }, 2510 | "get-caller-file": { 2511 | "version": "2.0.5", 2512 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2513 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2514 | "dev": true 2515 | }, 2516 | "glob": { 2517 | "version": "7.2.0", 2518 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 2519 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 2520 | "dev": true, 2521 | "requires": { 2522 | "fs.realpath": "^1.0.0", 2523 | "inflight": "^1.0.4", 2524 | "inherits": "2", 2525 | "minimatch": "^3.0.4", 2526 | "once": "^1.3.0", 2527 | "path-is-absolute": "^1.0.0" 2528 | } 2529 | }, 2530 | "glob-parent": { 2531 | "version": "5.1.2", 2532 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2533 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2534 | "dev": true, 2535 | "requires": { 2536 | "is-glob": "^4.0.1" 2537 | } 2538 | }, 2539 | "growl": { 2540 | "version": "1.10.5", 2541 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 2542 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 2543 | "dev": true 2544 | }, 2545 | "he": { 2546 | "version": "1.2.0", 2547 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2548 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 2549 | "dev": true 2550 | }, 2551 | "ignore": { 2552 | "version": "5.3.1", 2553 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 2554 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 2555 | "dev": true 2556 | }, 2557 | "import-fresh": { 2558 | "version": "3.3.0", 2559 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2560 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2561 | "dev": true, 2562 | "requires": { 2563 | "parent-module": "^1.0.0", 2564 | "resolve-from": "^4.0.0" 2565 | } 2566 | }, 2567 | "imurmurhash": { 2568 | "version": "0.1.4", 2569 | "dev": true 2570 | }, 2571 | "inflight": { 2572 | "version": "1.0.6", 2573 | "dev": true, 2574 | "requires": { 2575 | "once": "^1.3.0", 2576 | "wrappy": "1" 2577 | } 2578 | }, 2579 | "inherits": { 2580 | "version": "2.0.3", 2581 | "dev": true 2582 | }, 2583 | "is-binary-path": { 2584 | "version": "2.1.0", 2585 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2586 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2587 | "dev": true, 2588 | "requires": { 2589 | "binary-extensions": "^2.0.0" 2590 | } 2591 | }, 2592 | "is-extglob": { 2593 | "version": "2.1.1", 2594 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2595 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2596 | "dev": true 2597 | }, 2598 | "is-fullwidth-code-point": { 2599 | "version": "3.0.0", 2600 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2601 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2602 | "dev": true 2603 | }, 2604 | "is-glob": { 2605 | "version": "4.0.3", 2606 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2607 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2608 | "dev": true, 2609 | "requires": { 2610 | "is-extglob": "^2.1.1" 2611 | } 2612 | }, 2613 | "is-number": { 2614 | "version": "7.0.0", 2615 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2616 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2617 | "dev": true 2618 | }, 2619 | "is-path-inside": { 2620 | "version": "3.0.3", 2621 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2622 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2623 | "dev": true 2624 | }, 2625 | "is-plain-obj": { 2626 | "version": "2.1.0", 2627 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 2628 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 2629 | "dev": true 2630 | }, 2631 | "is-unicode-supported": { 2632 | "version": "0.1.0", 2633 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", 2634 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", 2635 | "dev": true 2636 | }, 2637 | "isexe": { 2638 | "version": "2.0.0", 2639 | "dev": true 2640 | }, 2641 | "json-buffer": { 2642 | "version": "3.0.1", 2643 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2644 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2645 | "dev": true 2646 | }, 2647 | "json-schema-traverse": { 2648 | "version": "0.4.1", 2649 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2650 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2651 | "dev": true 2652 | }, 2653 | "json-stable-stringify-without-jsonify": { 2654 | "version": "1.0.1", 2655 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2656 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 2657 | "dev": true 2658 | }, 2659 | "keyv": { 2660 | "version": "4.5.4", 2661 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2662 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2663 | "dev": true, 2664 | "requires": { 2665 | "json-buffer": "3.0.1" 2666 | } 2667 | }, 2668 | "levn": { 2669 | "version": "0.4.1", 2670 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2671 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2672 | "dev": true, 2673 | "requires": { 2674 | "prelude-ls": "^1.2.1", 2675 | "type-check": "~0.4.0" 2676 | } 2677 | }, 2678 | "lodash.merge": { 2679 | "version": "4.6.2", 2680 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2681 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2682 | "dev": true 2683 | }, 2684 | "log-symbols": { 2685 | "version": "4.1.0", 2686 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", 2687 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", 2688 | "dev": true, 2689 | "requires": { 2690 | "chalk": "^4.1.0", 2691 | "is-unicode-supported": "^0.1.0" 2692 | }, 2693 | "dependencies": { 2694 | "ansi-styles": { 2695 | "version": "4.3.0", 2696 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2697 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2698 | "dev": true, 2699 | "requires": { 2700 | "color-convert": "^2.0.1" 2701 | } 2702 | }, 2703 | "chalk": { 2704 | "version": "4.1.2", 2705 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2706 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2707 | "dev": true, 2708 | "requires": { 2709 | "ansi-styles": "^4.1.0", 2710 | "supports-color": "^7.1.0" 2711 | } 2712 | }, 2713 | "has-flag": { 2714 | "version": "4.0.0", 2715 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2716 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2717 | "dev": true 2718 | }, 2719 | "supports-color": { 2720 | "version": "7.2.0", 2721 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2722 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2723 | "dev": true, 2724 | "requires": { 2725 | "has-flag": "^4.0.0" 2726 | } 2727 | } 2728 | } 2729 | }, 2730 | "minimatch": { 2731 | "version": "3.1.2", 2732 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2733 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2734 | "dev": true, 2735 | "requires": { 2736 | "brace-expansion": "^1.1.7" 2737 | } 2738 | }, 2739 | "mocha": { 2740 | "version": "9.2.2", 2741 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", 2742 | "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", 2743 | "dev": true, 2744 | "requires": { 2745 | "@ungap/promise-all-settled": "1.1.2", 2746 | "ansi-colors": "4.1.1", 2747 | "browser-stdout": "1.3.1", 2748 | "chokidar": "3.5.3", 2749 | "debug": "4.3.3", 2750 | "diff": "5.0.0", 2751 | "escape-string-regexp": "4.0.0", 2752 | "find-up": "5.0.0", 2753 | "glob": "7.2.0", 2754 | "growl": "1.10.5", 2755 | "he": "1.2.0", 2756 | "js-yaml": "4.1.0", 2757 | "log-symbols": "4.1.0", 2758 | "minimatch": "4.2.1", 2759 | "ms": "2.1.3", 2760 | "nanoid": "3.3.1", 2761 | "serialize-javascript": "6.0.0", 2762 | "strip-json-comments": "3.1.1", 2763 | "supports-color": "8.1.1", 2764 | "which": "2.0.2", 2765 | "workerpool": "6.2.0", 2766 | "yargs": "16.2.0", 2767 | "yargs-parser": "20.2.4", 2768 | "yargs-unparser": "2.0.0" 2769 | }, 2770 | "dependencies": { 2771 | "ansi-styles": { 2772 | "version": "4.3.0", 2773 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2774 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2775 | "dev": true, 2776 | "requires": { 2777 | "color-convert": "^2.0.1" 2778 | } 2779 | }, 2780 | "argparse": { 2781 | "version": "2.0.1", 2782 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2783 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2784 | "dev": true 2785 | }, 2786 | "cliui": { 2787 | "version": "7.0.4", 2788 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2789 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2790 | "dev": true, 2791 | "requires": { 2792 | "string-width": "^4.2.0", 2793 | "strip-ansi": "^6.0.0", 2794 | "wrap-ansi": "^7.0.0" 2795 | } 2796 | }, 2797 | "debug": { 2798 | "version": "4.3.3", 2799 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 2800 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 2801 | "dev": true, 2802 | "requires": { 2803 | "ms": "2.1.2" 2804 | }, 2805 | "dependencies": { 2806 | "ms": { 2807 | "version": "2.1.2", 2808 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2809 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2810 | "dev": true 2811 | } 2812 | } 2813 | }, 2814 | "escape-string-regexp": { 2815 | "version": "4.0.0", 2816 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2817 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2818 | "dev": true 2819 | }, 2820 | "find-up": { 2821 | "version": "5.0.0", 2822 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2823 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2824 | "dev": true, 2825 | "requires": { 2826 | "locate-path": "^6.0.0", 2827 | "path-exists": "^4.0.0" 2828 | } 2829 | }, 2830 | "has-flag": { 2831 | "version": "4.0.0", 2832 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2833 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2834 | "dev": true 2835 | }, 2836 | "js-yaml": { 2837 | "version": "4.1.0", 2838 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2839 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2840 | "dev": true, 2841 | "requires": { 2842 | "argparse": "^2.0.1" 2843 | } 2844 | }, 2845 | "locate-path": { 2846 | "version": "6.0.0", 2847 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2848 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2849 | "dev": true, 2850 | "requires": { 2851 | "p-locate": "^5.0.0" 2852 | } 2853 | }, 2854 | "minimatch": { 2855 | "version": "4.2.1", 2856 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", 2857 | "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", 2858 | "dev": true, 2859 | "requires": { 2860 | "brace-expansion": "^1.1.7" 2861 | } 2862 | }, 2863 | "ms": { 2864 | "version": "2.1.3", 2865 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2866 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2867 | "dev": true 2868 | }, 2869 | "p-limit": { 2870 | "version": "3.1.0", 2871 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2872 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2873 | "dev": true, 2874 | "requires": { 2875 | "yocto-queue": "^0.1.0" 2876 | } 2877 | }, 2878 | "p-locate": { 2879 | "version": "5.0.0", 2880 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2881 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2882 | "dev": true, 2883 | "requires": { 2884 | "p-limit": "^3.0.2" 2885 | } 2886 | }, 2887 | "path-exists": { 2888 | "version": "4.0.0", 2889 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2890 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2891 | "dev": true 2892 | }, 2893 | "supports-color": { 2894 | "version": "8.1.1", 2895 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 2896 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 2897 | "dev": true, 2898 | "requires": { 2899 | "has-flag": "^4.0.0" 2900 | } 2901 | }, 2902 | "which": { 2903 | "version": "2.0.2", 2904 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2905 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2906 | "dev": true, 2907 | "requires": { 2908 | "isexe": "^2.0.0" 2909 | } 2910 | }, 2911 | "wrap-ansi": { 2912 | "version": "7.0.0", 2913 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2914 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2915 | "dev": true, 2916 | "requires": { 2917 | "ansi-styles": "^4.0.0", 2918 | "string-width": "^4.1.0", 2919 | "strip-ansi": "^6.0.0" 2920 | } 2921 | }, 2922 | "y18n": { 2923 | "version": "5.0.8", 2924 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2925 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2926 | "dev": true 2927 | }, 2928 | "yargs": { 2929 | "version": "16.2.0", 2930 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2931 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2932 | "dev": true, 2933 | "requires": { 2934 | "cliui": "^7.0.2", 2935 | "escalade": "^3.1.1", 2936 | "get-caller-file": "^2.0.5", 2937 | "require-directory": "^2.1.1", 2938 | "string-width": "^4.2.0", 2939 | "y18n": "^5.0.5", 2940 | "yargs-parser": "^20.2.2" 2941 | } 2942 | }, 2943 | "yargs-parser": { 2944 | "version": "20.2.4", 2945 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2946 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", 2947 | "dev": true 2948 | } 2949 | } 2950 | }, 2951 | "nanoid": { 2952 | "version": "3.3.1", 2953 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 2954 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 2955 | "dev": true 2956 | }, 2957 | "natural-compare": { 2958 | "version": "1.4.0", 2959 | "dev": true 2960 | }, 2961 | "normalize-path": { 2962 | "version": "3.0.0", 2963 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2964 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2965 | "dev": true 2966 | }, 2967 | "once": { 2968 | "version": "1.4.0", 2969 | "dev": true, 2970 | "requires": { 2971 | "wrappy": "1" 2972 | } 2973 | }, 2974 | "optionator": { 2975 | "version": "0.9.4", 2976 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 2977 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 2978 | "dev": true, 2979 | "requires": { 2980 | "deep-is": "^0.1.3", 2981 | "fast-levenshtein": "^2.0.6", 2982 | "levn": "^0.4.1", 2983 | "prelude-ls": "^1.2.1", 2984 | "type-check": "^0.4.0", 2985 | "word-wrap": "^1.2.5" 2986 | } 2987 | }, 2988 | "parent-module": { 2989 | "version": "1.0.1", 2990 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2991 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2992 | "dev": true, 2993 | "requires": { 2994 | "callsites": "^3.0.0" 2995 | } 2996 | }, 2997 | "path-is-absolute": { 2998 | "version": "1.0.1", 2999 | "dev": true 3000 | }, 3001 | "path-key": { 3002 | "version": "3.1.1", 3003 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3004 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3005 | "dev": true 3006 | }, 3007 | "picomatch": { 3008 | "version": "2.3.1", 3009 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3010 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3011 | "dev": true 3012 | }, 3013 | "prelude-ls": { 3014 | "version": "1.2.1", 3015 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3016 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3017 | "dev": true 3018 | }, 3019 | "punycode": { 3020 | "version": "2.3.1", 3021 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3022 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3023 | "dev": true 3024 | }, 3025 | "queue-microtask": { 3026 | "version": "1.2.3", 3027 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3028 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3029 | "dev": true 3030 | }, 3031 | "randombytes": { 3032 | "version": "2.1.0", 3033 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 3034 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 3035 | "dev": true, 3036 | "requires": { 3037 | "safe-buffer": "^5.1.0" 3038 | } 3039 | }, 3040 | "readdirp": { 3041 | "version": "3.6.0", 3042 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3043 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3044 | "dev": true, 3045 | "requires": { 3046 | "picomatch": "^2.2.1" 3047 | } 3048 | }, 3049 | "require-directory": { 3050 | "version": "2.1.1", 3051 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3052 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 3053 | "dev": true 3054 | }, 3055 | "resolve-from": { 3056 | "version": "4.0.0", 3057 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3058 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3059 | "dev": true 3060 | }, 3061 | "reusify": { 3062 | "version": "1.0.4", 3063 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3064 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3065 | "dev": true 3066 | }, 3067 | "run-parallel": { 3068 | "version": "1.2.0", 3069 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3070 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3071 | "dev": true, 3072 | "requires": { 3073 | "queue-microtask": "^1.2.2" 3074 | } 3075 | }, 3076 | "safe-buffer": { 3077 | "version": "5.1.2", 3078 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3079 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 3080 | "dev": true 3081 | }, 3082 | "serialize-javascript": { 3083 | "version": "6.0.0", 3084 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", 3085 | "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", 3086 | "dev": true, 3087 | "requires": { 3088 | "randombytes": "^2.1.0" 3089 | } 3090 | }, 3091 | "shebang-command": { 3092 | "version": "2.0.0", 3093 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3094 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3095 | "dev": true, 3096 | "requires": { 3097 | "shebang-regex": "^3.0.0" 3098 | } 3099 | }, 3100 | "shebang-regex": { 3101 | "version": "3.0.0", 3102 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3103 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3104 | "dev": true 3105 | }, 3106 | "string-width": { 3107 | "version": "4.2.3", 3108 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3109 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3110 | "dev": true, 3111 | "requires": { 3112 | "emoji-regex": "^8.0.0", 3113 | "is-fullwidth-code-point": "^3.0.0", 3114 | "strip-ansi": "^6.0.1" 3115 | } 3116 | }, 3117 | "strip-ansi": { 3118 | "version": "6.0.1", 3119 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3120 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3121 | "dev": true, 3122 | "requires": { 3123 | "ansi-regex": "^5.0.1" 3124 | } 3125 | }, 3126 | "strip-json-comments": { 3127 | "version": "3.1.1", 3128 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3129 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3130 | "dev": true 3131 | }, 3132 | "text-table": { 3133 | "version": "0.2.0", 3134 | "dev": true 3135 | }, 3136 | "to-regex-range": { 3137 | "version": "5.0.1", 3138 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3139 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3140 | "dev": true, 3141 | "requires": { 3142 | "is-number": "^7.0.0" 3143 | } 3144 | }, 3145 | "type-check": { 3146 | "version": "0.4.0", 3147 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3148 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3149 | "dev": true, 3150 | "requires": { 3151 | "prelude-ls": "^1.2.1" 3152 | } 3153 | }, 3154 | "uri-js": { 3155 | "version": "4.4.1", 3156 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3157 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3158 | "dev": true, 3159 | "requires": { 3160 | "punycode": "^2.1.0" 3161 | } 3162 | }, 3163 | "word-wrap": { 3164 | "version": "1.2.5", 3165 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3166 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3167 | "dev": true 3168 | }, 3169 | "workerpool": { 3170 | "version": "6.2.0", 3171 | "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", 3172 | "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", 3173 | "dev": true 3174 | }, 3175 | "wrappy": { 3176 | "version": "1.0.2", 3177 | "dev": true 3178 | }, 3179 | "yargs-unparser": { 3180 | "version": "2.0.0", 3181 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", 3182 | "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", 3183 | "dev": true, 3184 | "requires": { 3185 | "camelcase": "^6.0.0", 3186 | "decamelize": "^4.0.0", 3187 | "flat": "^5.0.2", 3188 | "is-plain-obj": "^2.1.0" 3189 | }, 3190 | "dependencies": { 3191 | "camelcase": { 3192 | "version": "6.3.0", 3193 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 3194 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 3195 | "dev": true 3196 | }, 3197 | "decamelize": { 3198 | "version": "4.0.0", 3199 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", 3200 | "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", 3201 | "dev": true 3202 | } 3203 | } 3204 | }, 3205 | "yocto-queue": { 3206 | "version": "0.1.0", 3207 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3208 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3209 | "dev": true 3210 | } 3211 | } 3212 | } 3213 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-switch-case", 3 | "version": "3.0.1", 4 | "author": "Luke Page", 5 | "description": "switch-case specific linting rules for ESLint", 6 | "main": "src/index.js", 7 | "scripts": { 8 | "lint": "eslint ./", 9 | "lint-fix": "eslint --fix ./", 10 | "test": "mocha tests/**/*.js --reporter dot" 11 | }, 12 | "files": [ 13 | "LICENSE", 14 | "README.md", 15 | "src" 16 | ], 17 | "repository": { 18 | "type": "git", 19 | "url": "https://github.com/lukeapage/eslint-plugin-switch-case" 20 | }, 21 | "homepage": "https://github.com/lukeapage/eslint-plugin-switch-case", 22 | "bugs": "https://github.com/lukeapage/eslint-plugin-switch-case/issues", 23 | "peerDependencies": { 24 | "eslint": "^9.8.0" 25 | }, 26 | "devDependencies": { 27 | "eslint": "^9.8.0", 28 | "mocha": "^9.2.2" 29 | }, 30 | "engines": { 31 | "node": ">=18.18" 32 | }, 33 | "keywords": [ 34 | "eslint", 35 | "eslint-plugin", 36 | "eslintplugin", 37 | "destructuring" 38 | ], 39 | "license": "MIT" 40 | } 41 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const path = require("path"); 3 | 4 | const rules = fs 5 | .readdirSync(path.resolve(__dirname, "rules")) 6 | .map((f) => f.replace(/\.js$/, "")) 7 | .reduce((rules, ruleName) => { 8 | return { 9 | ...rules, 10 | [ruleName]: require(`./rules/${ruleName}`), 11 | }; 12 | }, {}); 13 | 14 | module.exports = { 15 | rules: rules, 16 | configs: { 17 | recommended: { 18 | rules: { 19 | "switch-case/newline-between-switch-case": "error", 20 | "switch-case/no-case-curly": "error", 21 | }, 22 | }, 23 | }, 24 | }; 25 | -------------------------------------------------------------------------------- /src/rules/newline-between-switch-case.js: -------------------------------------------------------------------------------- 1 | function last(array) { 2 | return array[array.length - 1]; 3 | } 4 | 5 | //------------------------------------------------------------------------------ 6 | // Rule Definition 7 | //------------------------------------------------------------------------------ 8 | 9 | /** 10 | * Checks whether or not a given code path segment is reachable. 11 | * @param {CodePathSegment} segment - A CodePathSegment to check. 12 | * @returns {boolean} `true` if the segment is reachable. 13 | */ 14 | function isReachable(segment) { 15 | return segment.reachable; 16 | } 17 | 18 | /** 19 | * Checks if there is a blank line between tokens 20 | */ 21 | function getTokensWithNewlineBetween(sourceCode, startNode, endNode) { 22 | const endLine = endNode.loc.start.line; 23 | 24 | let next = startNode; 25 | let previous = startNode; 26 | do { 27 | previous = next; 28 | next = sourceCode.getTokenOrCommentAfter(next); 29 | 30 | if (next.loc.start.line > previous.loc.end.line + 1) { 31 | return [previous, next]; 32 | } 33 | } while (next.loc.start.line < endLine); 34 | 35 | return null; 36 | } 37 | 38 | module.exports = { 39 | meta: { 40 | docs: {}, 41 | 42 | fixable: "whitespace", 43 | 44 | schema: [ 45 | { 46 | enum: ["always", "never"], 47 | }, 48 | { 49 | type: "object", 50 | properties: { 51 | fallthrough: { 52 | enum: ["always", "never"], 53 | }, 54 | }, 55 | additionalProperties: false, 56 | }, 57 | ], 58 | }, 59 | 60 | create: function newlineBetweenSwitchCase(context) { 61 | const sourceCode = context.sourceCode ?? context.getSourceCode(); 62 | const optionIsNewlineBetweenSwitchCases = context.options[0] === "always"; 63 | 64 | const optionIsNewlineBetweenFallthrough = 65 | context.options[1] && context.options[1].fallthrough 66 | ? context.options[1].fallthrough === "always" 67 | : optionIsNewlineBetweenSwitchCases; 68 | 69 | let currentCodePath = null; 70 | // tracks the segments we've traversed in the current code path 71 | let currentSegments; 72 | 73 | // tracks all current segments for all open paths 74 | const allCurrentSegments = []; 75 | 76 | return { 77 | onCodePathStart(codePath) { 78 | currentCodePath = codePath; 79 | allCurrentSegments.push(currentSegments); 80 | currentSegments = new Set(); 81 | }, 82 | 83 | onCodePathEnd() { 84 | currentCodePath = currentCodePath.upper; 85 | currentSegments = allCurrentSegments.pop(); 86 | }, 87 | 88 | onCodePathSegmentStart(segment) { 89 | currentSegments.add(segment); 90 | }, 91 | 92 | onCodePathSegmentEnd(segment) { 93 | currentSegments.delete(segment); 94 | }, 95 | 96 | onUnreachableCodePathSegmentStart(segment) { 97 | currentSegments.add(segment); 98 | }, 99 | 100 | onUnreachableCodePathSegmentEnd(segment) { 101 | currentSegments.delete(segment); 102 | }, 103 | 104 | "SwitchCase:exit": (node) => { 105 | // ignore the last switch case 106 | if (last(node.parent.cases) === node) { 107 | return; 108 | } 109 | 110 | let isFallthrough = false; 111 | 112 | /* 113 | * A fallthrough is either if we are empty or if the end of the case is reachable 114 | */ 115 | if ( 116 | node.consequent.length === 0 || 117 | [...currentSegments].some(isReachable) 118 | ) { 119 | isFallthrough = true; 120 | } 121 | 122 | const nextToken = sourceCode.getTokenAfter(node); 123 | 124 | const tokensWithBlankLinesBetween = getTokensWithNewlineBetween( 125 | sourceCode, 126 | node, 127 | nextToken 128 | ); 129 | const hasBlankLinesBetween = Boolean(tokensWithBlankLinesBetween); 130 | const isNewlineRequired = isFallthrough 131 | ? optionIsNewlineBetweenFallthrough 132 | : optionIsNewlineBetweenSwitchCases; 133 | 134 | if (hasBlankLinesBetween && !isNewlineRequired) { 135 | context.report({ 136 | node, 137 | fix(fixer) { 138 | const [previous, next] = tokensWithBlankLinesBetween; 139 | return fixer.replaceTextRange( 140 | [previous.range[1], next.range[0] - next.loc.start.column], 141 | "\n" 142 | ); 143 | }, 144 | message: "Extraneous newlines between switch cases.", 145 | }); 146 | } else if (!hasBlankLinesBetween && isNewlineRequired) { 147 | context.report({ 148 | node, 149 | fix(fixer) { 150 | return fixer.insertTextAfter(node, "\n"); 151 | }, 152 | message: "Newline required between switch cases.", 153 | }); 154 | } 155 | }, 156 | }; 157 | }, 158 | }; 159 | -------------------------------------------------------------------------------- /src/rules/no-case-curly.js: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // Rule Definition 3 | //------------------------------------------------------------------------------ 4 | 5 | module.exports = { 6 | meta: { 7 | docs: {}, 8 | 9 | schema: [], 10 | }, 11 | 12 | create: function noCaseCurly(context) { 13 | return { 14 | SwitchCase(node) { 15 | if ( 16 | node.consequent.length && 17 | node.consequent[0].type === "BlockStatement" 18 | ) { 19 | context.report( 20 | node, 21 | "Do not use braces in a case - extract the case to a" + 22 | " function if it requires its own variables." 23 | ); 24 | } 25 | }, 26 | }; 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tests/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "rules": {} 6 | } 7 | -------------------------------------------------------------------------------- /tests/index.js: -------------------------------------------------------------------------------- 1 | const assert = require("assert"); 2 | const fs = require("fs"); 3 | const path = require("path"); 4 | const plugin = require("../src/index"); 5 | 6 | const rules = fs 7 | .readdirSync(path.resolve(__dirname, "../src/rules/")) 8 | .map((f) => path.basename(f, ".js")); 9 | 10 | describe("all rule files should be exported by the plugin", () => { 11 | it("should export all rules", () => { 12 | rules.forEach((ruleName) => { 13 | assert.equal( 14 | plugin.rules[ruleName], 15 | // eslint-disable-next-line global-require 16 | require(path.join("../src/rules", ruleName)), 17 | `rule ${ruleName} is not exported` 18 | ); 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /tests/src/rules/newline-between-switch-case.js: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------ 2 | // Requirements 3 | // ------------------------------------------------------------------------------ 4 | 5 | const { RuleTester } = require("eslint"); 6 | const rule = require("../../../src/rules/newline-between-switch-case"); 7 | const { test } = require("../utils"); 8 | 9 | // ------------------------------------------------------------------------------ 10 | // Tests 11 | // ------------------------------------------------------------------------------ 12 | 13 | const ruleTester = new RuleTester(); 14 | const errorsExtraneous = [ 15 | { message: "Extraneous newlines between switch cases." }, 16 | ]; 17 | const errorsMissing = [{ message: "Newline required between switch cases." }]; 18 | ruleTester.run("newline-between-switch-case", rule, { 19 | valid: [ 20 | test({ 21 | code: ` 22 | switch(a) { 23 | case 1:break; 24 | } 25 | `, 26 | options: ["always", { fallthrough: "always" }], 27 | }), 28 | test({ 29 | code: ` 30 | switch(a) { 31 | case 2: 32 | 33 | case 1:break; 34 | } 35 | `, 36 | options: ["always", { fallthrough: "always" }], 37 | }), 38 | test({ 39 | code: ` 40 | switch(a) { 41 | case 2:break; 42 | 43 | case 1:break; 44 | } 45 | `, 46 | options: ["always", { fallthrough: "always" }], 47 | }), 48 | test({ 49 | code: ` 50 | switch(a) { 51 | case 2:break; 52 | 53 | // comment 54 | case 1:break; 55 | } 56 | `, 57 | options: ["always", { fallthrough: "always" }], 58 | }), 59 | test({ 60 | code: ` 61 | switch(a) { 62 | case 2:break; 63 | // comment 64 | 65 | case 1:break; 66 | } 67 | `, 68 | options: ["always", { fallthrough: "always" }], 69 | }), 70 | test({ 71 | code: ` 72 | switch(a) { 73 | case 1:break; 74 | } 75 | `, 76 | options: ["never", { fallthrough: "never" }], 77 | }), 78 | test({ 79 | code: ` 80 | switch(a) { 81 | case 2: 82 | case 1:break; 83 | } 84 | `, 85 | options: ["never", { fallthrough: "never" }], 86 | }), 87 | test({ 88 | code: ` 89 | switch(a) { 90 | case 2:break; 91 | case 1:break; 92 | } 93 | `, 94 | options: ["never", { fallthrough: "never" }], 95 | }), 96 | test({ 97 | code: ` 98 | switch(a) { 99 | case 2:break; 100 | // comment 101 | case 1:break; 102 | } 103 | `, 104 | options: ["never", { fallthrough: "never" }], 105 | }), 106 | test({ 107 | code: ` 108 | switch(a) { 109 | case 2: 110 | case 1:break; 111 | 112 | case 3: 113 | } 114 | `, 115 | options: ["always", { fallthrough: "never" }], 116 | }), 117 | test({ 118 | code: ` 119 | switch(a) { 120 | case 2: 121 | f(); 122 | case 1:break; 123 | 124 | case 3: 125 | } 126 | `, 127 | options: ["always", { fallthrough: "never" }], 128 | }), 129 | test({ 130 | code: ` 131 | switch(a) { 132 | case 2: { 133 | f(); 134 | } 135 | case 1:break; 136 | 137 | case 3: 138 | } 139 | `, 140 | options: ["always", { fallthrough: "never" }], 141 | }), 142 | test({ 143 | code: ` 144 | switch(a) { 145 | case 2: { 146 | f(); 147 | break; 148 | } 149 | 150 | case 1:break; 151 | 152 | case 3: 153 | } 154 | `, 155 | options: ["always", { fallthrough: "never" }], 156 | }), 157 | test({ 158 | code: `var f = () => { 159 | switch(a) { 160 | case 2: { 161 | const b = true; 162 | if (a) { 163 | return a; 164 | } else { 165 | return b; 166 | } 167 | } 168 | 169 | case 1:break; 170 | 171 | case 3: 172 | }}; 173 | `, 174 | options: ["always", { fallthrough: "never" }], 175 | }), 176 | ], 177 | invalid: [ 178 | test({ 179 | code: ` 180 | switch(a) { 181 | case 2: 182 | case 1:break; 183 | } 184 | `, 185 | output: ` 186 | switch(a) { 187 | case 2: 188 | 189 | case 1:break; 190 | } 191 | `, 192 | options: ["always", { fallthrough: "always" }], 193 | errors: errorsMissing, 194 | }), 195 | test({ 196 | code: ` 197 | switch(a) { 198 | case 2:break; 199 | case 1:break; 200 | } 201 | `, 202 | output: ` 203 | switch(a) { 204 | case 2:break; 205 | 206 | case 1:break; 207 | } 208 | `, 209 | options: ["always", { fallthrough: "always" }], 210 | errors: errorsMissing, 211 | }), 212 | test({ 213 | code: ` 214 | switch(a) { 215 | case 2:break; 216 | // comment 217 | case 1:break; 218 | } 219 | `, 220 | output: ` 221 | switch(a) { 222 | case 2:break; 223 | 224 | // comment 225 | case 1:break; 226 | } 227 | `, 228 | options: ["always", { fallthrough: "always" }], 229 | errors: errorsMissing, 230 | }), 231 | test({ 232 | code: ` 233 | switch(a) { 234 | case 2: 235 | // comment 236 | case 1:break; 237 | } 238 | `, 239 | output: ` 240 | switch(a) { 241 | case 2: 242 | 243 | // comment 244 | case 1:break; 245 | } 246 | `, 247 | options: ["always", { fallthrough: "always" }], 248 | errors: errorsMissing, 249 | }), 250 | test({ 251 | code: ` 252 | switch(a) { 253 | case 2: 254 | 255 | case 1:break; 256 | } 257 | `, 258 | output: ` 259 | switch(a) { 260 | case 2: 261 | case 1:break; 262 | } 263 | `, 264 | options: ["never", { fallthrough: "never" }], 265 | errors: errorsExtraneous, 266 | }), 267 | test({ 268 | code: ` 269 | switch(a) { 270 | case 2:break; 271 | 272 | case 1:break; 273 | } 274 | `, 275 | output: ` 276 | switch(a) { 277 | case 2:break; 278 | case 1:break; 279 | } 280 | `, 281 | options: ["never", { fallthrough: "never" }], 282 | errors: errorsExtraneous, 283 | }), 284 | test({ 285 | code: ` 286 | switch(a) { 287 | case 2:break; 288 | 289 | // comment 290 | case 1:break; 291 | } 292 | `, 293 | output: ` 294 | switch(a) { 295 | case 2:break; 296 | // comment 297 | case 1:break; 298 | } 299 | `, 300 | options: ["never", { fallthrough: "never" }], 301 | errors: errorsExtraneous, 302 | }), 303 | test({ 304 | code: ` 305 | switch(a) { 306 | case 2:break; 307 | // comment 308 | 309 | case 1:break; 310 | } 311 | `, 312 | output: ` 313 | switch(a) { 314 | case 2:break; 315 | // comment 316 | case 1:break; 317 | } 318 | `, 319 | options: ["never", { fallthrough: "never" }], 320 | errors: errorsExtraneous, 321 | }), 322 | test({ 323 | code: ` 324 | switch(a) { 325 | case 2: 326 | case 1:break; 327 | case 3: 328 | } 329 | `, 330 | output: ` 331 | switch(a) { 332 | case 2: 333 | case 1:break; 334 | 335 | case 3: 336 | } 337 | `, 338 | options: ["always", { fallthrough: "never" }], 339 | errors: errorsMissing, 340 | }), 341 | test({ 342 | code: ` 343 | switch(a) { 344 | case 2: 345 | f(); 346 | 347 | case 1:break; 348 | 349 | case 3: 350 | } 351 | `, 352 | output: ` 353 | switch(a) { 354 | case 2: 355 | f(); 356 | case 1:break; 357 | 358 | case 3: 359 | } 360 | `, 361 | options: ["always", { fallthrough: "never" }], 362 | errors: errorsExtraneous, 363 | }), 364 | test({ 365 | code: ` 366 | switch(a) { 367 | case 2: { 368 | f(); 369 | } 370 | 371 | case 1:break; 372 | 373 | case 3: 374 | } 375 | `, 376 | output: ` 377 | switch(a) { 378 | case 2: { 379 | f(); 380 | } 381 | case 1:break; 382 | 383 | case 3: 384 | } 385 | `, 386 | options: ["always", { fallthrough: "never" }], 387 | errors: errorsExtraneous, 388 | }), 389 | ], 390 | }); 391 | -------------------------------------------------------------------------------- /tests/src/rules/no-case-curly.js: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------------------ 2 | // Requirements 3 | // ------------------------------------------------------------------------------ 4 | 5 | const { RuleTester } = require("eslint"); 6 | const rule = require("../../../src/rules/no-case-curly"); 7 | const { test } = require("../utils"); 8 | 9 | // ------------------------------------------------------------------------------ 10 | // Tests 11 | // ------------------------------------------------------------------------------ 12 | 13 | const ruleTester = new RuleTester(); 14 | const errors = [ 15 | { 16 | message: 17 | "Do not use braces in a case - extract the case to a" + 18 | " function if it requires its own variables.", 19 | }, 20 | ]; 21 | ruleTester.run("no-case-curly", rule, { 22 | valid: [ 23 | test({ code: "switch(a) { case 1: break; }" }), 24 | test({ code: "switch(a) { case 1: case 2: }" }), 25 | test({ code: "switch(a) { case 1: }" }), 26 | ], 27 | invalid: [ 28 | test({ 29 | code: "switch(a) { case 1: { break; } }", 30 | errors, 31 | }), 32 | test({ 33 | code: "switch(a) { case 1: default: { break; } break; }", 34 | errors, 35 | }), 36 | ], 37 | }); 38 | -------------------------------------------------------------------------------- /tests/src/utils.js: -------------------------------------------------------------------------------- 1 | exports.test = function test(t) { 2 | return { 3 | ...t, 4 | languageOptions: { 5 | sourceType: "module", 6 | ecmaVersion: 2018, 7 | }, 8 | }; 9 | }; 10 | --------------------------------------------------------------------------------