├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── examples └── simple-app │ ├── .env.defaults │ ├── app.js │ ├── config-schema.json │ └── config.json ├── package-lock.json ├── package.json ├── src └── confme.js └── tests ├── badconfig └── basic.json ├── error └── basic.json ├── inherited ├── basic.json └── config-schema.json ├── simple └── basic.json └── test_suite.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | .nyc_output 4 | .vscode 5 | .idea/ 6 | *.iml 7 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## CHANGELOG 2 | 3 | v1.2 4 | 5 | - Updated all dependencies (including livr to v2.7.1) 6 | - Improved asserts in tests 7 | - Removed dev dependencies (c8, eslint) to make "npm audit" green 8 | - Added this Changelog 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Viktor Turskyi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## confme 2 | 3 | Opinionated config library that allows you to have complex config, and behaves according to "Twelve Factor App" rules. 4 | 5 | - It is build on top of [dotenv-defaults](https://www.npmjs.com/package/dotenv-defaults) 6 | - Uses [LIVR](https://www.npmjs.com/package/livr) ([with extra rules](https://www.npmjs.com/package/livr-extra-rules)) for config schema validation. 7 | - Follows the ideas of [Twelve Factor App](https://12factor.net/config) 8 | 9 | Read [Motivation section](#motivation) 10 | 11 | So, it suits well for: 12 | 13 | 1. Local development 14 | 2. Docker environment 15 | 3. AWS Lambda and alternatives 16 | 17 | ### How does it work? 18 | 19 | "confme" loads your config and replaces placeholders with environment variables. For environemnt loading it uses [dotenv-defaults](https://www.npmjs.com/package/dotenv-defaults), so you can create ".env.defaults" file to set default values of environment variables. If you have placeholders for non set environment variables then "confme" will throw an error. 20 | 21 | You can pass a path to a JSON/JSON5 file with [LIVR](https://www.npmjs.com/package/livr) rules as a second argument. In this case, it will use [LIVR](https://www.npmjs.com/package/livr) ([with extra rules](https://www.npmjs.com/package/livr-extra-rules)) to validate the config. 22 | 23 | ### Usage examples 24 | 25 | **Load config** 26 | 27 | ```javascript 28 | const confme = require("confme"); 29 | const config = confme(__dirname + "/config.json"); 30 | ``` 31 | 32 | **Load config with validation** 33 | 34 | ```javascript 35 | const confme = require("confme"); 36 | 37 | const config = confme( 38 | __dirname + "/config.json", 39 | __dirname + "/config-schema.json" 40 | ); 41 | ``` 42 | 43 | **Example config** 44 | 45 | Placeholders are optional 46 | 47 | ```json 48 | { 49 | "listenPort": "{{PORT}}", 50 | "apiPath": "https://{{DOMAIN}}:{{PORT}}/api/v1", 51 | "staticUrl": "https://{{DOMAIN}}:{{PORT}}/static", 52 | "mainPage": "https://{{DOMAIN}}:{{PORT}}", 53 | "mail": { 54 | "from": "MyApp", 55 | "transport": "SMTP", 56 | "auth": { 57 | "user": "{{SMTP_USER}}", 58 | "pass": "{{SMTP_PASS}}" 59 | } 60 | } 61 | } 62 | ``` 63 | 64 | **Example LIVR schema** 65 | 66 | See [LIVR](https://www.npmjs.com/package/livr) for details. 67 | 68 | ```json 69 | { 70 | "listenPort": ["required", "positive_integer"], 71 | "apiPath": ["required", "url"], 72 | "staticUrl": ["required", "url"], 73 | "mainPage": ["required", "url"], 74 | "mail": ["required", {"nested_object": { 75 | "from": ["required", "string"], 76 | "transport": ["required", {"one_of": ["SMTP", "SENDMAIL"] }], 77 | "auth": {"nested_object": { 78 | "user": ["required", "string"], 79 | "pass": ["required", "string"] 80 | }} 81 | }}] 82 | } 83 | ``` 84 | You can play with it [in livr playground](http://webbylab.github.io/livr-playground/#%7B%22rules%22%3A%22%7B%5Cn%20%20%5C%22listenPort%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22positive_integer%5C%22%5D%2C%5Cn%20%20%5C%22apiPath%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22url%5C%22%5D%2C%5Cn%20%20%5C%22staticUrl%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22url%5C%22%5D%2C%5Cn%20%20%5C%22mainPage%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22url%5C%22%5D%2C%5Cn%20%20%5C%22mail%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%7B%5C%22nested_object%5C%22%3A%20%7B%5Cn%20%20%20%5C%22from%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22string%5C%22%5D%2C%5Cn%20%20%20%5C%22transport%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%7B%5C%22one_of%5C%22%3A%20%5B%5C%22SMTP%5C%22%2C%20%5C%22SENDMAIL%5C%22%5D%7D%5D%2C%5Cn%20%20%20%20%5C%22auth%5C%22%3A%20%7B%5C%22nested_object%5C%22%3A%20%7B%5Cn%20%20%20%20%20%20%5C%22user%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22string%5C%22%5D%2C%5Cn%20%20%20%20%20%20%5C%22pass%5C%22%3A%20%5B%5C%22required%5C%22%2C%20%5C%22string%5C%22%5D%5Cn%20%20%20%20%7D%7D%5Cn%20%20%7D%7D%5D%5Cn%7D%22%2C%22data%22%3A%22%7B%20%5Cn%20%20listenPort%3A%203000%2C%5Cn%20%20apiPath%3A%20'https%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1'%2C%5Cn%20%20staticUrl%3A%20'https%3A%2F%2Flocalhost%3A3000%2Fstatic'%2C%5Cn%20%20mainPage%3A%20'https%3A%2F%2Flocalhost%3A3000'%2C%5Cn%20%20mail%3A%20%7B%20from%3A%20'MyApp'%2C%5Cn%20%20%20%20%20transport%3A%20'SMTP'%2C%5Cn%20%20%20%20%20auth%3A%20%7B%20%5Cn%20%20%20%20%20%20%20%20user%3A%20'user'%2C%20%5Cn%20%20%20%20%20%20%20%20pass%3A%20'password'%20%5Cn%20%20%20%20%20%20%7D%20%5Cn%20%20%20%7D%20%5Cn%7D%5Cn%22%7D) 85 | 86 | **Full example in [examples folder](./examples).** 87 | 88 | Try it with 89 | 90 | - `node app.js` 91 | - `DOMAIN=myapp.com PORT=80 node app.js` 92 | - `PORT='AAA' node app.js` 93 | 94 | 95 | ### Motivation 96 | 97 | According to [Twelve Factor App](https://12factor.net/config), your config should be passed in envrironment variables. If you are not familiar with ideas of "Twelve Factor App," you should definitely read it. 98 | 99 | Having all config variables in env variables is very flexible. You can run your app with docker and without docker. Moreover, you can reuse the same builds across all environments. For example, you can build an image, test it on QA and then run the same image well-tested imaged on production. 100 | 101 | But passing the conf in environment variables is not very convenient. So, there a popular library called [dotenv](dotenv) which allows you to store environment variables in ".env" files. But you should not commit them and you should have a sample in repository (like ".env.sample" which will be copied to ".env" on deployments without docker). 102 | 103 | You can use [dotenv-defaults](https://www.npmjs.com/package/dotenv-defaults) which allows you to have file ".env.defaults" with default values commited to your repository. 104 | 105 | But in real life, if you have rather complex configs and you do not want to define all of the values in ENV, you want to use your config as a template and build final config based on this template. It is very common approach for ansible users. **confme** allows you to do that. 106 | 107 | Moreover, **confme** allows you to define [LIVR](http://livr-spec.org/) schema to validate configurations. It can be helpful if you have complex configs with a lot of options but I prefer to use validation schema even with small configs. 108 | -------------------------------------------------------------------------------- /examples/simple-app/.env.defaults: -------------------------------------------------------------------------------- 1 | DOMAIN=localhost 2 | PORT=3000 3 | SMTP_USER=user 4 | SMTP_PASS=password -------------------------------------------------------------------------------- /examples/simple-app/app.js: -------------------------------------------------------------------------------- 1 | const confme = require("../../src/confme"); 2 | 3 | function main() { 4 | const config = confme( 5 | __dirname + "/config.json", 6 | __dirname + "/config-schema.json" 7 | ); 8 | console.log("CONFIG", config); 9 | } 10 | 11 | main(); 12 | -------------------------------------------------------------------------------- /examples/simple-app/config-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "listenPort": ["required", "positive_integer"], 3 | "apiPath": ["required", "url"], 4 | "staticUrl": ["required", "url"], 5 | "mainPage": ["required", "url"], 6 | "mail": ["required", {"nested_object": { 7 | "from": ["required", "string"], 8 | "transport": ["required", {"one_of": ["SMTP", "SENDMAIL"] }], 9 | "auth": {"nested_object": { 10 | "user": ["required", "string"], 11 | "pass": ["required", "string"] 12 | }} 13 | }}] 14 | } 15 | -------------------------------------------------------------------------------- /examples/simple-app/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "listenPort": "{{ PORT }}", 3 | "apiPath": "https://{{DOMAIN}}:{{PORT}}/api/v1", 4 | "staticUrl": "https://{{DOMAIN}}:{{PORT}}/static", 5 | "mainPage": "https://{{DOMAIN}}:{{PORT}}", 6 | "mail": { 7 | "from": "MyApp", 8 | "transport": "SMTP", 9 | "auth": { 10 | "user": "{{SMTP_USER}}", 11 | "pass": "{{SMTP_PASS}}" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "confme", 3 | "version": "1.2.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "confme", 9 | "version": "1.2.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "dotenv-defaults": "^5.0.1", 13 | "json5": "^2.2.0", 14 | "livr": "^2.7.1", 15 | "livr-extra-rules": "^1.3.1" 16 | }, 17 | "devDependencies": { 18 | "ava": "^5.3.1" 19 | } 20 | }, 21 | "node_modules/@nodelib/fs.scandir": { 22 | "version": "2.1.5", 23 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 24 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 25 | "dev": true, 26 | "dependencies": { 27 | "@nodelib/fs.stat": "2.0.5", 28 | "run-parallel": "^1.1.9" 29 | }, 30 | "engines": { 31 | "node": ">= 8" 32 | } 33 | }, 34 | "node_modules/@nodelib/fs.stat": { 35 | "version": "2.0.5", 36 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 37 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 38 | "dev": true, 39 | "engines": { 40 | "node": ">= 8" 41 | } 42 | }, 43 | "node_modules/@nodelib/fs.walk": { 44 | "version": "1.2.8", 45 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 46 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 47 | "dev": true, 48 | "dependencies": { 49 | "@nodelib/fs.scandir": "2.1.5", 50 | "fastq": "^1.6.0" 51 | }, 52 | "engines": { 53 | "node": ">= 8" 54 | } 55 | }, 56 | "node_modules/acorn": { 57 | "version": "8.9.0", 58 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", 59 | "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", 60 | "dev": true, 61 | "bin": { 62 | "acorn": "bin/acorn" 63 | }, 64 | "engines": { 65 | "node": ">=0.4.0" 66 | } 67 | }, 68 | "node_modules/acorn-walk": { 69 | "version": "8.2.0", 70 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 71 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 72 | "dev": true, 73 | "engines": { 74 | "node": ">=0.4.0" 75 | } 76 | }, 77 | "node_modules/aggregate-error": { 78 | "version": "4.0.1", 79 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", 80 | "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", 81 | "dev": true, 82 | "dependencies": { 83 | "clean-stack": "^4.0.0", 84 | "indent-string": "^5.0.0" 85 | }, 86 | "engines": { 87 | "node": ">=12" 88 | }, 89 | "funding": { 90 | "url": "https://github.com/sponsors/sindresorhus" 91 | } 92 | }, 93 | "node_modules/ansi-regex": { 94 | "version": "6.0.1", 95 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 96 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 97 | "dev": true, 98 | "engines": { 99 | "node": ">=12" 100 | }, 101 | "funding": { 102 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 103 | } 104 | }, 105 | "node_modules/ansi-styles": { 106 | "version": "6.2.1", 107 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 108 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 109 | "dev": true, 110 | "engines": { 111 | "node": ">=12" 112 | }, 113 | "funding": { 114 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 115 | } 116 | }, 117 | "node_modules/anymatch": { 118 | "version": "3.1.3", 119 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 120 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 121 | "dev": true, 122 | "dependencies": { 123 | "normalize-path": "^3.0.0", 124 | "picomatch": "^2.0.4" 125 | }, 126 | "engines": { 127 | "node": ">= 8" 128 | } 129 | }, 130 | "node_modules/array-find-index": { 131 | "version": "1.0.2", 132 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 133 | "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", 134 | "dev": true, 135 | "engines": { 136 | "node": ">=0.10.0" 137 | } 138 | }, 139 | "node_modules/arrgv": { 140 | "version": "1.0.2", 141 | "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", 142 | "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", 143 | "dev": true, 144 | "engines": { 145 | "node": ">=8.0.0" 146 | } 147 | }, 148 | "node_modules/arrify": { 149 | "version": "3.0.0", 150 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", 151 | "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", 152 | "dev": true, 153 | "engines": { 154 | "node": ">=12" 155 | }, 156 | "funding": { 157 | "url": "https://github.com/sponsors/sindresorhus" 158 | } 159 | }, 160 | "node_modules/ava": { 161 | "version": "5.3.1", 162 | "resolved": "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz", 163 | "integrity": "sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==", 164 | "dev": true, 165 | "dependencies": { 166 | "acorn": "^8.8.2", 167 | "acorn-walk": "^8.2.0", 168 | "ansi-styles": "^6.2.1", 169 | "arrgv": "^1.0.2", 170 | "arrify": "^3.0.0", 171 | "callsites": "^4.0.0", 172 | "cbor": "^8.1.0", 173 | "chalk": "^5.2.0", 174 | "chokidar": "^3.5.3", 175 | "chunkd": "^2.0.1", 176 | "ci-info": "^3.8.0", 177 | "ci-parallel-vars": "^1.0.1", 178 | "clean-yaml-object": "^0.1.0", 179 | "cli-truncate": "^3.1.0", 180 | "code-excerpt": "^4.0.0", 181 | "common-path-prefix": "^3.0.0", 182 | "concordance": "^5.0.4", 183 | "currently-unhandled": "^0.4.1", 184 | "debug": "^4.3.4", 185 | "emittery": "^1.0.1", 186 | "figures": "^5.0.0", 187 | "globby": "^13.1.4", 188 | "ignore-by-default": "^2.1.0", 189 | "indent-string": "^5.0.0", 190 | "is-error": "^2.2.2", 191 | "is-plain-object": "^5.0.0", 192 | "is-promise": "^4.0.0", 193 | "matcher": "^5.0.0", 194 | "mem": "^9.0.2", 195 | "ms": "^2.1.3", 196 | "p-event": "^5.0.1", 197 | "p-map": "^5.5.0", 198 | "picomatch": "^2.3.1", 199 | "pkg-conf": "^4.0.0", 200 | "plur": "^5.1.0", 201 | "pretty-ms": "^8.0.0", 202 | "resolve-cwd": "^3.0.0", 203 | "stack-utils": "^2.0.6", 204 | "strip-ansi": "^7.0.1", 205 | "supertap": "^3.0.1", 206 | "temp-dir": "^3.0.0", 207 | "write-file-atomic": "^5.0.1", 208 | "yargs": "^17.7.2" 209 | }, 210 | "bin": { 211 | "ava": "entrypoints/cli.mjs" 212 | }, 213 | "engines": { 214 | "node": ">=14.19 <15 || >=16.15 <17 || >=18" 215 | }, 216 | "peerDependencies": { 217 | "@ava/typescript": "*" 218 | }, 219 | "peerDependenciesMeta": { 220 | "@ava/typescript": { 221 | "optional": true 222 | } 223 | } 224 | }, 225 | "node_modules/binary-extensions": { 226 | "version": "2.2.0", 227 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 228 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 229 | "dev": true, 230 | "engines": { 231 | "node": ">=8" 232 | } 233 | }, 234 | "node_modules/blueimp-md5": { 235 | "version": "2.19.0", 236 | "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", 237 | "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", 238 | "dev": true 239 | }, 240 | "node_modules/braces": { 241 | "version": "3.0.2", 242 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 243 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 244 | "dev": true, 245 | "dependencies": { 246 | "fill-range": "^7.0.1" 247 | }, 248 | "engines": { 249 | "node": ">=8" 250 | } 251 | }, 252 | "node_modules/callsites": { 253 | "version": "4.0.0", 254 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", 255 | "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", 256 | "dev": true, 257 | "engines": { 258 | "node": ">=12.20" 259 | }, 260 | "funding": { 261 | "url": "https://github.com/sponsors/sindresorhus" 262 | } 263 | }, 264 | "node_modules/cbor": { 265 | "version": "8.1.0", 266 | "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", 267 | "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", 268 | "dev": true, 269 | "dependencies": { 270 | "nofilter": "^3.1.0" 271 | }, 272 | "engines": { 273 | "node": ">=12.19" 274 | } 275 | }, 276 | "node_modules/chalk": { 277 | "version": "5.3.0", 278 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 279 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 280 | "dev": true, 281 | "engines": { 282 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 283 | }, 284 | "funding": { 285 | "url": "https://github.com/chalk/chalk?sponsor=1" 286 | } 287 | }, 288 | "node_modules/chokidar": { 289 | "version": "3.5.3", 290 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 291 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 292 | "dev": true, 293 | "funding": [ 294 | { 295 | "type": "individual", 296 | "url": "https://paulmillr.com/funding/" 297 | } 298 | ], 299 | "dependencies": { 300 | "anymatch": "~3.1.2", 301 | "braces": "~3.0.2", 302 | "glob-parent": "~5.1.2", 303 | "is-binary-path": "~2.1.0", 304 | "is-glob": "~4.0.1", 305 | "normalize-path": "~3.0.0", 306 | "readdirp": "~3.6.0" 307 | }, 308 | "engines": { 309 | "node": ">= 8.10.0" 310 | }, 311 | "optionalDependencies": { 312 | "fsevents": "~2.3.2" 313 | } 314 | }, 315 | "node_modules/chunkd": { 316 | "version": "2.0.1", 317 | "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", 318 | "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", 319 | "dev": true 320 | }, 321 | "node_modules/ci-info": { 322 | "version": "3.8.0", 323 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", 324 | "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", 325 | "dev": true, 326 | "funding": [ 327 | { 328 | "type": "github", 329 | "url": "https://github.com/sponsors/sibiraj-s" 330 | } 331 | ], 332 | "engines": { 333 | "node": ">=8" 334 | } 335 | }, 336 | "node_modules/ci-parallel-vars": { 337 | "version": "1.0.1", 338 | "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", 339 | "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", 340 | "dev": true 341 | }, 342 | "node_modules/clean-stack": { 343 | "version": "4.2.0", 344 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", 345 | "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", 346 | "dev": true, 347 | "dependencies": { 348 | "escape-string-regexp": "5.0.0" 349 | }, 350 | "engines": { 351 | "node": ">=12" 352 | }, 353 | "funding": { 354 | "url": "https://github.com/sponsors/sindresorhus" 355 | } 356 | }, 357 | "node_modules/clean-stack/node_modules/escape-string-regexp": { 358 | "version": "5.0.0", 359 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 360 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 361 | "dev": true, 362 | "engines": { 363 | "node": ">=12" 364 | }, 365 | "funding": { 366 | "url": "https://github.com/sponsors/sindresorhus" 367 | } 368 | }, 369 | "node_modules/clean-yaml-object": { 370 | "version": "0.1.0", 371 | "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", 372 | "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", 373 | "dev": true, 374 | "engines": { 375 | "node": ">=0.10.0" 376 | } 377 | }, 378 | "node_modules/cli-truncate": { 379 | "version": "3.1.0", 380 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 381 | "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 382 | "dev": true, 383 | "dependencies": { 384 | "slice-ansi": "^5.0.0", 385 | "string-width": "^5.0.0" 386 | }, 387 | "engines": { 388 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 389 | }, 390 | "funding": { 391 | "url": "https://github.com/sponsors/sindresorhus" 392 | } 393 | }, 394 | "node_modules/cliui": { 395 | "version": "8.0.1", 396 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 397 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 398 | "dev": true, 399 | "dependencies": { 400 | "string-width": "^4.2.0", 401 | "strip-ansi": "^6.0.1", 402 | "wrap-ansi": "^7.0.0" 403 | }, 404 | "engines": { 405 | "node": ">=12" 406 | } 407 | }, 408 | "node_modules/cliui/node_modules/ansi-regex": { 409 | "version": "5.0.1", 410 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 411 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 412 | "dev": true, 413 | "engines": { 414 | "node": ">=8" 415 | } 416 | }, 417 | "node_modules/cliui/node_modules/emoji-regex": { 418 | "version": "8.0.0", 419 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 420 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 421 | "dev": true 422 | }, 423 | "node_modules/cliui/node_modules/is-fullwidth-code-point": { 424 | "version": "3.0.0", 425 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 426 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 427 | "dev": true, 428 | "engines": { 429 | "node": ">=8" 430 | } 431 | }, 432 | "node_modules/cliui/node_modules/string-width": { 433 | "version": "4.2.3", 434 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 435 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 436 | "dev": true, 437 | "dependencies": { 438 | "emoji-regex": "^8.0.0", 439 | "is-fullwidth-code-point": "^3.0.0", 440 | "strip-ansi": "^6.0.1" 441 | }, 442 | "engines": { 443 | "node": ">=8" 444 | } 445 | }, 446 | "node_modules/cliui/node_modules/strip-ansi": { 447 | "version": "6.0.1", 448 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 449 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 450 | "dev": true, 451 | "dependencies": { 452 | "ansi-regex": "^5.0.1" 453 | }, 454 | "engines": { 455 | "node": ">=8" 456 | } 457 | }, 458 | "node_modules/code-excerpt": { 459 | "version": "4.0.0", 460 | "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", 461 | "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", 462 | "dev": true, 463 | "dependencies": { 464 | "convert-to-spaces": "^2.0.1" 465 | }, 466 | "engines": { 467 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 468 | } 469 | }, 470 | "node_modules/common-path-prefix": { 471 | "version": "3.0.0", 472 | "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", 473 | "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", 474 | "dev": true 475 | }, 476 | "node_modules/concordance": { 477 | "version": "5.0.4", 478 | "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", 479 | "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", 480 | "dev": true, 481 | "dependencies": { 482 | "date-time": "^3.1.0", 483 | "esutils": "^2.0.3", 484 | "fast-diff": "^1.2.0", 485 | "js-string-escape": "^1.0.1", 486 | "lodash": "^4.17.15", 487 | "md5-hex": "^3.0.1", 488 | "semver": "^7.3.2", 489 | "well-known-symbols": "^2.0.0" 490 | }, 491 | "engines": { 492 | "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" 493 | } 494 | }, 495 | "node_modules/convert-to-spaces": { 496 | "version": "2.0.1", 497 | "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", 498 | "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", 499 | "dev": true, 500 | "engines": { 501 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 502 | } 503 | }, 504 | "node_modules/currently-unhandled": { 505 | "version": "0.4.1", 506 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 507 | "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", 508 | "dev": true, 509 | "dependencies": { 510 | "array-find-index": "^1.0.1" 511 | }, 512 | "engines": { 513 | "node": ">=0.10.0" 514 | } 515 | }, 516 | "node_modules/date-time": { 517 | "version": "3.1.0", 518 | "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", 519 | "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", 520 | "dev": true, 521 | "dependencies": { 522 | "time-zone": "^1.0.0" 523 | }, 524 | "engines": { 525 | "node": ">=6" 526 | } 527 | }, 528 | "node_modules/debug": { 529 | "version": "4.3.4", 530 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 531 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 532 | "dev": true, 533 | "dependencies": { 534 | "ms": "2.1.2" 535 | }, 536 | "engines": { 537 | "node": ">=6.0" 538 | }, 539 | "peerDependenciesMeta": { 540 | "supports-color": { 541 | "optional": true 542 | } 543 | } 544 | }, 545 | "node_modules/debug/node_modules/ms": { 546 | "version": "2.1.2", 547 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 548 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 549 | "dev": true 550 | }, 551 | "node_modules/dir-glob": { 552 | "version": "3.0.1", 553 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 554 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 555 | "dev": true, 556 | "dependencies": { 557 | "path-type": "^4.0.0" 558 | }, 559 | "engines": { 560 | "node": ">=8" 561 | } 562 | }, 563 | "node_modules/dotenv": { 564 | "version": "14.3.2", 565 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", 566 | "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==", 567 | "engines": { 568 | "node": ">=12" 569 | } 570 | }, 571 | "node_modules/dotenv-defaults": { 572 | "version": "5.0.2", 573 | "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-5.0.2.tgz", 574 | "integrity": "sha512-y5z4NhblzwNk8XBIYVzjLcFkANK0rxbRDO6kGOfH9QrVYIGVEX52IqwSprKVsaLHM9pnNkCSxazZF/JPydDPvA==", 575 | "dependencies": { 576 | "dotenv": "^14.0.0" 577 | } 578 | }, 579 | "node_modules/eastasianwidth": { 580 | "version": "0.2.0", 581 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 582 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 583 | "dev": true 584 | }, 585 | "node_modules/emittery": { 586 | "version": "1.0.1", 587 | "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", 588 | "integrity": "sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==", 589 | "dev": true, 590 | "engines": { 591 | "node": ">=14.16" 592 | }, 593 | "funding": { 594 | "url": "https://github.com/sindresorhus/emittery?sponsor=1" 595 | } 596 | }, 597 | "node_modules/emoji-regex": { 598 | "version": "9.2.2", 599 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 600 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 601 | "dev": true 602 | }, 603 | "node_modules/escalade": { 604 | "version": "3.1.1", 605 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 606 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 607 | "dev": true, 608 | "engines": { 609 | "node": ">=6" 610 | } 611 | }, 612 | "node_modules/esprima": { 613 | "version": "4.0.1", 614 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 615 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 616 | "dev": true, 617 | "bin": { 618 | "esparse": "bin/esparse.js", 619 | "esvalidate": "bin/esvalidate.js" 620 | }, 621 | "engines": { 622 | "node": ">=4" 623 | } 624 | }, 625 | "node_modules/esutils": { 626 | "version": "2.0.3", 627 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 628 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 629 | "dev": true, 630 | "engines": { 631 | "node": ">=0.10.0" 632 | } 633 | }, 634 | "node_modules/fast-diff": { 635 | "version": "1.3.0", 636 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", 637 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", 638 | "dev": true 639 | }, 640 | "node_modules/fast-glob": { 641 | "version": "3.3.0", 642 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", 643 | "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", 644 | "dev": true, 645 | "dependencies": { 646 | "@nodelib/fs.stat": "^2.0.2", 647 | "@nodelib/fs.walk": "^1.2.3", 648 | "glob-parent": "^5.1.2", 649 | "merge2": "^1.3.0", 650 | "micromatch": "^4.0.4" 651 | }, 652 | "engines": { 653 | "node": ">=8.6.0" 654 | } 655 | }, 656 | "node_modules/fastq": { 657 | "version": "1.15.0", 658 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 659 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 660 | "dev": true, 661 | "dependencies": { 662 | "reusify": "^1.0.4" 663 | } 664 | }, 665 | "node_modules/figures": { 666 | "version": "5.0.0", 667 | "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", 668 | "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", 669 | "dev": true, 670 | "dependencies": { 671 | "escape-string-regexp": "^5.0.0", 672 | "is-unicode-supported": "^1.2.0" 673 | }, 674 | "engines": { 675 | "node": ">=14" 676 | }, 677 | "funding": { 678 | "url": "https://github.com/sponsors/sindresorhus" 679 | } 680 | }, 681 | "node_modules/figures/node_modules/escape-string-regexp": { 682 | "version": "5.0.0", 683 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 684 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 685 | "dev": true, 686 | "engines": { 687 | "node": ">=12" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/sindresorhus" 691 | } 692 | }, 693 | "node_modules/fill-range": { 694 | "version": "7.0.1", 695 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 696 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 697 | "dev": true, 698 | "dependencies": { 699 | "to-regex-range": "^5.0.1" 700 | }, 701 | "engines": { 702 | "node": ">=8" 703 | } 704 | }, 705 | "node_modules/fsevents": { 706 | "version": "2.3.2", 707 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 708 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 709 | "dev": true, 710 | "hasInstallScript": true, 711 | "optional": true, 712 | "os": [ 713 | "darwin" 714 | ], 715 | "engines": { 716 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 717 | } 718 | }, 719 | "node_modules/get-caller-file": { 720 | "version": "2.0.5", 721 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 722 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 723 | "dev": true, 724 | "engines": { 725 | "node": "6.* || 8.* || >= 10.*" 726 | } 727 | }, 728 | "node_modules/glob-parent": { 729 | "version": "5.1.2", 730 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 731 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 732 | "dev": true, 733 | "dependencies": { 734 | "is-glob": "^4.0.1" 735 | }, 736 | "engines": { 737 | "node": ">= 6" 738 | } 739 | }, 740 | "node_modules/globby": { 741 | "version": "13.2.1", 742 | "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz", 743 | "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==", 744 | "dev": true, 745 | "dependencies": { 746 | "dir-glob": "^3.0.1", 747 | "fast-glob": "^3.2.11", 748 | "ignore": "^5.2.0", 749 | "merge2": "^1.4.1", 750 | "slash": "^4.0.0" 751 | }, 752 | "engines": { 753 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 754 | }, 755 | "funding": { 756 | "url": "https://github.com/sponsors/sindresorhus" 757 | } 758 | }, 759 | "node_modules/ignore": { 760 | "version": "5.2.4", 761 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 762 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 763 | "dev": true, 764 | "engines": { 765 | "node": ">= 4" 766 | } 767 | }, 768 | "node_modules/ignore-by-default": { 769 | "version": "2.1.0", 770 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", 771 | "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", 772 | "dev": true, 773 | "engines": { 774 | "node": ">=10 <11 || >=12 <13 || >=14" 775 | } 776 | }, 777 | "node_modules/imurmurhash": { 778 | "version": "0.1.4", 779 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 780 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 781 | "dev": true, 782 | "engines": { 783 | "node": ">=0.8.19" 784 | } 785 | }, 786 | "node_modules/indent-string": { 787 | "version": "5.0.0", 788 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 789 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 790 | "dev": true, 791 | "engines": { 792 | "node": ">=12" 793 | }, 794 | "funding": { 795 | "url": "https://github.com/sponsors/sindresorhus" 796 | } 797 | }, 798 | "node_modules/irregular-plurals": { 799 | "version": "3.5.0", 800 | "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", 801 | "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", 802 | "dev": true, 803 | "engines": { 804 | "node": ">=8" 805 | } 806 | }, 807 | "node_modules/is-binary-path": { 808 | "version": "2.1.0", 809 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 810 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 811 | "dev": true, 812 | "dependencies": { 813 | "binary-extensions": "^2.0.0" 814 | }, 815 | "engines": { 816 | "node": ">=8" 817 | } 818 | }, 819 | "node_modules/is-error": { 820 | "version": "2.2.2", 821 | "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", 822 | "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", 823 | "dev": true 824 | }, 825 | "node_modules/is-extglob": { 826 | "version": "2.1.1", 827 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 828 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 829 | "dev": true, 830 | "engines": { 831 | "node": ">=0.10.0" 832 | } 833 | }, 834 | "node_modules/is-fullwidth-code-point": { 835 | "version": "4.0.0", 836 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 837 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 838 | "dev": true, 839 | "engines": { 840 | "node": ">=12" 841 | }, 842 | "funding": { 843 | "url": "https://github.com/sponsors/sindresorhus" 844 | } 845 | }, 846 | "node_modules/is-glob": { 847 | "version": "4.0.3", 848 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 849 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 850 | "dev": true, 851 | "dependencies": { 852 | "is-extglob": "^2.1.1" 853 | }, 854 | "engines": { 855 | "node": ">=0.10.0" 856 | } 857 | }, 858 | "node_modules/is-number": { 859 | "version": "7.0.0", 860 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 861 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 862 | "dev": true, 863 | "engines": { 864 | "node": ">=0.12.0" 865 | } 866 | }, 867 | "node_modules/is-plain-object": { 868 | "version": "5.0.0", 869 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 870 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 871 | "dev": true, 872 | "engines": { 873 | "node": ">=0.10.0" 874 | } 875 | }, 876 | "node_modules/is-promise": { 877 | "version": "4.0.0", 878 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 879 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 880 | "dev": true 881 | }, 882 | "node_modules/is-unicode-supported": { 883 | "version": "1.3.0", 884 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 885 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 886 | "dev": true, 887 | "engines": { 888 | "node": ">=12" 889 | }, 890 | "funding": { 891 | "url": "https://github.com/sponsors/sindresorhus" 892 | } 893 | }, 894 | "node_modules/js-string-escape": { 895 | "version": "1.0.1", 896 | "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", 897 | "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", 898 | "dev": true, 899 | "engines": { 900 | "node": ">= 0.8" 901 | } 902 | }, 903 | "node_modules/json5": { 904 | "version": "2.2.3", 905 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 906 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 907 | "bin": { 908 | "json5": "lib/cli.js" 909 | }, 910 | "engines": { 911 | "node": ">=6" 912 | } 913 | }, 914 | "node_modules/livr": { 915 | "version": "2.7.1", 916 | "resolved": "https://registry.npmjs.org/livr/-/livr-2.7.1.tgz", 917 | "integrity": "sha512-QN29+9q5YUyGxu6rD+6rU5b0b9U5KgZUazjZLFUdaL1w+/WWK1Z/i9aH94m/YSwzEAHr7QjPPL7NBoBEdE9c1A==" 918 | }, 919 | "node_modules/livr-extra-rules": { 920 | "version": "1.3.1", 921 | "resolved": "https://registry.npmjs.org/livr-extra-rules/-/livr-extra-rules-1.3.1.tgz", 922 | "integrity": "sha512-jFIq1QxGpUGd6wM79C7MoaoduBpvh+p0YwM60XbpXKpkEuOT5NMa7rMq1wusrs5vEChg5ZQPWKb7ieikesGPiQ==", 923 | "peerDependencies": { 924 | "livr": "*" 925 | } 926 | }, 927 | "node_modules/load-json-file": { 928 | "version": "7.0.1", 929 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", 930 | "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", 931 | "dev": true, 932 | "engines": { 933 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 934 | }, 935 | "funding": { 936 | "url": "https://github.com/sponsors/sindresorhus" 937 | } 938 | }, 939 | "node_modules/lodash": { 940 | "version": "4.17.21", 941 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 942 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 943 | "dev": true 944 | }, 945 | "node_modules/lru-cache": { 946 | "version": "6.0.0", 947 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 948 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 949 | "dev": true, 950 | "dependencies": { 951 | "yallist": "^4.0.0" 952 | }, 953 | "engines": { 954 | "node": ">=10" 955 | } 956 | }, 957 | "node_modules/map-age-cleaner": { 958 | "version": "0.1.3", 959 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 960 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 961 | "dev": true, 962 | "dependencies": { 963 | "p-defer": "^1.0.0" 964 | }, 965 | "engines": { 966 | "node": ">=6" 967 | } 968 | }, 969 | "node_modules/matcher": { 970 | "version": "5.0.0", 971 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", 972 | "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", 973 | "dev": true, 974 | "dependencies": { 975 | "escape-string-regexp": "^5.0.0" 976 | }, 977 | "engines": { 978 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 979 | }, 980 | "funding": { 981 | "url": "https://github.com/sponsors/sindresorhus" 982 | } 983 | }, 984 | "node_modules/matcher/node_modules/escape-string-regexp": { 985 | "version": "5.0.0", 986 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 987 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 988 | "dev": true, 989 | "engines": { 990 | "node": ">=12" 991 | }, 992 | "funding": { 993 | "url": "https://github.com/sponsors/sindresorhus" 994 | } 995 | }, 996 | "node_modules/md5-hex": { 997 | "version": "3.0.1", 998 | "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", 999 | "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", 1000 | "dev": true, 1001 | "dependencies": { 1002 | "blueimp-md5": "^2.10.0" 1003 | }, 1004 | "engines": { 1005 | "node": ">=8" 1006 | } 1007 | }, 1008 | "node_modules/mem": { 1009 | "version": "9.0.2", 1010 | "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", 1011 | "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", 1012 | "dev": true, 1013 | "dependencies": { 1014 | "map-age-cleaner": "^0.1.3", 1015 | "mimic-fn": "^4.0.0" 1016 | }, 1017 | "engines": { 1018 | "node": ">=12.20" 1019 | }, 1020 | "funding": { 1021 | "url": "https://github.com/sindresorhus/mem?sponsor=1" 1022 | } 1023 | }, 1024 | "node_modules/merge2": { 1025 | "version": "1.4.1", 1026 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1027 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1028 | "dev": true, 1029 | "engines": { 1030 | "node": ">= 8" 1031 | } 1032 | }, 1033 | "node_modules/micromatch": { 1034 | "version": "4.0.5", 1035 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1036 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1037 | "dev": true, 1038 | "dependencies": { 1039 | "braces": "^3.0.2", 1040 | "picomatch": "^2.3.1" 1041 | }, 1042 | "engines": { 1043 | "node": ">=8.6" 1044 | } 1045 | }, 1046 | "node_modules/mimic-fn": { 1047 | "version": "4.0.0", 1048 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 1049 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 1050 | "dev": true, 1051 | "engines": { 1052 | "node": ">=12" 1053 | }, 1054 | "funding": { 1055 | "url": "https://github.com/sponsors/sindresorhus" 1056 | } 1057 | }, 1058 | "node_modules/ms": { 1059 | "version": "2.1.3", 1060 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1061 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1062 | "dev": true 1063 | }, 1064 | "node_modules/nofilter": { 1065 | "version": "3.1.0", 1066 | "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", 1067 | "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", 1068 | "dev": true, 1069 | "engines": { 1070 | "node": ">=12.19" 1071 | } 1072 | }, 1073 | "node_modules/normalize-path": { 1074 | "version": "3.0.0", 1075 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1076 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1077 | "dev": true, 1078 | "engines": { 1079 | "node": ">=0.10.0" 1080 | } 1081 | }, 1082 | "node_modules/p-defer": { 1083 | "version": "1.0.0", 1084 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 1085 | "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", 1086 | "dev": true, 1087 | "engines": { 1088 | "node": ">=4" 1089 | } 1090 | }, 1091 | "node_modules/p-event": { 1092 | "version": "5.0.1", 1093 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", 1094 | "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", 1095 | "dev": true, 1096 | "dependencies": { 1097 | "p-timeout": "^5.0.2" 1098 | }, 1099 | "engines": { 1100 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1101 | }, 1102 | "funding": { 1103 | "url": "https://github.com/sponsors/sindresorhus" 1104 | } 1105 | }, 1106 | "node_modules/p-map": { 1107 | "version": "5.5.0", 1108 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", 1109 | "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", 1110 | "dev": true, 1111 | "dependencies": { 1112 | "aggregate-error": "^4.0.0" 1113 | }, 1114 | "engines": { 1115 | "node": ">=12" 1116 | }, 1117 | "funding": { 1118 | "url": "https://github.com/sponsors/sindresorhus" 1119 | } 1120 | }, 1121 | "node_modules/p-timeout": { 1122 | "version": "5.1.0", 1123 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", 1124 | "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", 1125 | "dev": true, 1126 | "engines": { 1127 | "node": ">=12" 1128 | }, 1129 | "funding": { 1130 | "url": "https://github.com/sponsors/sindresorhus" 1131 | } 1132 | }, 1133 | "node_modules/parse-ms": { 1134 | "version": "3.0.0", 1135 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", 1136 | "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", 1137 | "dev": true, 1138 | "engines": { 1139 | "node": ">=12" 1140 | }, 1141 | "funding": { 1142 | "url": "https://github.com/sponsors/sindresorhus" 1143 | } 1144 | }, 1145 | "node_modules/path-type": { 1146 | "version": "4.0.0", 1147 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1148 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1149 | "dev": true, 1150 | "engines": { 1151 | "node": ">=8" 1152 | } 1153 | }, 1154 | "node_modules/picomatch": { 1155 | "version": "2.3.1", 1156 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1157 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1158 | "dev": true, 1159 | "engines": { 1160 | "node": ">=8.6" 1161 | }, 1162 | "funding": { 1163 | "url": "https://github.com/sponsors/jonschlinkert" 1164 | } 1165 | }, 1166 | "node_modules/pkg-conf": { 1167 | "version": "4.0.0", 1168 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", 1169 | "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", 1170 | "dev": true, 1171 | "dependencies": { 1172 | "find-up": "^6.0.0", 1173 | "load-json-file": "^7.0.0" 1174 | }, 1175 | "engines": { 1176 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1177 | }, 1178 | "funding": { 1179 | "url": "https://github.com/sponsors/sindresorhus" 1180 | } 1181 | }, 1182 | "node_modules/pkg-conf/node_modules/find-up": { 1183 | "version": "6.3.0", 1184 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", 1185 | "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", 1186 | "dev": true, 1187 | "dependencies": { 1188 | "locate-path": "^7.1.0", 1189 | "path-exists": "^5.0.0" 1190 | }, 1191 | "engines": { 1192 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1193 | }, 1194 | "funding": { 1195 | "url": "https://github.com/sponsors/sindresorhus" 1196 | } 1197 | }, 1198 | "node_modules/pkg-conf/node_modules/locate-path": { 1199 | "version": "7.2.0", 1200 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", 1201 | "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", 1202 | "dev": true, 1203 | "dependencies": { 1204 | "p-locate": "^6.0.0" 1205 | }, 1206 | "engines": { 1207 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1208 | }, 1209 | "funding": { 1210 | "url": "https://github.com/sponsors/sindresorhus" 1211 | } 1212 | }, 1213 | "node_modules/pkg-conf/node_modules/p-limit": { 1214 | "version": "4.0.0", 1215 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 1216 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 1217 | "dev": true, 1218 | "dependencies": { 1219 | "yocto-queue": "^1.0.0" 1220 | }, 1221 | "engines": { 1222 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1223 | }, 1224 | "funding": { 1225 | "url": "https://github.com/sponsors/sindresorhus" 1226 | } 1227 | }, 1228 | "node_modules/pkg-conf/node_modules/p-locate": { 1229 | "version": "6.0.0", 1230 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", 1231 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "p-limit": "^4.0.0" 1235 | }, 1236 | "engines": { 1237 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1238 | }, 1239 | "funding": { 1240 | "url": "https://github.com/sponsors/sindresorhus" 1241 | } 1242 | }, 1243 | "node_modules/pkg-conf/node_modules/path-exists": { 1244 | "version": "5.0.0", 1245 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", 1246 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", 1247 | "dev": true, 1248 | "engines": { 1249 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1250 | } 1251 | }, 1252 | "node_modules/pkg-conf/node_modules/yocto-queue": { 1253 | "version": "1.0.0", 1254 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 1255 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 1256 | "dev": true, 1257 | "engines": { 1258 | "node": ">=12.20" 1259 | }, 1260 | "funding": { 1261 | "url": "https://github.com/sponsors/sindresorhus" 1262 | } 1263 | }, 1264 | "node_modules/plur": { 1265 | "version": "5.1.0", 1266 | "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", 1267 | "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", 1268 | "dev": true, 1269 | "dependencies": { 1270 | "irregular-plurals": "^3.3.0" 1271 | }, 1272 | "engines": { 1273 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1274 | }, 1275 | "funding": { 1276 | "url": "https://github.com/sponsors/sindresorhus" 1277 | } 1278 | }, 1279 | "node_modules/pretty-ms": { 1280 | "version": "8.0.0", 1281 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", 1282 | "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "parse-ms": "^3.0.0" 1286 | }, 1287 | "engines": { 1288 | "node": ">=14.16" 1289 | }, 1290 | "funding": { 1291 | "url": "https://github.com/sponsors/sindresorhus" 1292 | } 1293 | }, 1294 | "node_modules/queue-microtask": { 1295 | "version": "1.2.3", 1296 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1297 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1298 | "dev": true, 1299 | "funding": [ 1300 | { 1301 | "type": "github", 1302 | "url": "https://github.com/sponsors/feross" 1303 | }, 1304 | { 1305 | "type": "patreon", 1306 | "url": "https://www.patreon.com/feross" 1307 | }, 1308 | { 1309 | "type": "consulting", 1310 | "url": "https://feross.org/support" 1311 | } 1312 | ] 1313 | }, 1314 | "node_modules/readdirp": { 1315 | "version": "3.6.0", 1316 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1317 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "picomatch": "^2.2.1" 1321 | }, 1322 | "engines": { 1323 | "node": ">=8.10.0" 1324 | } 1325 | }, 1326 | "node_modules/require-directory": { 1327 | "version": "2.1.1", 1328 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1329 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1330 | "dev": true, 1331 | "engines": { 1332 | "node": ">=0.10.0" 1333 | } 1334 | }, 1335 | "node_modules/resolve-cwd": { 1336 | "version": "3.0.0", 1337 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 1338 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 1339 | "dev": true, 1340 | "dependencies": { 1341 | "resolve-from": "^5.0.0" 1342 | }, 1343 | "engines": { 1344 | "node": ">=8" 1345 | } 1346 | }, 1347 | "node_modules/resolve-cwd/node_modules/resolve-from": { 1348 | "version": "5.0.0", 1349 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 1350 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 1351 | "dev": true, 1352 | "engines": { 1353 | "node": ">=8" 1354 | } 1355 | }, 1356 | "node_modules/reusify": { 1357 | "version": "1.0.4", 1358 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1359 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1360 | "dev": true, 1361 | "engines": { 1362 | "iojs": ">=1.0.0", 1363 | "node": ">=0.10.0" 1364 | } 1365 | }, 1366 | "node_modules/run-parallel": { 1367 | "version": "1.2.0", 1368 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1369 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1370 | "dev": true, 1371 | "funding": [ 1372 | { 1373 | "type": "github", 1374 | "url": "https://github.com/sponsors/feross" 1375 | }, 1376 | { 1377 | "type": "patreon", 1378 | "url": "https://www.patreon.com/feross" 1379 | }, 1380 | { 1381 | "type": "consulting", 1382 | "url": "https://feross.org/support" 1383 | } 1384 | ], 1385 | "dependencies": { 1386 | "queue-microtask": "^1.2.2" 1387 | } 1388 | }, 1389 | "node_modules/semver": { 1390 | "version": "7.5.3", 1391 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", 1392 | "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", 1393 | "dev": true, 1394 | "dependencies": { 1395 | "lru-cache": "^6.0.0" 1396 | }, 1397 | "bin": { 1398 | "semver": "bin/semver.js" 1399 | }, 1400 | "engines": { 1401 | "node": ">=10" 1402 | } 1403 | }, 1404 | "node_modules/serialize-error": { 1405 | "version": "7.0.1", 1406 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1407 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1408 | "dev": true, 1409 | "dependencies": { 1410 | "type-fest": "^0.13.1" 1411 | }, 1412 | "engines": { 1413 | "node": ">=10" 1414 | }, 1415 | "funding": { 1416 | "url": "https://github.com/sponsors/sindresorhus" 1417 | } 1418 | }, 1419 | "node_modules/slash": { 1420 | "version": "4.0.0", 1421 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 1422 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 1423 | "dev": true, 1424 | "engines": { 1425 | "node": ">=12" 1426 | }, 1427 | "funding": { 1428 | "url": "https://github.com/sponsors/sindresorhus" 1429 | } 1430 | }, 1431 | "node_modules/slice-ansi": { 1432 | "version": "5.0.0", 1433 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 1434 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 1435 | "dev": true, 1436 | "dependencies": { 1437 | "ansi-styles": "^6.0.0", 1438 | "is-fullwidth-code-point": "^4.0.0" 1439 | }, 1440 | "engines": { 1441 | "node": ">=12" 1442 | }, 1443 | "funding": { 1444 | "url": "https://github.com/chalk/slice-ansi?sponsor=1" 1445 | } 1446 | }, 1447 | "node_modules/sprintf-js": { 1448 | "version": "1.0.3", 1449 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1450 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 1451 | "dev": true 1452 | }, 1453 | "node_modules/stack-utils": { 1454 | "version": "2.0.6", 1455 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", 1456 | "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", 1457 | "dev": true, 1458 | "dependencies": { 1459 | "escape-string-regexp": "^2.0.0" 1460 | }, 1461 | "engines": { 1462 | "node": ">=10" 1463 | } 1464 | }, 1465 | "node_modules/stack-utils/node_modules/escape-string-regexp": { 1466 | "version": "2.0.0", 1467 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 1468 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 1469 | "dev": true, 1470 | "engines": { 1471 | "node": ">=8" 1472 | } 1473 | }, 1474 | "node_modules/string-width": { 1475 | "version": "5.1.2", 1476 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1477 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1478 | "dev": true, 1479 | "dependencies": { 1480 | "eastasianwidth": "^0.2.0", 1481 | "emoji-regex": "^9.2.2", 1482 | "strip-ansi": "^7.0.1" 1483 | }, 1484 | "engines": { 1485 | "node": ">=12" 1486 | }, 1487 | "funding": { 1488 | "url": "https://github.com/sponsors/sindresorhus" 1489 | } 1490 | }, 1491 | "node_modules/strip-ansi": { 1492 | "version": "7.1.0", 1493 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1494 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1495 | "dev": true, 1496 | "dependencies": { 1497 | "ansi-regex": "^6.0.1" 1498 | }, 1499 | "engines": { 1500 | "node": ">=12" 1501 | }, 1502 | "funding": { 1503 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1504 | } 1505 | }, 1506 | "node_modules/supertap": { 1507 | "version": "3.0.1", 1508 | "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", 1509 | "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", 1510 | "dev": true, 1511 | "dependencies": { 1512 | "indent-string": "^5.0.0", 1513 | "js-yaml": "^3.14.1", 1514 | "serialize-error": "^7.0.1", 1515 | "strip-ansi": "^7.0.1" 1516 | }, 1517 | "engines": { 1518 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1519 | } 1520 | }, 1521 | "node_modules/supertap/node_modules/argparse": { 1522 | "version": "1.0.10", 1523 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1524 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1525 | "dev": true, 1526 | "dependencies": { 1527 | "sprintf-js": "~1.0.2" 1528 | } 1529 | }, 1530 | "node_modules/supertap/node_modules/js-yaml": { 1531 | "version": "3.14.1", 1532 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1533 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1534 | "dev": true, 1535 | "dependencies": { 1536 | "argparse": "^1.0.7", 1537 | "esprima": "^4.0.0" 1538 | }, 1539 | "bin": { 1540 | "js-yaml": "bin/js-yaml.js" 1541 | } 1542 | }, 1543 | "node_modules/temp-dir": { 1544 | "version": "3.0.0", 1545 | "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", 1546 | "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", 1547 | "dev": true, 1548 | "engines": { 1549 | "node": ">=14.16" 1550 | } 1551 | }, 1552 | "node_modules/time-zone": { 1553 | "version": "1.0.0", 1554 | "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", 1555 | "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", 1556 | "dev": true, 1557 | "engines": { 1558 | "node": ">=4" 1559 | } 1560 | }, 1561 | "node_modules/to-regex-range": { 1562 | "version": "5.0.1", 1563 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1564 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1565 | "dev": true, 1566 | "dependencies": { 1567 | "is-number": "^7.0.0" 1568 | }, 1569 | "engines": { 1570 | "node": ">=8.0" 1571 | } 1572 | }, 1573 | "node_modules/type-fest": { 1574 | "version": "0.13.1", 1575 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1576 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 1577 | "dev": true, 1578 | "engines": { 1579 | "node": ">=10" 1580 | }, 1581 | "funding": { 1582 | "url": "https://github.com/sponsors/sindresorhus" 1583 | } 1584 | }, 1585 | "node_modules/well-known-symbols": { 1586 | "version": "2.0.0", 1587 | "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", 1588 | "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", 1589 | "dev": true, 1590 | "engines": { 1591 | "node": ">=6" 1592 | } 1593 | }, 1594 | "node_modules/wrap-ansi": { 1595 | "version": "7.0.0", 1596 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1597 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1598 | "dev": true, 1599 | "dependencies": { 1600 | "ansi-styles": "^4.0.0", 1601 | "string-width": "^4.1.0", 1602 | "strip-ansi": "^6.0.0" 1603 | }, 1604 | "engines": { 1605 | "node": ">=10" 1606 | }, 1607 | "funding": { 1608 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1609 | } 1610 | }, 1611 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 1612 | "version": "5.0.1", 1613 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1614 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1615 | "dev": true, 1616 | "engines": { 1617 | "node": ">=8" 1618 | } 1619 | }, 1620 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 1621 | "version": "4.3.0", 1622 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1623 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1624 | "dev": true, 1625 | "dependencies": { 1626 | "color-convert": "^2.0.1" 1627 | }, 1628 | "engines": { 1629 | "node": ">=8" 1630 | }, 1631 | "funding": { 1632 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1633 | } 1634 | }, 1635 | "node_modules/wrap-ansi/node_modules/color-convert": { 1636 | "version": "2.0.1", 1637 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1638 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1639 | "dev": true, 1640 | "dependencies": { 1641 | "color-name": "~1.1.4" 1642 | }, 1643 | "engines": { 1644 | "node": ">=7.0.0" 1645 | } 1646 | }, 1647 | "node_modules/wrap-ansi/node_modules/color-name": { 1648 | "version": "1.1.4", 1649 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1650 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1651 | "dev": true 1652 | }, 1653 | "node_modules/wrap-ansi/node_modules/emoji-regex": { 1654 | "version": "8.0.0", 1655 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1656 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1657 | "dev": true 1658 | }, 1659 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 1660 | "version": "3.0.0", 1661 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1662 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1663 | "dev": true, 1664 | "engines": { 1665 | "node": ">=8" 1666 | } 1667 | }, 1668 | "node_modules/wrap-ansi/node_modules/string-width": { 1669 | "version": "4.2.3", 1670 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1671 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1672 | "dev": true, 1673 | "dependencies": { 1674 | "emoji-regex": "^8.0.0", 1675 | "is-fullwidth-code-point": "^3.0.0", 1676 | "strip-ansi": "^6.0.1" 1677 | }, 1678 | "engines": { 1679 | "node": ">=8" 1680 | } 1681 | }, 1682 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 1683 | "version": "6.0.1", 1684 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1685 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1686 | "dev": true, 1687 | "dependencies": { 1688 | "ansi-regex": "^5.0.1" 1689 | }, 1690 | "engines": { 1691 | "node": ">=8" 1692 | } 1693 | }, 1694 | "node_modules/write-file-atomic": { 1695 | "version": "5.0.1", 1696 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 1697 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 1698 | "dev": true, 1699 | "dependencies": { 1700 | "imurmurhash": "^0.1.4", 1701 | "signal-exit": "^4.0.1" 1702 | }, 1703 | "engines": { 1704 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0" 1705 | } 1706 | }, 1707 | "node_modules/write-file-atomic/node_modules/signal-exit": { 1708 | "version": "4.0.2", 1709 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", 1710 | "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", 1711 | "dev": true, 1712 | "engines": { 1713 | "node": ">=14" 1714 | }, 1715 | "funding": { 1716 | "url": "https://github.com/sponsors/isaacs" 1717 | } 1718 | }, 1719 | "node_modules/y18n": { 1720 | "version": "5.0.8", 1721 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1722 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1723 | "dev": true, 1724 | "engines": { 1725 | "node": ">=10" 1726 | } 1727 | }, 1728 | "node_modules/yallist": { 1729 | "version": "4.0.0", 1730 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1731 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1732 | "dev": true 1733 | }, 1734 | "node_modules/yargs": { 1735 | "version": "17.7.2", 1736 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1737 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1738 | "dev": true, 1739 | "dependencies": { 1740 | "cliui": "^8.0.1", 1741 | "escalade": "^3.1.1", 1742 | "get-caller-file": "^2.0.5", 1743 | "require-directory": "^2.1.1", 1744 | "string-width": "^4.2.3", 1745 | "y18n": "^5.0.5", 1746 | "yargs-parser": "^21.1.1" 1747 | }, 1748 | "engines": { 1749 | "node": ">=12" 1750 | } 1751 | }, 1752 | "node_modules/yargs/node_modules/ansi-regex": { 1753 | "version": "5.0.1", 1754 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1755 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1756 | "dev": true, 1757 | "engines": { 1758 | "node": ">=8" 1759 | } 1760 | }, 1761 | "node_modules/yargs/node_modules/emoji-regex": { 1762 | "version": "8.0.0", 1763 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1764 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1765 | "dev": true 1766 | }, 1767 | "node_modules/yargs/node_modules/is-fullwidth-code-point": { 1768 | "version": "3.0.0", 1769 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1770 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1771 | "dev": true, 1772 | "engines": { 1773 | "node": ">=8" 1774 | } 1775 | }, 1776 | "node_modules/yargs/node_modules/string-width": { 1777 | "version": "4.2.3", 1778 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1779 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1780 | "dev": true, 1781 | "dependencies": { 1782 | "emoji-regex": "^8.0.0", 1783 | "is-fullwidth-code-point": "^3.0.0", 1784 | "strip-ansi": "^6.0.1" 1785 | }, 1786 | "engines": { 1787 | "node": ">=8" 1788 | } 1789 | }, 1790 | "node_modules/yargs/node_modules/strip-ansi": { 1791 | "version": "6.0.1", 1792 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1793 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1794 | "dev": true, 1795 | "dependencies": { 1796 | "ansi-regex": "^5.0.1" 1797 | }, 1798 | "engines": { 1799 | "node": ">=8" 1800 | } 1801 | }, 1802 | "node_modules/yargs/node_modules/yargs-parser": { 1803 | "version": "21.1.1", 1804 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1805 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1806 | "dev": true, 1807 | "engines": { 1808 | "node": ">=12" 1809 | } 1810 | } 1811 | }, 1812 | "dependencies": { 1813 | "@nodelib/fs.scandir": { 1814 | "version": "2.1.5", 1815 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1816 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1817 | "dev": true, 1818 | "requires": { 1819 | "@nodelib/fs.stat": "2.0.5", 1820 | "run-parallel": "^1.1.9" 1821 | } 1822 | }, 1823 | "@nodelib/fs.stat": { 1824 | "version": "2.0.5", 1825 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1826 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1827 | "dev": true 1828 | }, 1829 | "@nodelib/fs.walk": { 1830 | "version": "1.2.8", 1831 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1832 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1833 | "dev": true, 1834 | "requires": { 1835 | "@nodelib/fs.scandir": "2.1.5", 1836 | "fastq": "^1.6.0" 1837 | } 1838 | }, 1839 | "acorn": { 1840 | "version": "8.9.0", 1841 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", 1842 | "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", 1843 | "dev": true 1844 | }, 1845 | "acorn-walk": { 1846 | "version": "8.2.0", 1847 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 1848 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 1849 | "dev": true 1850 | }, 1851 | "aggregate-error": { 1852 | "version": "4.0.1", 1853 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", 1854 | "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", 1855 | "dev": true, 1856 | "requires": { 1857 | "clean-stack": "^4.0.0", 1858 | "indent-string": "^5.0.0" 1859 | } 1860 | }, 1861 | "ansi-regex": { 1862 | "version": "6.0.1", 1863 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1864 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1865 | "dev": true 1866 | }, 1867 | "ansi-styles": { 1868 | "version": "6.2.1", 1869 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1870 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1871 | "dev": true 1872 | }, 1873 | "anymatch": { 1874 | "version": "3.1.3", 1875 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1876 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1877 | "dev": true, 1878 | "requires": { 1879 | "normalize-path": "^3.0.0", 1880 | "picomatch": "^2.0.4" 1881 | } 1882 | }, 1883 | "array-find-index": { 1884 | "version": "1.0.2", 1885 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 1886 | "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", 1887 | "dev": true 1888 | }, 1889 | "arrgv": { 1890 | "version": "1.0.2", 1891 | "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", 1892 | "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", 1893 | "dev": true 1894 | }, 1895 | "arrify": { 1896 | "version": "3.0.0", 1897 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", 1898 | "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", 1899 | "dev": true 1900 | }, 1901 | "ava": { 1902 | "version": "5.3.1", 1903 | "resolved": "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz", 1904 | "integrity": "sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==", 1905 | "dev": true, 1906 | "requires": { 1907 | "acorn": "^8.8.2", 1908 | "acorn-walk": "^8.2.0", 1909 | "ansi-styles": "^6.2.1", 1910 | "arrgv": "^1.0.2", 1911 | "arrify": "^3.0.0", 1912 | "callsites": "^4.0.0", 1913 | "cbor": "^8.1.0", 1914 | "chalk": "^5.2.0", 1915 | "chokidar": "^3.5.3", 1916 | "chunkd": "^2.0.1", 1917 | "ci-info": "^3.8.0", 1918 | "ci-parallel-vars": "^1.0.1", 1919 | "clean-yaml-object": "^0.1.0", 1920 | "cli-truncate": "^3.1.0", 1921 | "code-excerpt": "^4.0.0", 1922 | "common-path-prefix": "^3.0.0", 1923 | "concordance": "^5.0.4", 1924 | "currently-unhandled": "^0.4.1", 1925 | "debug": "^4.3.4", 1926 | "emittery": "^1.0.1", 1927 | "figures": "^5.0.0", 1928 | "globby": "^13.1.4", 1929 | "ignore-by-default": "^2.1.0", 1930 | "indent-string": "^5.0.0", 1931 | "is-error": "^2.2.2", 1932 | "is-plain-object": "^5.0.0", 1933 | "is-promise": "^4.0.0", 1934 | "matcher": "^5.0.0", 1935 | "mem": "^9.0.2", 1936 | "ms": "^2.1.3", 1937 | "p-event": "^5.0.1", 1938 | "p-map": "^5.5.0", 1939 | "picomatch": "^2.3.1", 1940 | "pkg-conf": "^4.0.0", 1941 | "plur": "^5.1.0", 1942 | "pretty-ms": "^8.0.0", 1943 | "resolve-cwd": "^3.0.0", 1944 | "stack-utils": "^2.0.6", 1945 | "strip-ansi": "^7.0.1", 1946 | "supertap": "^3.0.1", 1947 | "temp-dir": "^3.0.0", 1948 | "write-file-atomic": "^5.0.1", 1949 | "yargs": "^17.7.2" 1950 | } 1951 | }, 1952 | "binary-extensions": { 1953 | "version": "2.2.0", 1954 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1955 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1956 | "dev": true 1957 | }, 1958 | "blueimp-md5": { 1959 | "version": "2.19.0", 1960 | "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", 1961 | "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", 1962 | "dev": true 1963 | }, 1964 | "braces": { 1965 | "version": "3.0.2", 1966 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1967 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1968 | "dev": true, 1969 | "requires": { 1970 | "fill-range": "^7.0.1" 1971 | } 1972 | }, 1973 | "callsites": { 1974 | "version": "4.0.0", 1975 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", 1976 | "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", 1977 | "dev": true 1978 | }, 1979 | "cbor": { 1980 | "version": "8.1.0", 1981 | "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", 1982 | "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", 1983 | "dev": true, 1984 | "requires": { 1985 | "nofilter": "^3.1.0" 1986 | } 1987 | }, 1988 | "chalk": { 1989 | "version": "5.3.0", 1990 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1991 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 1992 | "dev": true 1993 | }, 1994 | "chokidar": { 1995 | "version": "3.5.3", 1996 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1997 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1998 | "dev": true, 1999 | "requires": { 2000 | "anymatch": "~3.1.2", 2001 | "braces": "~3.0.2", 2002 | "fsevents": "~2.3.2", 2003 | "glob-parent": "~5.1.2", 2004 | "is-binary-path": "~2.1.0", 2005 | "is-glob": "~4.0.1", 2006 | "normalize-path": "~3.0.0", 2007 | "readdirp": "~3.6.0" 2008 | } 2009 | }, 2010 | "chunkd": { 2011 | "version": "2.0.1", 2012 | "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", 2013 | "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", 2014 | "dev": true 2015 | }, 2016 | "ci-info": { 2017 | "version": "3.8.0", 2018 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", 2019 | "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", 2020 | "dev": true 2021 | }, 2022 | "ci-parallel-vars": { 2023 | "version": "1.0.1", 2024 | "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", 2025 | "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", 2026 | "dev": true 2027 | }, 2028 | "clean-stack": { 2029 | "version": "4.2.0", 2030 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", 2031 | "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", 2032 | "dev": true, 2033 | "requires": { 2034 | "escape-string-regexp": "5.0.0" 2035 | }, 2036 | "dependencies": { 2037 | "escape-string-regexp": { 2038 | "version": "5.0.0", 2039 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 2040 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 2041 | "dev": true 2042 | } 2043 | } 2044 | }, 2045 | "clean-yaml-object": { 2046 | "version": "0.1.0", 2047 | "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", 2048 | "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", 2049 | "dev": true 2050 | }, 2051 | "cli-truncate": { 2052 | "version": "3.1.0", 2053 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", 2054 | "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", 2055 | "dev": true, 2056 | "requires": { 2057 | "slice-ansi": "^5.0.0", 2058 | "string-width": "^5.0.0" 2059 | } 2060 | }, 2061 | "cliui": { 2062 | "version": "8.0.1", 2063 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 2064 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 2065 | "dev": true, 2066 | "requires": { 2067 | "string-width": "^4.2.0", 2068 | "strip-ansi": "^6.0.1", 2069 | "wrap-ansi": "^7.0.0" 2070 | }, 2071 | "dependencies": { 2072 | "ansi-regex": { 2073 | "version": "5.0.1", 2074 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2075 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2076 | "dev": true 2077 | }, 2078 | "emoji-regex": { 2079 | "version": "8.0.0", 2080 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2081 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2082 | "dev": true 2083 | }, 2084 | "is-fullwidth-code-point": { 2085 | "version": "3.0.0", 2086 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2087 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2088 | "dev": true 2089 | }, 2090 | "string-width": { 2091 | "version": "4.2.3", 2092 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2093 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2094 | "dev": true, 2095 | "requires": { 2096 | "emoji-regex": "^8.0.0", 2097 | "is-fullwidth-code-point": "^3.0.0", 2098 | "strip-ansi": "^6.0.1" 2099 | } 2100 | }, 2101 | "strip-ansi": { 2102 | "version": "6.0.1", 2103 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2104 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2105 | "dev": true, 2106 | "requires": { 2107 | "ansi-regex": "^5.0.1" 2108 | } 2109 | } 2110 | } 2111 | }, 2112 | "code-excerpt": { 2113 | "version": "4.0.0", 2114 | "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", 2115 | "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", 2116 | "dev": true, 2117 | "requires": { 2118 | "convert-to-spaces": "^2.0.1" 2119 | } 2120 | }, 2121 | "common-path-prefix": { 2122 | "version": "3.0.0", 2123 | "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", 2124 | "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", 2125 | "dev": true 2126 | }, 2127 | "concordance": { 2128 | "version": "5.0.4", 2129 | "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", 2130 | "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", 2131 | "dev": true, 2132 | "requires": { 2133 | "date-time": "^3.1.0", 2134 | "esutils": "^2.0.3", 2135 | "fast-diff": "^1.2.0", 2136 | "js-string-escape": "^1.0.1", 2137 | "lodash": "^4.17.15", 2138 | "md5-hex": "^3.0.1", 2139 | "semver": "^7.3.2", 2140 | "well-known-symbols": "^2.0.0" 2141 | } 2142 | }, 2143 | "convert-to-spaces": { 2144 | "version": "2.0.1", 2145 | "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", 2146 | "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", 2147 | "dev": true 2148 | }, 2149 | "currently-unhandled": { 2150 | "version": "0.4.1", 2151 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 2152 | "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", 2153 | "dev": true, 2154 | "requires": { 2155 | "array-find-index": "^1.0.1" 2156 | } 2157 | }, 2158 | "date-time": { 2159 | "version": "3.1.0", 2160 | "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", 2161 | "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", 2162 | "dev": true, 2163 | "requires": { 2164 | "time-zone": "^1.0.0" 2165 | } 2166 | }, 2167 | "debug": { 2168 | "version": "4.3.4", 2169 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2170 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2171 | "dev": true, 2172 | "requires": { 2173 | "ms": "2.1.2" 2174 | }, 2175 | "dependencies": { 2176 | "ms": { 2177 | "version": "2.1.2", 2178 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2179 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2180 | "dev": true 2181 | } 2182 | } 2183 | }, 2184 | "dir-glob": { 2185 | "version": "3.0.1", 2186 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 2187 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 2188 | "dev": true, 2189 | "requires": { 2190 | "path-type": "^4.0.0" 2191 | } 2192 | }, 2193 | "dotenv": { 2194 | "version": "14.3.2", 2195 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", 2196 | "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==" 2197 | }, 2198 | "dotenv-defaults": { 2199 | "version": "5.0.2", 2200 | "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-5.0.2.tgz", 2201 | "integrity": "sha512-y5z4NhblzwNk8XBIYVzjLcFkANK0rxbRDO6kGOfH9QrVYIGVEX52IqwSprKVsaLHM9pnNkCSxazZF/JPydDPvA==", 2202 | "requires": { 2203 | "dotenv": "^14.0.0" 2204 | } 2205 | }, 2206 | "eastasianwidth": { 2207 | "version": "0.2.0", 2208 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 2209 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 2210 | "dev": true 2211 | }, 2212 | "emittery": { 2213 | "version": "1.0.1", 2214 | "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", 2215 | "integrity": "sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==", 2216 | "dev": true 2217 | }, 2218 | "emoji-regex": { 2219 | "version": "9.2.2", 2220 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 2221 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 2222 | "dev": true 2223 | }, 2224 | "escalade": { 2225 | "version": "3.1.1", 2226 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2227 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 2228 | "dev": true 2229 | }, 2230 | "esprima": { 2231 | "version": "4.0.1", 2232 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 2233 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 2234 | "dev": true 2235 | }, 2236 | "esutils": { 2237 | "version": "2.0.3", 2238 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2239 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2240 | "dev": true 2241 | }, 2242 | "fast-diff": { 2243 | "version": "1.3.0", 2244 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", 2245 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", 2246 | "dev": true 2247 | }, 2248 | "fast-glob": { 2249 | "version": "3.3.0", 2250 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", 2251 | "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", 2252 | "dev": true, 2253 | "requires": { 2254 | "@nodelib/fs.stat": "^2.0.2", 2255 | "@nodelib/fs.walk": "^1.2.3", 2256 | "glob-parent": "^5.1.2", 2257 | "merge2": "^1.3.0", 2258 | "micromatch": "^4.0.4" 2259 | } 2260 | }, 2261 | "fastq": { 2262 | "version": "1.15.0", 2263 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 2264 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 2265 | "dev": true, 2266 | "requires": { 2267 | "reusify": "^1.0.4" 2268 | } 2269 | }, 2270 | "figures": { 2271 | "version": "5.0.0", 2272 | "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", 2273 | "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", 2274 | "dev": true, 2275 | "requires": { 2276 | "escape-string-regexp": "^5.0.0", 2277 | "is-unicode-supported": "^1.2.0" 2278 | }, 2279 | "dependencies": { 2280 | "escape-string-regexp": { 2281 | "version": "5.0.0", 2282 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 2283 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 2284 | "dev": true 2285 | } 2286 | } 2287 | }, 2288 | "fill-range": { 2289 | "version": "7.0.1", 2290 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2291 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2292 | "dev": true, 2293 | "requires": { 2294 | "to-regex-range": "^5.0.1" 2295 | } 2296 | }, 2297 | "fsevents": { 2298 | "version": "2.3.2", 2299 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2300 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2301 | "dev": true, 2302 | "optional": true 2303 | }, 2304 | "get-caller-file": { 2305 | "version": "2.0.5", 2306 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2307 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 2308 | "dev": true 2309 | }, 2310 | "glob-parent": { 2311 | "version": "5.1.2", 2312 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2313 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2314 | "dev": true, 2315 | "requires": { 2316 | "is-glob": "^4.0.1" 2317 | } 2318 | }, 2319 | "globby": { 2320 | "version": "13.2.1", 2321 | "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.1.tgz", 2322 | "integrity": "sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg==", 2323 | "dev": true, 2324 | "requires": { 2325 | "dir-glob": "^3.0.1", 2326 | "fast-glob": "^3.2.11", 2327 | "ignore": "^5.2.0", 2328 | "merge2": "^1.4.1", 2329 | "slash": "^4.0.0" 2330 | } 2331 | }, 2332 | "ignore": { 2333 | "version": "5.2.4", 2334 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 2335 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 2336 | "dev": true 2337 | }, 2338 | "ignore-by-default": { 2339 | "version": "2.1.0", 2340 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", 2341 | "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", 2342 | "dev": true 2343 | }, 2344 | "imurmurhash": { 2345 | "version": "0.1.4", 2346 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2347 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2348 | "dev": true 2349 | }, 2350 | "indent-string": { 2351 | "version": "5.0.0", 2352 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 2353 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 2354 | "dev": true 2355 | }, 2356 | "irregular-plurals": { 2357 | "version": "3.5.0", 2358 | "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", 2359 | "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", 2360 | "dev": true 2361 | }, 2362 | "is-binary-path": { 2363 | "version": "2.1.0", 2364 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2365 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2366 | "dev": true, 2367 | "requires": { 2368 | "binary-extensions": "^2.0.0" 2369 | } 2370 | }, 2371 | "is-error": { 2372 | "version": "2.2.2", 2373 | "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", 2374 | "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", 2375 | "dev": true 2376 | }, 2377 | "is-extglob": { 2378 | "version": "2.1.1", 2379 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2380 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2381 | "dev": true 2382 | }, 2383 | "is-fullwidth-code-point": { 2384 | "version": "4.0.0", 2385 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", 2386 | "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", 2387 | "dev": true 2388 | }, 2389 | "is-glob": { 2390 | "version": "4.0.3", 2391 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2392 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2393 | "dev": true, 2394 | "requires": { 2395 | "is-extglob": "^2.1.1" 2396 | } 2397 | }, 2398 | "is-number": { 2399 | "version": "7.0.0", 2400 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2401 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2402 | "dev": true 2403 | }, 2404 | "is-plain-object": { 2405 | "version": "5.0.0", 2406 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 2407 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 2408 | "dev": true 2409 | }, 2410 | "is-promise": { 2411 | "version": "4.0.0", 2412 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", 2413 | "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", 2414 | "dev": true 2415 | }, 2416 | "is-unicode-supported": { 2417 | "version": "1.3.0", 2418 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", 2419 | "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", 2420 | "dev": true 2421 | }, 2422 | "js-string-escape": { 2423 | "version": "1.0.1", 2424 | "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", 2425 | "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", 2426 | "dev": true 2427 | }, 2428 | "json5": { 2429 | "version": "2.2.3", 2430 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2431 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" 2432 | }, 2433 | "livr": { 2434 | "version": "2.7.1", 2435 | "resolved": "https://registry.npmjs.org/livr/-/livr-2.7.1.tgz", 2436 | "integrity": "sha512-QN29+9q5YUyGxu6rD+6rU5b0b9U5KgZUazjZLFUdaL1w+/WWK1Z/i9aH94m/YSwzEAHr7QjPPL7NBoBEdE9c1A==" 2437 | }, 2438 | "livr-extra-rules": { 2439 | "version": "1.3.1", 2440 | "resolved": "https://registry.npmjs.org/livr-extra-rules/-/livr-extra-rules-1.3.1.tgz", 2441 | "integrity": "sha512-jFIq1QxGpUGd6wM79C7MoaoduBpvh+p0YwM60XbpXKpkEuOT5NMa7rMq1wusrs5vEChg5ZQPWKb7ieikesGPiQ==", 2442 | "requires": {} 2443 | }, 2444 | "load-json-file": { 2445 | "version": "7.0.1", 2446 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", 2447 | "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", 2448 | "dev": true 2449 | }, 2450 | "lodash": { 2451 | "version": "4.17.21", 2452 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2453 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2454 | "dev": true 2455 | }, 2456 | "lru-cache": { 2457 | "version": "6.0.0", 2458 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2459 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2460 | "dev": true, 2461 | "requires": { 2462 | "yallist": "^4.0.0" 2463 | } 2464 | }, 2465 | "map-age-cleaner": { 2466 | "version": "0.1.3", 2467 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 2468 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 2469 | "dev": true, 2470 | "requires": { 2471 | "p-defer": "^1.0.0" 2472 | } 2473 | }, 2474 | "matcher": { 2475 | "version": "5.0.0", 2476 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", 2477 | "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", 2478 | "dev": true, 2479 | "requires": { 2480 | "escape-string-regexp": "^5.0.0" 2481 | }, 2482 | "dependencies": { 2483 | "escape-string-regexp": { 2484 | "version": "5.0.0", 2485 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 2486 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 2487 | "dev": true 2488 | } 2489 | } 2490 | }, 2491 | "md5-hex": { 2492 | "version": "3.0.1", 2493 | "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", 2494 | "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", 2495 | "dev": true, 2496 | "requires": { 2497 | "blueimp-md5": "^2.10.0" 2498 | } 2499 | }, 2500 | "mem": { 2501 | "version": "9.0.2", 2502 | "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", 2503 | "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", 2504 | "dev": true, 2505 | "requires": { 2506 | "map-age-cleaner": "^0.1.3", 2507 | "mimic-fn": "^4.0.0" 2508 | } 2509 | }, 2510 | "merge2": { 2511 | "version": "1.4.1", 2512 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2513 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2514 | "dev": true 2515 | }, 2516 | "micromatch": { 2517 | "version": "4.0.5", 2518 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2519 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2520 | "dev": true, 2521 | "requires": { 2522 | "braces": "^3.0.2", 2523 | "picomatch": "^2.3.1" 2524 | } 2525 | }, 2526 | "mimic-fn": { 2527 | "version": "4.0.0", 2528 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 2529 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 2530 | "dev": true 2531 | }, 2532 | "ms": { 2533 | "version": "2.1.3", 2534 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2535 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2536 | "dev": true 2537 | }, 2538 | "nofilter": { 2539 | "version": "3.1.0", 2540 | "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", 2541 | "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", 2542 | "dev": true 2543 | }, 2544 | "normalize-path": { 2545 | "version": "3.0.0", 2546 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2547 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2548 | "dev": true 2549 | }, 2550 | "p-defer": { 2551 | "version": "1.0.0", 2552 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 2553 | "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", 2554 | "dev": true 2555 | }, 2556 | "p-event": { 2557 | "version": "5.0.1", 2558 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", 2559 | "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", 2560 | "dev": true, 2561 | "requires": { 2562 | "p-timeout": "^5.0.2" 2563 | } 2564 | }, 2565 | "p-map": { 2566 | "version": "5.5.0", 2567 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", 2568 | "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", 2569 | "dev": true, 2570 | "requires": { 2571 | "aggregate-error": "^4.0.0" 2572 | } 2573 | }, 2574 | "p-timeout": { 2575 | "version": "5.1.0", 2576 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", 2577 | "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", 2578 | "dev": true 2579 | }, 2580 | "parse-ms": { 2581 | "version": "3.0.0", 2582 | "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", 2583 | "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", 2584 | "dev": true 2585 | }, 2586 | "path-type": { 2587 | "version": "4.0.0", 2588 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2589 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2590 | "dev": true 2591 | }, 2592 | "picomatch": { 2593 | "version": "2.3.1", 2594 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2595 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2596 | "dev": true 2597 | }, 2598 | "pkg-conf": { 2599 | "version": "4.0.0", 2600 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", 2601 | "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", 2602 | "dev": true, 2603 | "requires": { 2604 | "find-up": "^6.0.0", 2605 | "load-json-file": "^7.0.0" 2606 | }, 2607 | "dependencies": { 2608 | "find-up": { 2609 | "version": "6.3.0", 2610 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", 2611 | "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", 2612 | "dev": true, 2613 | "requires": { 2614 | "locate-path": "^7.1.0", 2615 | "path-exists": "^5.0.0" 2616 | } 2617 | }, 2618 | "locate-path": { 2619 | "version": "7.2.0", 2620 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", 2621 | "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", 2622 | "dev": true, 2623 | "requires": { 2624 | "p-locate": "^6.0.0" 2625 | } 2626 | }, 2627 | "p-limit": { 2628 | "version": "4.0.0", 2629 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", 2630 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", 2631 | "dev": true, 2632 | "requires": { 2633 | "yocto-queue": "^1.0.0" 2634 | } 2635 | }, 2636 | "p-locate": { 2637 | "version": "6.0.0", 2638 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", 2639 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", 2640 | "dev": true, 2641 | "requires": { 2642 | "p-limit": "^4.0.0" 2643 | } 2644 | }, 2645 | "path-exists": { 2646 | "version": "5.0.0", 2647 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", 2648 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", 2649 | "dev": true 2650 | }, 2651 | "yocto-queue": { 2652 | "version": "1.0.0", 2653 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 2654 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 2655 | "dev": true 2656 | } 2657 | } 2658 | }, 2659 | "plur": { 2660 | "version": "5.1.0", 2661 | "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", 2662 | "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", 2663 | "dev": true, 2664 | "requires": { 2665 | "irregular-plurals": "^3.3.0" 2666 | } 2667 | }, 2668 | "pretty-ms": { 2669 | "version": "8.0.0", 2670 | "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", 2671 | "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", 2672 | "dev": true, 2673 | "requires": { 2674 | "parse-ms": "^3.0.0" 2675 | } 2676 | }, 2677 | "queue-microtask": { 2678 | "version": "1.2.3", 2679 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2680 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2681 | "dev": true 2682 | }, 2683 | "readdirp": { 2684 | "version": "3.6.0", 2685 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2686 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2687 | "dev": true, 2688 | "requires": { 2689 | "picomatch": "^2.2.1" 2690 | } 2691 | }, 2692 | "require-directory": { 2693 | "version": "2.1.1", 2694 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2695 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 2696 | "dev": true 2697 | }, 2698 | "resolve-cwd": { 2699 | "version": "3.0.0", 2700 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", 2701 | "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", 2702 | "dev": true, 2703 | "requires": { 2704 | "resolve-from": "^5.0.0" 2705 | }, 2706 | "dependencies": { 2707 | "resolve-from": { 2708 | "version": "5.0.0", 2709 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2710 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2711 | "dev": true 2712 | } 2713 | } 2714 | }, 2715 | "reusify": { 2716 | "version": "1.0.4", 2717 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2718 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2719 | "dev": true 2720 | }, 2721 | "run-parallel": { 2722 | "version": "1.2.0", 2723 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2724 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2725 | "dev": true, 2726 | "requires": { 2727 | "queue-microtask": "^1.2.2" 2728 | } 2729 | }, 2730 | "semver": { 2731 | "version": "7.5.3", 2732 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", 2733 | "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", 2734 | "dev": true, 2735 | "requires": { 2736 | "lru-cache": "^6.0.0" 2737 | } 2738 | }, 2739 | "serialize-error": { 2740 | "version": "7.0.1", 2741 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 2742 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 2743 | "dev": true, 2744 | "requires": { 2745 | "type-fest": "^0.13.1" 2746 | } 2747 | }, 2748 | "slash": { 2749 | "version": "4.0.0", 2750 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 2751 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 2752 | "dev": true 2753 | }, 2754 | "slice-ansi": { 2755 | "version": "5.0.0", 2756 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", 2757 | "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", 2758 | "dev": true, 2759 | "requires": { 2760 | "ansi-styles": "^6.0.0", 2761 | "is-fullwidth-code-point": "^4.0.0" 2762 | } 2763 | }, 2764 | "sprintf-js": { 2765 | "version": "1.0.3", 2766 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2767 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 2768 | "dev": true 2769 | }, 2770 | "stack-utils": { 2771 | "version": "2.0.6", 2772 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", 2773 | "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", 2774 | "dev": true, 2775 | "requires": { 2776 | "escape-string-regexp": "^2.0.0" 2777 | }, 2778 | "dependencies": { 2779 | "escape-string-regexp": { 2780 | "version": "2.0.0", 2781 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 2782 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 2783 | "dev": true 2784 | } 2785 | } 2786 | }, 2787 | "string-width": { 2788 | "version": "5.1.2", 2789 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2790 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2791 | "dev": true, 2792 | "requires": { 2793 | "eastasianwidth": "^0.2.0", 2794 | "emoji-regex": "^9.2.2", 2795 | "strip-ansi": "^7.0.1" 2796 | } 2797 | }, 2798 | "strip-ansi": { 2799 | "version": "7.1.0", 2800 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2801 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2802 | "dev": true, 2803 | "requires": { 2804 | "ansi-regex": "^6.0.1" 2805 | } 2806 | }, 2807 | "supertap": { 2808 | "version": "3.0.1", 2809 | "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", 2810 | "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", 2811 | "dev": true, 2812 | "requires": { 2813 | "indent-string": "^5.0.0", 2814 | "js-yaml": "^3.14.1", 2815 | "serialize-error": "^7.0.1", 2816 | "strip-ansi": "^7.0.1" 2817 | }, 2818 | "dependencies": { 2819 | "argparse": { 2820 | "version": "1.0.10", 2821 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 2822 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 2823 | "dev": true, 2824 | "requires": { 2825 | "sprintf-js": "~1.0.2" 2826 | } 2827 | }, 2828 | "js-yaml": { 2829 | "version": "3.14.1", 2830 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 2831 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 2832 | "dev": true, 2833 | "requires": { 2834 | "argparse": "^1.0.7", 2835 | "esprima": "^4.0.0" 2836 | } 2837 | } 2838 | } 2839 | }, 2840 | "temp-dir": { 2841 | "version": "3.0.0", 2842 | "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", 2843 | "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", 2844 | "dev": true 2845 | }, 2846 | "time-zone": { 2847 | "version": "1.0.0", 2848 | "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", 2849 | "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", 2850 | "dev": true 2851 | }, 2852 | "to-regex-range": { 2853 | "version": "5.0.1", 2854 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2855 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2856 | "dev": true, 2857 | "requires": { 2858 | "is-number": "^7.0.0" 2859 | } 2860 | }, 2861 | "type-fest": { 2862 | "version": "0.13.1", 2863 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 2864 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 2865 | "dev": true 2866 | }, 2867 | "well-known-symbols": { 2868 | "version": "2.0.0", 2869 | "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", 2870 | "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", 2871 | "dev": true 2872 | }, 2873 | "wrap-ansi": { 2874 | "version": "7.0.0", 2875 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2876 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2877 | "dev": true, 2878 | "requires": { 2879 | "ansi-styles": "^4.0.0", 2880 | "string-width": "^4.1.0", 2881 | "strip-ansi": "^6.0.0" 2882 | }, 2883 | "dependencies": { 2884 | "ansi-regex": { 2885 | "version": "5.0.1", 2886 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2887 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2888 | "dev": true 2889 | }, 2890 | "ansi-styles": { 2891 | "version": "4.3.0", 2892 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2893 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2894 | "dev": true, 2895 | "requires": { 2896 | "color-convert": "^2.0.1" 2897 | } 2898 | }, 2899 | "color-convert": { 2900 | "version": "2.0.1", 2901 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2902 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2903 | "dev": true, 2904 | "requires": { 2905 | "color-name": "~1.1.4" 2906 | } 2907 | }, 2908 | "color-name": { 2909 | "version": "1.1.4", 2910 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2911 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2912 | "dev": true 2913 | }, 2914 | "emoji-regex": { 2915 | "version": "8.0.0", 2916 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2917 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2918 | "dev": true 2919 | }, 2920 | "is-fullwidth-code-point": { 2921 | "version": "3.0.0", 2922 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2923 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2924 | "dev": true 2925 | }, 2926 | "string-width": { 2927 | "version": "4.2.3", 2928 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2929 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2930 | "dev": true, 2931 | "requires": { 2932 | "emoji-regex": "^8.0.0", 2933 | "is-fullwidth-code-point": "^3.0.0", 2934 | "strip-ansi": "^6.0.1" 2935 | } 2936 | }, 2937 | "strip-ansi": { 2938 | "version": "6.0.1", 2939 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2940 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2941 | "dev": true, 2942 | "requires": { 2943 | "ansi-regex": "^5.0.1" 2944 | } 2945 | } 2946 | } 2947 | }, 2948 | "write-file-atomic": { 2949 | "version": "5.0.1", 2950 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", 2951 | "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", 2952 | "dev": true, 2953 | "requires": { 2954 | "imurmurhash": "^0.1.4", 2955 | "signal-exit": "^4.0.1" 2956 | }, 2957 | "dependencies": { 2958 | "signal-exit": { 2959 | "version": "4.0.2", 2960 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", 2961 | "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", 2962 | "dev": true 2963 | } 2964 | } 2965 | }, 2966 | "y18n": { 2967 | "version": "5.0.8", 2968 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2969 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2970 | "dev": true 2971 | }, 2972 | "yallist": { 2973 | "version": "4.0.0", 2974 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2975 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2976 | "dev": true 2977 | }, 2978 | "yargs": { 2979 | "version": "17.7.2", 2980 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 2981 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 2982 | "dev": true, 2983 | "requires": { 2984 | "cliui": "^8.0.1", 2985 | "escalade": "^3.1.1", 2986 | "get-caller-file": "^2.0.5", 2987 | "require-directory": "^2.1.1", 2988 | "string-width": "^4.2.3", 2989 | "y18n": "^5.0.5", 2990 | "yargs-parser": "^21.1.1" 2991 | }, 2992 | "dependencies": { 2993 | "ansi-regex": { 2994 | "version": "5.0.1", 2995 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2996 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2997 | "dev": true 2998 | }, 2999 | "emoji-regex": { 3000 | "version": "8.0.0", 3001 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3002 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3003 | "dev": true 3004 | }, 3005 | "is-fullwidth-code-point": { 3006 | "version": "3.0.0", 3007 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3008 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 3009 | "dev": true 3010 | }, 3011 | "string-width": { 3012 | "version": "4.2.3", 3013 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3014 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3015 | "dev": true, 3016 | "requires": { 3017 | "emoji-regex": "^8.0.0", 3018 | "is-fullwidth-code-point": "^3.0.0", 3019 | "strip-ansi": "^6.0.1" 3020 | } 3021 | }, 3022 | "strip-ansi": { 3023 | "version": "6.0.1", 3024 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3025 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3026 | "dev": true, 3027 | "requires": { 3028 | "ansi-regex": "^5.0.1" 3029 | } 3030 | }, 3031 | "yargs-parser": { 3032 | "version": "21.1.1", 3033 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 3034 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 3035 | "dev": true 3036 | } 3037 | } 3038 | } 3039 | } 3040 | } 3041 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "confme", 3 | "version": "1.2.0", 4 | "description": "Opinionated config library that allows you to have complex config and behaves according to Twelve Factor App rules", 5 | "main": "src/confme.js", 6 | "directories": { 7 | "test": "tests" 8 | }, 9 | "scripts": { 10 | "test": "ava" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/koorchik/node-confme.git" 15 | }, 16 | "keywords": [ 17 | "confme", 18 | "config", 19 | "settings", 20 | "variables", 21 | ".env", 22 | "env", 23 | "environment", 24 | "json", 25 | "livr", 26 | "config validation", 27 | "twelve factor app", 28 | "12 factor app", 29 | "docker", 30 | "lambda" 31 | ], 32 | "author": "koorchik", 33 | "license": "MIT", 34 | "bugs": { 35 | "url": "https://github.com/koorchik/node-confme/issues" 36 | }, 37 | "homepage": "https://github.com/koorchik/node-confme#readme", 38 | "ava": { 39 | "files": [ 40 | "tests/*.js" 41 | ] 42 | }, 43 | "dependencies": { 44 | "dotenv-defaults": "^5.0.1", 45 | "json5": "^2.2.0", 46 | "livr": "^2.7.1", 47 | "livr-extra-rules": "^1.3.1" 48 | }, 49 | "devDependencies": { 50 | "ava": "^5.3.1" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/confme.js: -------------------------------------------------------------------------------- 1 | require('dotenv-defaults').config(); 2 | 3 | const fs = require('fs'); 4 | // eslint-disable-next-line more/no-numeric-endings-for-variables 5 | const JSON5 = require('json5'); 6 | 7 | function confme(configPath, livrSchemaPath) { 8 | // eslint-disable-next-line no-sync 9 | const template = fs.readFileSync(configPath).toString(); 10 | const configStr = replace(template, process.env); 11 | 12 | let config = {}; 13 | 14 | try { 15 | config = JSON5.parse(configStr); 16 | } catch (error) { 17 | console.error('CANNOT PARSE JSON5:', configStr); 18 | throw error; 19 | } 20 | 21 | if (livrSchemaPath) { 22 | config = validateConfig(config, livrSchemaPath); 23 | } 24 | 25 | return config; 26 | } 27 | 28 | function validateConfig(config, livrSchemaPath) { 29 | const LIVR = require('livr'); 30 | const livrExtraRules = require('livr-extra-rules'); 31 | 32 | // eslint-disable-next-line no-sync 33 | const livrRules = JSON5.parse(fs.readFileSync(livrSchemaPath).toString()); 34 | const validator = new LIVR.Validator(livrRules, true); 35 | 36 | validator.registerRules(livrExtraRules); 37 | 38 | const validConfig = validator.validate(config); 39 | 40 | if (!validConfig) { 41 | const error = { 42 | FAILED_CONFIG : config, 43 | ERRORS : validator.getErrors() 44 | }; 45 | 46 | // eslint-disable-next-line no-magic-numbers 47 | throw new Error(JSON.stringify(error, null, 2)); 48 | } 49 | 50 | return validConfig; 51 | } 52 | 53 | function replace(template, vars) { 54 | return template.replace(/\{\{\s*(.+?)\s*\}\}/g, (match, p1) => { 55 | if (vars.hasOwnProperty(p1)) { 56 | return vars[p1]; 57 | } 58 | 59 | throw new Error(`Variable "${p1}" not set!`); 60 | }); 61 | } 62 | 63 | module.exports = confme; 64 | -------------------------------------------------------------------------------- /tests/badconfig/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "VALUE}}" 3 | 4 | -------------------------------------------------------------------------------- /tests/error/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "{{OTHERVALUE}}" 3 | } 4 | -------------------------------------------------------------------------------- /tests/inherited/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "{{VALUE}}" 3 | } 4 | -------------------------------------------------------------------------------- /tests/inherited/config-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": ["required", "positive_integer"] 3 | } 4 | -------------------------------------------------------------------------------- /tests/simple/basic.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "value" 3 | } 4 | -------------------------------------------------------------------------------- /tests/test_suite.js: -------------------------------------------------------------------------------- 1 | const test = require("ava"); 2 | const confme = require("../src/confme"); 3 | 4 | test("test default config", (t) => { 5 | const config = confme(`${__dirname}/simple/basic.json`); 6 | 7 | t.is(config.key, "value"); 8 | }); 9 | 10 | test("test environment variable interpolation", (t) => { 11 | const randomPositive = 1286124; 12 | 13 | process.env.VALUE = randomPositive; 14 | const config = confme( 15 | `${__dirname}/inherited/basic.json`, 16 | `${__dirname}/inherited/config-schema.json` 17 | ); 18 | 19 | t.is(config.key, randomPositive); 20 | }); 21 | 22 | test("test schema fail", (t) => { 23 | const randomNegative = -1263; 24 | 25 | process.env.VALUE = randomNegative; 26 | try { 27 | confme( 28 | `${__dirname}/inherited/basic.json`, 29 | `${__dirname}/inherited/config-schema.json` 30 | ); 31 | 32 | t.fail("LIVR validation should have failed"); 33 | } catch (ex) { 34 | t.truthy(ex.message.match(/NOT_POSITIVE_INTEGER/)); 35 | t.pass(); 36 | } 37 | }); 38 | 39 | test("bad configuration", (t) => { 40 | try { 41 | confme(`${__dirname}/badconfig/basic.json`); 42 | 43 | t.fail("should have been unable to parse bad configuration file"); 44 | } catch (ex) { 45 | t.truthy(ex.message.match(/invalid end of input/)); 46 | t.pass(); 47 | } 48 | }); 49 | 50 | test("test missing variable", (t) => { 51 | try { 52 | confme(`${__dirname}/error/basic.json`); 53 | 54 | t.fail("should have received an exception for missing env var"); 55 | } catch (ex) { 56 | t.is(ex.message, 'Variable "OTHERVALUE" not set!'); 57 | t.pass(); 58 | } 59 | }); 60 | --------------------------------------------------------------------------------