├── .editorconfig
├── .eslintrc.json
├── .gitignore
├── LICENSE
├── README.md
├── chalk.js
├── cli.js
├── package-lock.json
├── package.json
└── stats.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | charset = utf-8
7 | trim_trailing_whitespace = true
8 | insert_final_newline = true
9 | end_of_line = lf
10 | # editorconfig-tools is unable to ignore longs strings or urls
11 | max_line_length = off
12 |
13 | [CHANGELOG.md]
14 | indent_size = false
15 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true,
4 | "node": true
5 | },
6 | "extends": [
7 | "airbnb-base",
8 | "plugin:prettier/recommended"
9 | ],
10 | "globals": {
11 | "Atomics": "readonly",
12 | "SharedArrayBuffer": "readonly"
13 | },
14 | "parserOptions": {
15 | "ecmaVersion": 11,
16 | "sourceType": "module"
17 | },
18 | "rules": {
19 | "prettier/prettier": [
20 | "error",
21 | {
22 | "singleQuote": true
23 | }
24 | ],
25 | "no-console": "off",
26 | "no-await-in-loop": "off"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Tomás Arias
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 |
2 | speed-cloudflare-cli
3 |
4 |
5 | Measure the speed and consistency of your internet connection using speed.cloudflare.com
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | # How to use
23 | ```bash
24 | npx speed-cloudflare-cli
25 | ```
26 |
--------------------------------------------------------------------------------
/chalk.js:
--------------------------------------------------------------------------------
1 | exports.magenta = (...args) => `\u001b[35m${args.join(' ')}\u001b[0m`;
2 | exports.bold = (...args) => `\u001b[1m${args.join(' ')}\u001b[0m`;
3 | exports.yellow = (...args) => `\u001b[33m${args.join(' ')}\u001b[0m`;
4 | exports.green = (...args) => `\u001b[32m${args.join(' ')}\u001b[0m`;
5 | exports.blue = (...args) => `\u001b[34m${args.join(' ')}\u001b[0m`;
6 |
--------------------------------------------------------------------------------
/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const { performance } = require("perf_hooks");
4 | const https = require("https");
5 | const { magenta, bold, yellow, green, blue } = require("./chalk.js");
6 | const stats = require("./stats.js");
7 |
8 | async function get(hostname, path) {
9 | return new Promise((resolve, reject) => {
10 | const req = https.request(
11 | {
12 | hostname,
13 | path,
14 | method: "GET",
15 | },
16 | (res) => {
17 | const body = [];
18 | res.on("data", (chunk) => {
19 | body.push(chunk);
20 | });
21 | res.on("end", () => {
22 | try {
23 | resolve(Buffer.concat(body).toString());
24 | } catch (e) {
25 | reject(e);
26 | }
27 | });
28 | req.on("error", (err) => {
29 | reject(err);
30 | });
31 | },
32 | );
33 |
34 | req.end();
35 | });
36 | }
37 |
38 | async function fetchServerLocationData() {
39 | const res = JSON.parse(await get("speed.cloudflare.com", "/locations"));
40 |
41 | return res.reduce((data, { iata, city }) => {
42 | // Bypass prettier "no-assign-param" rules
43 | const data1 = data;
44 |
45 | data1[iata] = city;
46 | return data1;
47 | }, {});
48 | }
49 |
50 | function fetchCfCdnCgiTrace() {
51 | const parseCfCdnCgiTrace = (text) =>
52 | text
53 | .split("\n")
54 | .map((i) => {
55 | const j = i.split("=");
56 |
57 | return [j[0], j[1]];
58 | })
59 | .reduce((data, [k, v]) => {
60 | if (v === undefined) return data;
61 |
62 | // Bypass prettier
63 | // "no-assign-param" rules
64 | const data1 = data;
65 | // Object.fromEntries is only
66 | // supported by Node.js 12 or newer
67 | data1[k] = v;
68 |
69 | return data1;
70 | }, {});
71 |
72 | return get("speed.cloudflare.com", "/cdn-cgi/trace").then(parseCfCdnCgiTrace);
73 | }
74 |
75 | function request(options, data = "") {
76 | let started;
77 | let dnsLookup;
78 | let tcpHandshake;
79 | let sslHandshake;
80 | let ttfb;
81 | let ended;
82 |
83 | options.agent = new https.Agent(options);
84 |
85 | return new Promise((resolve, reject) => {
86 | started = performance.now();
87 | const req = https.request(options, (res) => {
88 | res.once("readable", () => {
89 | ttfb = performance.now();
90 | });
91 | res.on("data", () => {});
92 | res.on("end", () => {
93 | ended = performance.now();
94 | resolve([started, dnsLookup, tcpHandshake, sslHandshake, ttfb, ended, parseFloat(res.headers["server-timing"].slice(22))]);
95 | });
96 | });
97 |
98 | req.on("socket", (socket) => {
99 | socket.on("lookup", () => {
100 | dnsLookup = performance.now();
101 | });
102 | socket.on("connect", () => {
103 | tcpHandshake = performance.now();
104 | });
105 | socket.on("secureConnect", () => {
106 | sslHandshake = performance.now();
107 | });
108 | });
109 |
110 | req.on("error", (error) => {
111 | reject(error);
112 | });
113 |
114 | req.write(data);
115 | req.end();
116 | });
117 | }
118 |
119 | function download(bytes) {
120 | const options = {
121 | hostname: "speed.cloudflare.com",
122 | path: `/__down?bytes=${bytes}`,
123 | method: "GET",
124 | };
125 |
126 | return request(options);
127 | }
128 |
129 | function upload(bytes) {
130 | const data = "0".repeat(bytes);
131 | const options = {
132 | hostname: "speed.cloudflare.com",
133 | path: "/__up",
134 | method: "POST",
135 | headers: {
136 | "Content-Length": Buffer.byteLength(data),
137 | },
138 | };
139 |
140 | return request(options, data);
141 | }
142 |
143 | function measureSpeed(bytes, duration) {
144 | return (bytes * 8) / (duration / 1000) / 1e6;
145 | }
146 |
147 | async function measureLatency() {
148 | const measurements = [];
149 |
150 | for (let i = 0; i < 20; i += 1) {
151 | await download(1000).then(
152 | (response) => {
153 | // TTFB - Server processing time
154 | measurements.push(response[4] - response[0] - response[6]);
155 | },
156 | (error) => {
157 | console.log(`Error: ${error}`);
158 | },
159 | );
160 | }
161 |
162 | return [Math.min(...measurements), Math.max(...measurements), stats.average(measurements), stats.median(measurements), stats.jitter(measurements)];
163 | }
164 |
165 | async function measureDownload(bytes, iterations) {
166 | const measurements = [];
167 |
168 | for (let i = 0; i < iterations; i += 1) {
169 | await download(bytes).then(
170 | (response) => {
171 | const transferTime = response[5] - response[4];
172 | measurements.push(measureSpeed(bytes, transferTime));
173 | },
174 | (error) => {
175 | console.log(`Error: ${error}`);
176 | },
177 | );
178 | }
179 |
180 | return measurements;
181 | }
182 |
183 | async function measureUpload(bytes, iterations) {
184 | const measurements = [];
185 |
186 | for (let i = 0; i < iterations; i += 1) {
187 | await upload(bytes).then(
188 | (response) => {
189 | const transferTime = response[6];
190 | measurements.push(measureSpeed(bytes, transferTime));
191 | },
192 | (error) => {
193 | console.log(`Error: ${error}`);
194 | },
195 | );
196 | }
197 |
198 | return measurements;
199 | }
200 |
201 | function logInfo(text, data) {
202 | console.log(bold(" ".repeat(15 - text.length), `${text}:`, blue(data)));
203 | }
204 |
205 | function logLatency(data) {
206 | console.log(bold(" Latency:", magenta(`${data[3].toFixed(2)} ms`)));
207 | console.log(bold(" Jitter:", magenta(`${data[4].toFixed(2)} ms`)));
208 | }
209 |
210 | function logSpeedTestResult(size, test) {
211 | const speed = stats.median(test).toFixed(2);
212 | console.log(bold(" ".repeat(9 - size.length), size, "speed:", yellow(`${speed} Mbps`)));
213 | }
214 |
215 | function logDownloadSpeed(tests) {
216 | console.log(bold(" Download speed:", green(stats.quartile(tests, 0.9).toFixed(2), "Mbps")));
217 | }
218 |
219 | function logUploadSpeed(tests) {
220 | console.log(bold(" Upload speed:", green(stats.quartile(tests, 0.9).toFixed(2), "Mbps")));
221 | }
222 |
223 | async function speedTest() {
224 | const [ping, serverLocationData, { ip, loc, colo }] = await Promise.all([measureLatency(), fetchServerLocationData(), fetchCfCdnCgiTrace()]);
225 |
226 | const city = serverLocationData[colo];
227 | logInfo("Server location", `${city} (${colo})`);
228 | logInfo("Your IP", `${ip} (${loc})`);
229 |
230 | logLatency(ping);
231 |
232 | const testDown1 = await measureDownload(101000, 10);
233 | logSpeedTestResult("100kB", testDown1);
234 |
235 | const testDown2 = await measureDownload(1001000, 8);
236 | logSpeedTestResult("1MB", testDown2);
237 |
238 | const testDown3 = await measureDownload(10001000, 6);
239 | logSpeedTestResult("10MB", testDown3);
240 |
241 | const testDown4 = await measureDownload(25001000, 4);
242 | logSpeedTestResult("25MB", testDown4);
243 |
244 | const testDown5 = await measureDownload(100001000, 1);
245 | logSpeedTestResult("100MB", testDown5);
246 |
247 | const downloadTests = [...testDown1, ...testDown2, ...testDown3, ...testDown4, ...testDown5];
248 | logDownloadSpeed(downloadTests);
249 |
250 | const testUp1 = await measureUpload(11000, 10);
251 | const testUp2 = await measureUpload(101000, 10);
252 | const testUp3 = await measureUpload(1001000, 8);
253 | const uploadTests = [...testUp1, ...testUp2, ...testUp3];
254 | logUploadSpeed(uploadTests);
255 | }
256 |
257 | speedTest();
258 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "speed-cloudflare-cli",
3 | "version": "2.0.3",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "speed-cloudflare-cli",
9 | "version": "2.0.3",
10 | "license": "MIT",
11 | "bin": {
12 | "speed-cloudflare-cli": "cli.js"
13 | },
14 | "devDependencies": {
15 | "eslint": "^6.8.0",
16 | "eslint-config-airbnb-base": "^14.1.0",
17 | "eslint-config-prettier": "^6.11.0",
18 | "eslint-plugin-import": "^2.20.2",
19 | "eslint-plugin-prettier": "^3.1.3",
20 | "prettier": "^2.0.5"
21 | }
22 | },
23 | "node_modules/@babel/code-frame": {
24 | "version": "7.23.5",
25 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
26 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
27 | "dev": true,
28 | "dependencies": {
29 | "@babel/highlight": "^7.23.4",
30 | "chalk": "^2.4.2"
31 | },
32 | "engines": {
33 | "node": ">=6.9.0"
34 | }
35 | },
36 | "node_modules/@babel/helper-validator-identifier": {
37 | "version": "7.22.20",
38 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
39 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
40 | "dev": true,
41 | "engines": {
42 | "node": ">=6.9.0"
43 | }
44 | },
45 | "node_modules/@babel/highlight": {
46 | "version": "7.23.4",
47 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
48 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
49 | "dev": true,
50 | "dependencies": {
51 | "@babel/helper-validator-identifier": "^7.22.20",
52 | "chalk": "^2.4.2",
53 | "js-tokens": "^4.0.0"
54 | },
55 | "engines": {
56 | "node": ">=6.9.0"
57 | }
58 | },
59 | "node_modules/@types/json5": {
60 | "version": "0.0.29",
61 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
62 | "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
63 | "dev": true
64 | },
65 | "node_modules/acorn": {
66 | "version": "7.4.1",
67 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
68 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
69 | "dev": true,
70 | "bin": {
71 | "acorn": "bin/acorn"
72 | },
73 | "engines": {
74 | "node": ">=0.4.0"
75 | }
76 | },
77 | "node_modules/acorn-jsx": {
78 | "version": "5.3.2",
79 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
80 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
81 | "dev": true,
82 | "peerDependencies": {
83 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
84 | }
85 | },
86 | "node_modules/ajv": {
87 | "version": "6.12.6",
88 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
89 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
90 | "dev": true,
91 | "dependencies": {
92 | "fast-deep-equal": "^3.1.1",
93 | "fast-json-stable-stringify": "^2.0.0",
94 | "json-schema-traverse": "^0.4.1",
95 | "uri-js": "^4.2.2"
96 | },
97 | "funding": {
98 | "type": "github",
99 | "url": "https://github.com/sponsors/epoberezkin"
100 | }
101 | },
102 | "node_modules/ansi-escapes": {
103 | "version": "4.3.2",
104 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
105 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
106 | "dev": true,
107 | "dependencies": {
108 | "type-fest": "^0.21.3"
109 | },
110 | "engines": {
111 | "node": ">=8"
112 | },
113 | "funding": {
114 | "url": "https://github.com/sponsors/sindresorhus"
115 | }
116 | },
117 | "node_modules/ansi-escapes/node_modules/type-fest": {
118 | "version": "0.21.3",
119 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
120 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
121 | "dev": true,
122 | "engines": {
123 | "node": ">=10"
124 | },
125 | "funding": {
126 | "url": "https://github.com/sponsors/sindresorhus"
127 | }
128 | },
129 | "node_modules/ansi-regex": {
130 | "version": "4.1.1",
131 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
132 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
133 | "dev": true,
134 | "engines": {
135 | "node": ">=6"
136 | }
137 | },
138 | "node_modules/ansi-styles": {
139 | "version": "3.2.1",
140 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
141 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
142 | "dev": true,
143 | "dependencies": {
144 | "color-convert": "^1.9.0"
145 | },
146 | "engines": {
147 | "node": ">=4"
148 | }
149 | },
150 | "node_modules/argparse": {
151 | "version": "1.0.10",
152 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
153 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
154 | "dev": true,
155 | "dependencies": {
156 | "sprintf-js": "~1.0.2"
157 | }
158 | },
159 | "node_modules/array-buffer-byte-length": {
160 | "version": "1.0.1",
161 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
162 | "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
163 | "dev": true,
164 | "dependencies": {
165 | "call-bind": "^1.0.5",
166 | "is-array-buffer": "^3.0.4"
167 | },
168 | "engines": {
169 | "node": ">= 0.4"
170 | },
171 | "funding": {
172 | "url": "https://github.com/sponsors/ljharb"
173 | }
174 | },
175 | "node_modules/array-includes": {
176 | "version": "3.1.7",
177 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz",
178 | "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
179 | "dev": true,
180 | "dependencies": {
181 | "call-bind": "^1.0.2",
182 | "define-properties": "^1.2.0",
183 | "es-abstract": "^1.22.1",
184 | "get-intrinsic": "^1.2.1",
185 | "is-string": "^1.0.7"
186 | },
187 | "engines": {
188 | "node": ">= 0.4"
189 | },
190 | "funding": {
191 | "url": "https://github.com/sponsors/ljharb"
192 | }
193 | },
194 | "node_modules/array.prototype.filter": {
195 | "version": "1.0.3",
196 | "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
197 | "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
198 | "dev": true,
199 | "dependencies": {
200 | "call-bind": "^1.0.2",
201 | "define-properties": "^1.2.0",
202 | "es-abstract": "^1.22.1",
203 | "es-array-method-boxes-properly": "^1.0.0",
204 | "is-string": "^1.0.7"
205 | },
206 | "engines": {
207 | "node": ">= 0.4"
208 | },
209 | "funding": {
210 | "url": "https://github.com/sponsors/ljharb"
211 | }
212 | },
213 | "node_modules/array.prototype.findlastindex": {
214 | "version": "1.2.4",
215 | "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
216 | "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
217 | "dev": true,
218 | "dependencies": {
219 | "call-bind": "^1.0.5",
220 | "define-properties": "^1.2.1",
221 | "es-abstract": "^1.22.3",
222 | "es-errors": "^1.3.0",
223 | "es-shim-unscopables": "^1.0.2"
224 | },
225 | "engines": {
226 | "node": ">= 0.4"
227 | },
228 | "funding": {
229 | "url": "https://github.com/sponsors/ljharb"
230 | }
231 | },
232 | "node_modules/array.prototype.flat": {
233 | "version": "1.3.2",
234 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
235 | "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
236 | "dev": true,
237 | "dependencies": {
238 | "call-bind": "^1.0.2",
239 | "define-properties": "^1.2.0",
240 | "es-abstract": "^1.22.1",
241 | "es-shim-unscopables": "^1.0.0"
242 | },
243 | "engines": {
244 | "node": ">= 0.4"
245 | },
246 | "funding": {
247 | "url": "https://github.com/sponsors/ljharb"
248 | }
249 | },
250 | "node_modules/array.prototype.flatmap": {
251 | "version": "1.3.2",
252 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
253 | "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
254 | "dev": true,
255 | "dependencies": {
256 | "call-bind": "^1.0.2",
257 | "define-properties": "^1.2.0",
258 | "es-abstract": "^1.22.1",
259 | "es-shim-unscopables": "^1.0.0"
260 | },
261 | "engines": {
262 | "node": ">= 0.4"
263 | },
264 | "funding": {
265 | "url": "https://github.com/sponsors/ljharb"
266 | }
267 | },
268 | "node_modules/arraybuffer.prototype.slice": {
269 | "version": "1.0.3",
270 | "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
271 | "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
272 | "dev": true,
273 | "dependencies": {
274 | "array-buffer-byte-length": "^1.0.1",
275 | "call-bind": "^1.0.5",
276 | "define-properties": "^1.2.1",
277 | "es-abstract": "^1.22.3",
278 | "es-errors": "^1.2.1",
279 | "get-intrinsic": "^1.2.3",
280 | "is-array-buffer": "^3.0.4",
281 | "is-shared-array-buffer": "^1.0.2"
282 | },
283 | "engines": {
284 | "node": ">= 0.4"
285 | },
286 | "funding": {
287 | "url": "https://github.com/sponsors/ljharb"
288 | }
289 | },
290 | "node_modules/astral-regex": {
291 | "version": "1.0.0",
292 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
293 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
294 | "dev": true,
295 | "engines": {
296 | "node": ">=4"
297 | }
298 | },
299 | "node_modules/available-typed-arrays": {
300 | "version": "1.0.6",
301 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
302 | "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
303 | "dev": true,
304 | "engines": {
305 | "node": ">= 0.4"
306 | },
307 | "funding": {
308 | "url": "https://github.com/sponsors/ljharb"
309 | }
310 | },
311 | "node_modules/balanced-match": {
312 | "version": "1.0.2",
313 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
314 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
315 | "dev": true
316 | },
317 | "node_modules/brace-expansion": {
318 | "version": "1.1.11",
319 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
320 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
321 | "dev": true,
322 | "dependencies": {
323 | "balanced-match": "^1.0.0",
324 | "concat-map": "0.0.1"
325 | }
326 | },
327 | "node_modules/call-bind": {
328 | "version": "1.0.7",
329 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
330 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
331 | "dev": true,
332 | "dependencies": {
333 | "es-define-property": "^1.0.0",
334 | "es-errors": "^1.3.0",
335 | "function-bind": "^1.1.2",
336 | "get-intrinsic": "^1.2.4",
337 | "set-function-length": "^1.2.1"
338 | },
339 | "engines": {
340 | "node": ">= 0.4"
341 | },
342 | "funding": {
343 | "url": "https://github.com/sponsors/ljharb"
344 | }
345 | },
346 | "node_modules/callsites": {
347 | "version": "3.1.0",
348 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
349 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
350 | "dev": true,
351 | "engines": {
352 | "node": ">=6"
353 | }
354 | },
355 | "node_modules/chalk": {
356 | "version": "2.4.2",
357 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
358 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
359 | "dev": true,
360 | "dependencies": {
361 | "ansi-styles": "^3.2.1",
362 | "escape-string-regexp": "^1.0.5",
363 | "supports-color": "^5.3.0"
364 | },
365 | "engines": {
366 | "node": ">=4"
367 | }
368 | },
369 | "node_modules/chardet": {
370 | "version": "0.7.0",
371 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
372 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
373 | "dev": true
374 | },
375 | "node_modules/cli-cursor": {
376 | "version": "3.1.0",
377 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
378 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
379 | "dev": true,
380 | "dependencies": {
381 | "restore-cursor": "^3.1.0"
382 | },
383 | "engines": {
384 | "node": ">=8"
385 | }
386 | },
387 | "node_modules/cli-width": {
388 | "version": "3.0.0",
389 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
390 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
391 | "dev": true,
392 | "engines": {
393 | "node": ">= 10"
394 | }
395 | },
396 | "node_modules/color-convert": {
397 | "version": "1.9.3",
398 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
399 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
400 | "dev": true,
401 | "dependencies": {
402 | "color-name": "1.1.3"
403 | }
404 | },
405 | "node_modules/color-name": {
406 | "version": "1.1.3",
407 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
408 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
409 | "dev": true
410 | },
411 | "node_modules/concat-map": {
412 | "version": "0.0.1",
413 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
414 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
415 | "dev": true
416 | },
417 | "node_modules/confusing-browser-globals": {
418 | "version": "1.0.11",
419 | "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
420 | "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
421 | "dev": true
422 | },
423 | "node_modules/cross-spawn": {
424 | "version": "6.0.5",
425 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
426 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
427 | "dev": true,
428 | "dependencies": {
429 | "nice-try": "^1.0.4",
430 | "path-key": "^2.0.1",
431 | "semver": "^5.5.0",
432 | "shebang-command": "^1.2.0",
433 | "which": "^1.2.9"
434 | },
435 | "engines": {
436 | "node": ">=4.8"
437 | }
438 | },
439 | "node_modules/cross-spawn/node_modules/semver": {
440 | "version": "5.7.2",
441 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
442 | "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
443 | "dev": true,
444 | "bin": {
445 | "semver": "bin/semver"
446 | }
447 | },
448 | "node_modules/debug": {
449 | "version": "4.3.4",
450 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
451 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
452 | "dev": true,
453 | "dependencies": {
454 | "ms": "2.1.2"
455 | },
456 | "engines": {
457 | "node": ">=6.0"
458 | },
459 | "peerDependenciesMeta": {
460 | "supports-color": {
461 | "optional": true
462 | }
463 | }
464 | },
465 | "node_modules/deep-is": {
466 | "version": "0.1.4",
467 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
468 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
469 | "dev": true
470 | },
471 | "node_modules/define-data-property": {
472 | "version": "1.1.4",
473 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
474 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
475 | "dev": true,
476 | "dependencies": {
477 | "es-define-property": "^1.0.0",
478 | "es-errors": "^1.3.0",
479 | "gopd": "^1.0.1"
480 | },
481 | "engines": {
482 | "node": ">= 0.4"
483 | },
484 | "funding": {
485 | "url": "https://github.com/sponsors/ljharb"
486 | }
487 | },
488 | "node_modules/define-properties": {
489 | "version": "1.2.1",
490 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
491 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
492 | "dev": true,
493 | "dependencies": {
494 | "define-data-property": "^1.0.1",
495 | "has-property-descriptors": "^1.0.0",
496 | "object-keys": "^1.1.1"
497 | },
498 | "engines": {
499 | "node": ">= 0.4"
500 | },
501 | "funding": {
502 | "url": "https://github.com/sponsors/ljharb"
503 | }
504 | },
505 | "node_modules/doctrine": {
506 | "version": "3.0.0",
507 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
508 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
509 | "dev": true,
510 | "dependencies": {
511 | "esutils": "^2.0.2"
512 | },
513 | "engines": {
514 | "node": ">=6.0.0"
515 | }
516 | },
517 | "node_modules/emoji-regex": {
518 | "version": "8.0.0",
519 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
520 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
521 | "dev": true
522 | },
523 | "node_modules/es-abstract": {
524 | "version": "1.22.4",
525 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz",
526 | "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==",
527 | "dev": true,
528 | "dependencies": {
529 | "array-buffer-byte-length": "^1.0.1",
530 | "arraybuffer.prototype.slice": "^1.0.3",
531 | "available-typed-arrays": "^1.0.6",
532 | "call-bind": "^1.0.7",
533 | "es-define-property": "^1.0.0",
534 | "es-errors": "^1.3.0",
535 | "es-set-tostringtag": "^2.0.2",
536 | "es-to-primitive": "^1.2.1",
537 | "function.prototype.name": "^1.1.6",
538 | "get-intrinsic": "^1.2.4",
539 | "get-symbol-description": "^1.0.2",
540 | "globalthis": "^1.0.3",
541 | "gopd": "^1.0.1",
542 | "has-property-descriptors": "^1.0.2",
543 | "has-proto": "^1.0.1",
544 | "has-symbols": "^1.0.3",
545 | "hasown": "^2.0.1",
546 | "internal-slot": "^1.0.7",
547 | "is-array-buffer": "^3.0.4",
548 | "is-callable": "^1.2.7",
549 | "is-negative-zero": "^2.0.2",
550 | "is-regex": "^1.1.4",
551 | "is-shared-array-buffer": "^1.0.2",
552 | "is-string": "^1.0.7",
553 | "is-typed-array": "^1.1.13",
554 | "is-weakref": "^1.0.2",
555 | "object-inspect": "^1.13.1",
556 | "object-keys": "^1.1.1",
557 | "object.assign": "^4.1.5",
558 | "regexp.prototype.flags": "^1.5.2",
559 | "safe-array-concat": "^1.1.0",
560 | "safe-regex-test": "^1.0.3",
561 | "string.prototype.trim": "^1.2.8",
562 | "string.prototype.trimend": "^1.0.7",
563 | "string.prototype.trimstart": "^1.0.7",
564 | "typed-array-buffer": "^1.0.1",
565 | "typed-array-byte-length": "^1.0.0",
566 | "typed-array-byte-offset": "^1.0.0",
567 | "typed-array-length": "^1.0.4",
568 | "unbox-primitive": "^1.0.2",
569 | "which-typed-array": "^1.1.14"
570 | },
571 | "engines": {
572 | "node": ">= 0.4"
573 | },
574 | "funding": {
575 | "url": "https://github.com/sponsors/ljharb"
576 | }
577 | },
578 | "node_modules/es-array-method-boxes-properly": {
579 | "version": "1.0.0",
580 | "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
581 | "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
582 | "dev": true
583 | },
584 | "node_modules/es-define-property": {
585 | "version": "1.0.0",
586 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
587 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
588 | "dev": true,
589 | "dependencies": {
590 | "get-intrinsic": "^1.2.4"
591 | },
592 | "engines": {
593 | "node": ">= 0.4"
594 | }
595 | },
596 | "node_modules/es-errors": {
597 | "version": "1.3.0",
598 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
599 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
600 | "dev": true,
601 | "engines": {
602 | "node": ">= 0.4"
603 | }
604 | },
605 | "node_modules/es-set-tostringtag": {
606 | "version": "2.0.2",
607 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
608 | "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
609 | "dev": true,
610 | "dependencies": {
611 | "get-intrinsic": "^1.2.2",
612 | "has-tostringtag": "^1.0.0",
613 | "hasown": "^2.0.0"
614 | },
615 | "engines": {
616 | "node": ">= 0.4"
617 | }
618 | },
619 | "node_modules/es-shim-unscopables": {
620 | "version": "1.0.2",
621 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
622 | "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
623 | "dev": true,
624 | "dependencies": {
625 | "hasown": "^2.0.0"
626 | }
627 | },
628 | "node_modules/es-to-primitive": {
629 | "version": "1.2.1",
630 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
631 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
632 | "dev": true,
633 | "dependencies": {
634 | "is-callable": "^1.1.4",
635 | "is-date-object": "^1.0.1",
636 | "is-symbol": "^1.0.2"
637 | },
638 | "engines": {
639 | "node": ">= 0.4"
640 | },
641 | "funding": {
642 | "url": "https://github.com/sponsors/ljharb"
643 | }
644 | },
645 | "node_modules/escape-string-regexp": {
646 | "version": "1.0.5",
647 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
648 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
649 | "dev": true,
650 | "engines": {
651 | "node": ">=0.8.0"
652 | }
653 | },
654 | "node_modules/eslint": {
655 | "version": "6.8.0",
656 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
657 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
658 | "dev": true,
659 | "dependencies": {
660 | "@babel/code-frame": "^7.0.0",
661 | "ajv": "^6.10.0",
662 | "chalk": "^2.1.0",
663 | "cross-spawn": "^6.0.5",
664 | "debug": "^4.0.1",
665 | "doctrine": "^3.0.0",
666 | "eslint-scope": "^5.0.0",
667 | "eslint-utils": "^1.4.3",
668 | "eslint-visitor-keys": "^1.1.0",
669 | "espree": "^6.1.2",
670 | "esquery": "^1.0.1",
671 | "esutils": "^2.0.2",
672 | "file-entry-cache": "^5.0.1",
673 | "functional-red-black-tree": "^1.0.1",
674 | "glob-parent": "^5.0.0",
675 | "globals": "^12.1.0",
676 | "ignore": "^4.0.6",
677 | "import-fresh": "^3.0.0",
678 | "imurmurhash": "^0.1.4",
679 | "inquirer": "^7.0.0",
680 | "is-glob": "^4.0.0",
681 | "js-yaml": "^3.13.1",
682 | "json-stable-stringify-without-jsonify": "^1.0.1",
683 | "levn": "^0.3.0",
684 | "lodash": "^4.17.14",
685 | "minimatch": "^3.0.4",
686 | "mkdirp": "^0.5.1",
687 | "natural-compare": "^1.4.0",
688 | "optionator": "^0.8.3",
689 | "progress": "^2.0.0",
690 | "regexpp": "^2.0.1",
691 | "semver": "^6.1.2",
692 | "strip-ansi": "^5.2.0",
693 | "strip-json-comments": "^3.0.1",
694 | "table": "^5.2.3",
695 | "text-table": "^0.2.0",
696 | "v8-compile-cache": "^2.0.3"
697 | },
698 | "bin": {
699 | "eslint": "bin/eslint.js"
700 | },
701 | "engines": {
702 | "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
703 | },
704 | "funding": {
705 | "url": "https://opencollective.com/eslint"
706 | }
707 | },
708 | "node_modules/eslint-config-airbnb-base": {
709 | "version": "14.2.1",
710 | "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz",
711 | "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==",
712 | "dev": true,
713 | "dependencies": {
714 | "confusing-browser-globals": "^1.0.10",
715 | "object.assign": "^4.1.2",
716 | "object.entries": "^1.1.2"
717 | },
718 | "engines": {
719 | "node": ">= 6"
720 | },
721 | "peerDependencies": {
722 | "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
723 | "eslint-plugin-import": "^2.22.1"
724 | }
725 | },
726 | "node_modules/eslint-config-prettier": {
727 | "version": "6.15.0",
728 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz",
729 | "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==",
730 | "dev": true,
731 | "dependencies": {
732 | "get-stdin": "^6.0.0"
733 | },
734 | "bin": {
735 | "eslint-config-prettier-check": "bin/cli.js"
736 | },
737 | "peerDependencies": {
738 | "eslint": ">=3.14.1"
739 | }
740 | },
741 | "node_modules/eslint-import-resolver-node": {
742 | "version": "0.3.9",
743 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
744 | "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
745 | "dev": true,
746 | "dependencies": {
747 | "debug": "^3.2.7",
748 | "is-core-module": "^2.13.0",
749 | "resolve": "^1.22.4"
750 | }
751 | },
752 | "node_modules/eslint-import-resolver-node/node_modules/debug": {
753 | "version": "3.2.7",
754 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
755 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
756 | "dev": true,
757 | "dependencies": {
758 | "ms": "^2.1.1"
759 | }
760 | },
761 | "node_modules/eslint-module-utils": {
762 | "version": "2.8.0",
763 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
764 | "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
765 | "dev": true,
766 | "dependencies": {
767 | "debug": "^3.2.7"
768 | },
769 | "engines": {
770 | "node": ">=4"
771 | },
772 | "peerDependenciesMeta": {
773 | "eslint": {
774 | "optional": true
775 | }
776 | }
777 | },
778 | "node_modules/eslint-module-utils/node_modules/debug": {
779 | "version": "3.2.7",
780 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
781 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
782 | "dev": true,
783 | "dependencies": {
784 | "ms": "^2.1.1"
785 | }
786 | },
787 | "node_modules/eslint-plugin-import": {
788 | "version": "2.29.1",
789 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
790 | "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
791 | "dev": true,
792 | "dependencies": {
793 | "array-includes": "^3.1.7",
794 | "array.prototype.findlastindex": "^1.2.3",
795 | "array.prototype.flat": "^1.3.2",
796 | "array.prototype.flatmap": "^1.3.2",
797 | "debug": "^3.2.7",
798 | "doctrine": "^2.1.0",
799 | "eslint-import-resolver-node": "^0.3.9",
800 | "eslint-module-utils": "^2.8.0",
801 | "hasown": "^2.0.0",
802 | "is-core-module": "^2.13.1",
803 | "is-glob": "^4.0.3",
804 | "minimatch": "^3.1.2",
805 | "object.fromentries": "^2.0.7",
806 | "object.groupby": "^1.0.1",
807 | "object.values": "^1.1.7",
808 | "semver": "^6.3.1",
809 | "tsconfig-paths": "^3.15.0"
810 | },
811 | "engines": {
812 | "node": ">=4"
813 | },
814 | "peerDependencies": {
815 | "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
816 | }
817 | },
818 | "node_modules/eslint-plugin-import/node_modules/debug": {
819 | "version": "3.2.7",
820 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
821 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
822 | "dev": true,
823 | "dependencies": {
824 | "ms": "^2.1.1"
825 | }
826 | },
827 | "node_modules/eslint-plugin-import/node_modules/doctrine": {
828 | "version": "2.1.0",
829 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
830 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
831 | "dev": true,
832 | "dependencies": {
833 | "esutils": "^2.0.2"
834 | },
835 | "engines": {
836 | "node": ">=0.10.0"
837 | }
838 | },
839 | "node_modules/eslint-plugin-prettier": {
840 | "version": "3.4.1",
841 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz",
842 | "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==",
843 | "dev": true,
844 | "dependencies": {
845 | "prettier-linter-helpers": "^1.0.0"
846 | },
847 | "engines": {
848 | "node": ">=6.0.0"
849 | },
850 | "peerDependencies": {
851 | "eslint": ">=5.0.0",
852 | "prettier": ">=1.13.0"
853 | },
854 | "peerDependenciesMeta": {
855 | "eslint-config-prettier": {
856 | "optional": true
857 | }
858 | }
859 | },
860 | "node_modules/eslint-scope": {
861 | "version": "5.1.1",
862 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
863 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
864 | "dev": true,
865 | "dependencies": {
866 | "esrecurse": "^4.3.0",
867 | "estraverse": "^4.1.1"
868 | },
869 | "engines": {
870 | "node": ">=8.0.0"
871 | }
872 | },
873 | "node_modules/eslint-utils": {
874 | "version": "1.4.3",
875 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
876 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
877 | "dev": true,
878 | "dependencies": {
879 | "eslint-visitor-keys": "^1.1.0"
880 | },
881 | "engines": {
882 | "node": ">=6"
883 | }
884 | },
885 | "node_modules/eslint-visitor-keys": {
886 | "version": "1.3.0",
887 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
888 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
889 | "dev": true,
890 | "engines": {
891 | "node": ">=4"
892 | }
893 | },
894 | "node_modules/espree": {
895 | "version": "6.2.1",
896 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
897 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
898 | "dev": true,
899 | "dependencies": {
900 | "acorn": "^7.1.1",
901 | "acorn-jsx": "^5.2.0",
902 | "eslint-visitor-keys": "^1.1.0"
903 | },
904 | "engines": {
905 | "node": ">=6.0.0"
906 | }
907 | },
908 | "node_modules/esprima": {
909 | "version": "4.0.1",
910 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
911 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
912 | "dev": true,
913 | "bin": {
914 | "esparse": "bin/esparse.js",
915 | "esvalidate": "bin/esvalidate.js"
916 | },
917 | "engines": {
918 | "node": ">=4"
919 | }
920 | },
921 | "node_modules/esquery": {
922 | "version": "1.5.0",
923 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
924 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
925 | "dev": true,
926 | "dependencies": {
927 | "estraverse": "^5.1.0"
928 | },
929 | "engines": {
930 | "node": ">=0.10"
931 | }
932 | },
933 | "node_modules/esquery/node_modules/estraverse": {
934 | "version": "5.3.0",
935 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
936 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
937 | "dev": true,
938 | "engines": {
939 | "node": ">=4.0"
940 | }
941 | },
942 | "node_modules/esrecurse": {
943 | "version": "4.3.0",
944 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
945 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
946 | "dev": true,
947 | "dependencies": {
948 | "estraverse": "^5.2.0"
949 | },
950 | "engines": {
951 | "node": ">=4.0"
952 | }
953 | },
954 | "node_modules/esrecurse/node_modules/estraverse": {
955 | "version": "5.3.0",
956 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
957 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
958 | "dev": true,
959 | "engines": {
960 | "node": ">=4.0"
961 | }
962 | },
963 | "node_modules/estraverse": {
964 | "version": "4.3.0",
965 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
966 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
967 | "dev": true,
968 | "engines": {
969 | "node": ">=4.0"
970 | }
971 | },
972 | "node_modules/esutils": {
973 | "version": "2.0.3",
974 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
975 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
976 | "dev": true,
977 | "engines": {
978 | "node": ">=0.10.0"
979 | }
980 | },
981 | "node_modules/external-editor": {
982 | "version": "3.1.0",
983 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
984 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
985 | "dev": true,
986 | "dependencies": {
987 | "chardet": "^0.7.0",
988 | "iconv-lite": "^0.4.24",
989 | "tmp": "^0.0.33"
990 | },
991 | "engines": {
992 | "node": ">=4"
993 | }
994 | },
995 | "node_modules/fast-deep-equal": {
996 | "version": "3.1.3",
997 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
998 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
999 | "dev": true
1000 | },
1001 | "node_modules/fast-diff": {
1002 | "version": "1.3.0",
1003 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
1004 | "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
1005 | "dev": true
1006 | },
1007 | "node_modules/fast-json-stable-stringify": {
1008 | "version": "2.1.0",
1009 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1010 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1011 | "dev": true
1012 | },
1013 | "node_modules/fast-levenshtein": {
1014 | "version": "2.0.6",
1015 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1016 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1017 | "dev": true
1018 | },
1019 | "node_modules/figures": {
1020 | "version": "3.2.0",
1021 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
1022 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
1023 | "dev": true,
1024 | "dependencies": {
1025 | "escape-string-regexp": "^1.0.5"
1026 | },
1027 | "engines": {
1028 | "node": ">=8"
1029 | },
1030 | "funding": {
1031 | "url": "https://github.com/sponsors/sindresorhus"
1032 | }
1033 | },
1034 | "node_modules/file-entry-cache": {
1035 | "version": "5.0.1",
1036 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
1037 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
1038 | "dev": true,
1039 | "dependencies": {
1040 | "flat-cache": "^2.0.1"
1041 | },
1042 | "engines": {
1043 | "node": ">=4"
1044 | }
1045 | },
1046 | "node_modules/flat-cache": {
1047 | "version": "2.0.1",
1048 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
1049 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
1050 | "dev": true,
1051 | "dependencies": {
1052 | "flatted": "^2.0.0",
1053 | "rimraf": "2.6.3",
1054 | "write": "1.0.3"
1055 | },
1056 | "engines": {
1057 | "node": ">=4"
1058 | }
1059 | },
1060 | "node_modules/flatted": {
1061 | "version": "2.0.2",
1062 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
1063 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
1064 | "dev": true
1065 | },
1066 | "node_modules/for-each": {
1067 | "version": "0.3.3",
1068 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
1069 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
1070 | "dev": true,
1071 | "dependencies": {
1072 | "is-callable": "^1.1.3"
1073 | }
1074 | },
1075 | "node_modules/fs.realpath": {
1076 | "version": "1.0.0",
1077 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1078 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1079 | "dev": true
1080 | },
1081 | "node_modules/function-bind": {
1082 | "version": "1.1.2",
1083 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1084 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1085 | "dev": true,
1086 | "funding": {
1087 | "url": "https://github.com/sponsors/ljharb"
1088 | }
1089 | },
1090 | "node_modules/function.prototype.name": {
1091 | "version": "1.1.6",
1092 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
1093 | "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
1094 | "dev": true,
1095 | "dependencies": {
1096 | "call-bind": "^1.0.2",
1097 | "define-properties": "^1.2.0",
1098 | "es-abstract": "^1.22.1",
1099 | "functions-have-names": "^1.2.3"
1100 | },
1101 | "engines": {
1102 | "node": ">= 0.4"
1103 | },
1104 | "funding": {
1105 | "url": "https://github.com/sponsors/ljharb"
1106 | }
1107 | },
1108 | "node_modules/functional-red-black-tree": {
1109 | "version": "1.0.1",
1110 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
1111 | "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
1112 | "dev": true
1113 | },
1114 | "node_modules/functions-have-names": {
1115 | "version": "1.2.3",
1116 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
1117 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
1118 | "dev": true,
1119 | "funding": {
1120 | "url": "https://github.com/sponsors/ljharb"
1121 | }
1122 | },
1123 | "node_modules/get-intrinsic": {
1124 | "version": "1.2.4",
1125 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
1126 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
1127 | "dev": true,
1128 | "dependencies": {
1129 | "es-errors": "^1.3.0",
1130 | "function-bind": "^1.1.2",
1131 | "has-proto": "^1.0.1",
1132 | "has-symbols": "^1.0.3",
1133 | "hasown": "^2.0.0"
1134 | },
1135 | "engines": {
1136 | "node": ">= 0.4"
1137 | },
1138 | "funding": {
1139 | "url": "https://github.com/sponsors/ljharb"
1140 | }
1141 | },
1142 | "node_modules/get-stdin": {
1143 | "version": "6.0.0",
1144 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
1145 | "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
1146 | "dev": true,
1147 | "engines": {
1148 | "node": ">=4"
1149 | }
1150 | },
1151 | "node_modules/get-symbol-description": {
1152 | "version": "1.0.2",
1153 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
1154 | "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
1155 | "dev": true,
1156 | "dependencies": {
1157 | "call-bind": "^1.0.5",
1158 | "es-errors": "^1.3.0",
1159 | "get-intrinsic": "^1.2.4"
1160 | },
1161 | "engines": {
1162 | "node": ">= 0.4"
1163 | },
1164 | "funding": {
1165 | "url": "https://github.com/sponsors/ljharb"
1166 | }
1167 | },
1168 | "node_modules/glob": {
1169 | "version": "7.2.3",
1170 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1171 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1172 | "dev": true,
1173 | "dependencies": {
1174 | "fs.realpath": "^1.0.0",
1175 | "inflight": "^1.0.4",
1176 | "inherits": "2",
1177 | "minimatch": "^3.1.1",
1178 | "once": "^1.3.0",
1179 | "path-is-absolute": "^1.0.0"
1180 | },
1181 | "engines": {
1182 | "node": "*"
1183 | },
1184 | "funding": {
1185 | "url": "https://github.com/sponsors/isaacs"
1186 | }
1187 | },
1188 | "node_modules/glob-parent": {
1189 | "version": "5.1.2",
1190 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1191 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1192 | "dev": true,
1193 | "dependencies": {
1194 | "is-glob": "^4.0.1"
1195 | },
1196 | "engines": {
1197 | "node": ">= 6"
1198 | }
1199 | },
1200 | "node_modules/globals": {
1201 | "version": "12.4.0",
1202 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
1203 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
1204 | "dev": true,
1205 | "dependencies": {
1206 | "type-fest": "^0.8.1"
1207 | },
1208 | "engines": {
1209 | "node": ">=8"
1210 | },
1211 | "funding": {
1212 | "url": "https://github.com/sponsors/sindresorhus"
1213 | }
1214 | },
1215 | "node_modules/globalthis": {
1216 | "version": "1.0.3",
1217 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
1218 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
1219 | "dev": true,
1220 | "dependencies": {
1221 | "define-properties": "^1.1.3"
1222 | },
1223 | "engines": {
1224 | "node": ">= 0.4"
1225 | },
1226 | "funding": {
1227 | "url": "https://github.com/sponsors/ljharb"
1228 | }
1229 | },
1230 | "node_modules/gopd": {
1231 | "version": "1.0.1",
1232 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1233 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1234 | "dev": true,
1235 | "dependencies": {
1236 | "get-intrinsic": "^1.1.3"
1237 | },
1238 | "funding": {
1239 | "url": "https://github.com/sponsors/ljharb"
1240 | }
1241 | },
1242 | "node_modules/has-bigints": {
1243 | "version": "1.0.2",
1244 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
1245 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
1246 | "dev": true,
1247 | "funding": {
1248 | "url": "https://github.com/sponsors/ljharb"
1249 | }
1250 | },
1251 | "node_modules/has-flag": {
1252 | "version": "3.0.0",
1253 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1254 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1255 | "dev": true,
1256 | "engines": {
1257 | "node": ">=4"
1258 | }
1259 | },
1260 | "node_modules/has-property-descriptors": {
1261 | "version": "1.0.2",
1262 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1263 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1264 | "dev": true,
1265 | "dependencies": {
1266 | "es-define-property": "^1.0.0"
1267 | },
1268 | "funding": {
1269 | "url": "https://github.com/sponsors/ljharb"
1270 | }
1271 | },
1272 | "node_modules/has-proto": {
1273 | "version": "1.0.1",
1274 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
1275 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
1276 | "dev": true,
1277 | "engines": {
1278 | "node": ">= 0.4"
1279 | },
1280 | "funding": {
1281 | "url": "https://github.com/sponsors/ljharb"
1282 | }
1283 | },
1284 | "node_modules/has-symbols": {
1285 | "version": "1.0.3",
1286 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1287 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
1288 | "dev": true,
1289 | "engines": {
1290 | "node": ">= 0.4"
1291 | },
1292 | "funding": {
1293 | "url": "https://github.com/sponsors/ljharb"
1294 | }
1295 | },
1296 | "node_modules/has-tostringtag": {
1297 | "version": "1.0.2",
1298 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
1299 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
1300 | "dev": true,
1301 | "dependencies": {
1302 | "has-symbols": "^1.0.3"
1303 | },
1304 | "engines": {
1305 | "node": ">= 0.4"
1306 | },
1307 | "funding": {
1308 | "url": "https://github.com/sponsors/ljharb"
1309 | }
1310 | },
1311 | "node_modules/hasown": {
1312 | "version": "2.0.1",
1313 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
1314 | "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
1315 | "dev": true,
1316 | "dependencies": {
1317 | "function-bind": "^1.1.2"
1318 | },
1319 | "engines": {
1320 | "node": ">= 0.4"
1321 | }
1322 | },
1323 | "node_modules/iconv-lite": {
1324 | "version": "0.4.24",
1325 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1326 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1327 | "dev": true,
1328 | "dependencies": {
1329 | "safer-buffer": ">= 2.1.2 < 3"
1330 | },
1331 | "engines": {
1332 | "node": ">=0.10.0"
1333 | }
1334 | },
1335 | "node_modules/ignore": {
1336 | "version": "4.0.6",
1337 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
1338 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
1339 | "dev": true,
1340 | "engines": {
1341 | "node": ">= 4"
1342 | }
1343 | },
1344 | "node_modules/import-fresh": {
1345 | "version": "3.3.0",
1346 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
1347 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
1348 | "dev": true,
1349 | "dependencies": {
1350 | "parent-module": "^1.0.0",
1351 | "resolve-from": "^4.0.0"
1352 | },
1353 | "engines": {
1354 | "node": ">=6"
1355 | },
1356 | "funding": {
1357 | "url": "https://github.com/sponsors/sindresorhus"
1358 | }
1359 | },
1360 | "node_modules/imurmurhash": {
1361 | "version": "0.1.4",
1362 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1363 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1364 | "dev": true,
1365 | "engines": {
1366 | "node": ">=0.8.19"
1367 | }
1368 | },
1369 | "node_modules/inflight": {
1370 | "version": "1.0.6",
1371 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1372 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1373 | "dev": true,
1374 | "dependencies": {
1375 | "once": "^1.3.0",
1376 | "wrappy": "1"
1377 | }
1378 | },
1379 | "node_modules/inherits": {
1380 | "version": "2.0.4",
1381 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1382 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1383 | "dev": true
1384 | },
1385 | "node_modules/inquirer": {
1386 | "version": "7.3.3",
1387 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
1388 | "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
1389 | "dev": true,
1390 | "dependencies": {
1391 | "ansi-escapes": "^4.2.1",
1392 | "chalk": "^4.1.0",
1393 | "cli-cursor": "^3.1.0",
1394 | "cli-width": "^3.0.0",
1395 | "external-editor": "^3.0.3",
1396 | "figures": "^3.0.0",
1397 | "lodash": "^4.17.19",
1398 | "mute-stream": "0.0.8",
1399 | "run-async": "^2.4.0",
1400 | "rxjs": "^6.6.0",
1401 | "string-width": "^4.1.0",
1402 | "strip-ansi": "^6.0.0",
1403 | "through": "^2.3.6"
1404 | },
1405 | "engines": {
1406 | "node": ">=8.0.0"
1407 | }
1408 | },
1409 | "node_modules/inquirer/node_modules/ansi-regex": {
1410 | "version": "5.0.1",
1411 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1412 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1413 | "dev": true,
1414 | "engines": {
1415 | "node": ">=8"
1416 | }
1417 | },
1418 | "node_modules/inquirer/node_modules/ansi-styles": {
1419 | "version": "4.3.0",
1420 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1421 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1422 | "dev": true,
1423 | "dependencies": {
1424 | "color-convert": "^2.0.1"
1425 | },
1426 | "engines": {
1427 | "node": ">=8"
1428 | },
1429 | "funding": {
1430 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1431 | }
1432 | },
1433 | "node_modules/inquirer/node_modules/chalk": {
1434 | "version": "4.1.2",
1435 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1436 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1437 | "dev": true,
1438 | "dependencies": {
1439 | "ansi-styles": "^4.1.0",
1440 | "supports-color": "^7.1.0"
1441 | },
1442 | "engines": {
1443 | "node": ">=10"
1444 | },
1445 | "funding": {
1446 | "url": "https://github.com/chalk/chalk?sponsor=1"
1447 | }
1448 | },
1449 | "node_modules/inquirer/node_modules/color-convert": {
1450 | "version": "2.0.1",
1451 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1452 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1453 | "dev": true,
1454 | "dependencies": {
1455 | "color-name": "~1.1.4"
1456 | },
1457 | "engines": {
1458 | "node": ">=7.0.0"
1459 | }
1460 | },
1461 | "node_modules/inquirer/node_modules/color-name": {
1462 | "version": "1.1.4",
1463 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1464 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1465 | "dev": true
1466 | },
1467 | "node_modules/inquirer/node_modules/has-flag": {
1468 | "version": "4.0.0",
1469 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1470 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1471 | "dev": true,
1472 | "engines": {
1473 | "node": ">=8"
1474 | }
1475 | },
1476 | "node_modules/inquirer/node_modules/strip-ansi": {
1477 | "version": "6.0.1",
1478 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1479 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1480 | "dev": true,
1481 | "dependencies": {
1482 | "ansi-regex": "^5.0.1"
1483 | },
1484 | "engines": {
1485 | "node": ">=8"
1486 | }
1487 | },
1488 | "node_modules/inquirer/node_modules/supports-color": {
1489 | "version": "7.2.0",
1490 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1491 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1492 | "dev": true,
1493 | "dependencies": {
1494 | "has-flag": "^4.0.0"
1495 | },
1496 | "engines": {
1497 | "node": ">=8"
1498 | }
1499 | },
1500 | "node_modules/internal-slot": {
1501 | "version": "1.0.7",
1502 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
1503 | "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
1504 | "dev": true,
1505 | "dependencies": {
1506 | "es-errors": "^1.3.0",
1507 | "hasown": "^2.0.0",
1508 | "side-channel": "^1.0.4"
1509 | },
1510 | "engines": {
1511 | "node": ">= 0.4"
1512 | }
1513 | },
1514 | "node_modules/is-array-buffer": {
1515 | "version": "3.0.4",
1516 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
1517 | "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
1518 | "dev": true,
1519 | "dependencies": {
1520 | "call-bind": "^1.0.2",
1521 | "get-intrinsic": "^1.2.1"
1522 | },
1523 | "engines": {
1524 | "node": ">= 0.4"
1525 | },
1526 | "funding": {
1527 | "url": "https://github.com/sponsors/ljharb"
1528 | }
1529 | },
1530 | "node_modules/is-bigint": {
1531 | "version": "1.0.4",
1532 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
1533 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
1534 | "dev": true,
1535 | "dependencies": {
1536 | "has-bigints": "^1.0.1"
1537 | },
1538 | "funding": {
1539 | "url": "https://github.com/sponsors/ljharb"
1540 | }
1541 | },
1542 | "node_modules/is-boolean-object": {
1543 | "version": "1.1.2",
1544 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
1545 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
1546 | "dev": true,
1547 | "dependencies": {
1548 | "call-bind": "^1.0.2",
1549 | "has-tostringtag": "^1.0.0"
1550 | },
1551 | "engines": {
1552 | "node": ">= 0.4"
1553 | },
1554 | "funding": {
1555 | "url": "https://github.com/sponsors/ljharb"
1556 | }
1557 | },
1558 | "node_modules/is-callable": {
1559 | "version": "1.2.7",
1560 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
1561 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
1562 | "dev": true,
1563 | "engines": {
1564 | "node": ">= 0.4"
1565 | },
1566 | "funding": {
1567 | "url": "https://github.com/sponsors/ljharb"
1568 | }
1569 | },
1570 | "node_modules/is-core-module": {
1571 | "version": "2.13.1",
1572 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
1573 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
1574 | "dev": true,
1575 | "dependencies": {
1576 | "hasown": "^2.0.0"
1577 | },
1578 | "funding": {
1579 | "url": "https://github.com/sponsors/ljharb"
1580 | }
1581 | },
1582 | "node_modules/is-date-object": {
1583 | "version": "1.0.5",
1584 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
1585 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
1586 | "dev": true,
1587 | "dependencies": {
1588 | "has-tostringtag": "^1.0.0"
1589 | },
1590 | "engines": {
1591 | "node": ">= 0.4"
1592 | },
1593 | "funding": {
1594 | "url": "https://github.com/sponsors/ljharb"
1595 | }
1596 | },
1597 | "node_modules/is-extglob": {
1598 | "version": "2.1.1",
1599 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1600 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1601 | "dev": true,
1602 | "engines": {
1603 | "node": ">=0.10.0"
1604 | }
1605 | },
1606 | "node_modules/is-fullwidth-code-point": {
1607 | "version": "3.0.0",
1608 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1609 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1610 | "dev": true,
1611 | "engines": {
1612 | "node": ">=8"
1613 | }
1614 | },
1615 | "node_modules/is-glob": {
1616 | "version": "4.0.3",
1617 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1618 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1619 | "dev": true,
1620 | "dependencies": {
1621 | "is-extglob": "^2.1.1"
1622 | },
1623 | "engines": {
1624 | "node": ">=0.10.0"
1625 | }
1626 | },
1627 | "node_modules/is-negative-zero": {
1628 | "version": "2.0.2",
1629 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
1630 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
1631 | "dev": true,
1632 | "engines": {
1633 | "node": ">= 0.4"
1634 | },
1635 | "funding": {
1636 | "url": "https://github.com/sponsors/ljharb"
1637 | }
1638 | },
1639 | "node_modules/is-number-object": {
1640 | "version": "1.0.7",
1641 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
1642 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
1643 | "dev": true,
1644 | "dependencies": {
1645 | "has-tostringtag": "^1.0.0"
1646 | },
1647 | "engines": {
1648 | "node": ">= 0.4"
1649 | },
1650 | "funding": {
1651 | "url": "https://github.com/sponsors/ljharb"
1652 | }
1653 | },
1654 | "node_modules/is-regex": {
1655 | "version": "1.1.4",
1656 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
1657 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
1658 | "dev": true,
1659 | "dependencies": {
1660 | "call-bind": "^1.0.2",
1661 | "has-tostringtag": "^1.0.0"
1662 | },
1663 | "engines": {
1664 | "node": ">= 0.4"
1665 | },
1666 | "funding": {
1667 | "url": "https://github.com/sponsors/ljharb"
1668 | }
1669 | },
1670 | "node_modules/is-shared-array-buffer": {
1671 | "version": "1.0.2",
1672 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
1673 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
1674 | "dev": true,
1675 | "dependencies": {
1676 | "call-bind": "^1.0.2"
1677 | },
1678 | "funding": {
1679 | "url": "https://github.com/sponsors/ljharb"
1680 | }
1681 | },
1682 | "node_modules/is-string": {
1683 | "version": "1.0.7",
1684 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
1685 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
1686 | "dev": true,
1687 | "dependencies": {
1688 | "has-tostringtag": "^1.0.0"
1689 | },
1690 | "engines": {
1691 | "node": ">= 0.4"
1692 | },
1693 | "funding": {
1694 | "url": "https://github.com/sponsors/ljharb"
1695 | }
1696 | },
1697 | "node_modules/is-symbol": {
1698 | "version": "1.0.4",
1699 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
1700 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
1701 | "dev": true,
1702 | "dependencies": {
1703 | "has-symbols": "^1.0.2"
1704 | },
1705 | "engines": {
1706 | "node": ">= 0.4"
1707 | },
1708 | "funding": {
1709 | "url": "https://github.com/sponsors/ljharb"
1710 | }
1711 | },
1712 | "node_modules/is-typed-array": {
1713 | "version": "1.1.13",
1714 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
1715 | "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
1716 | "dev": true,
1717 | "dependencies": {
1718 | "which-typed-array": "^1.1.14"
1719 | },
1720 | "engines": {
1721 | "node": ">= 0.4"
1722 | },
1723 | "funding": {
1724 | "url": "https://github.com/sponsors/ljharb"
1725 | }
1726 | },
1727 | "node_modules/is-weakref": {
1728 | "version": "1.0.2",
1729 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
1730 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
1731 | "dev": true,
1732 | "dependencies": {
1733 | "call-bind": "^1.0.2"
1734 | },
1735 | "funding": {
1736 | "url": "https://github.com/sponsors/ljharb"
1737 | }
1738 | },
1739 | "node_modules/isarray": {
1740 | "version": "2.0.5",
1741 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
1742 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
1743 | "dev": true
1744 | },
1745 | "node_modules/isexe": {
1746 | "version": "2.0.0",
1747 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1748 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1749 | "dev": true
1750 | },
1751 | "node_modules/js-tokens": {
1752 | "version": "4.0.0",
1753 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1754 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1755 | "dev": true
1756 | },
1757 | "node_modules/js-yaml": {
1758 | "version": "3.14.1",
1759 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
1760 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
1761 | "dev": true,
1762 | "dependencies": {
1763 | "argparse": "^1.0.7",
1764 | "esprima": "^4.0.0"
1765 | },
1766 | "bin": {
1767 | "js-yaml": "bin/js-yaml.js"
1768 | }
1769 | },
1770 | "node_modules/json-schema-traverse": {
1771 | "version": "0.4.1",
1772 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1773 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1774 | "dev": true
1775 | },
1776 | "node_modules/json-stable-stringify-without-jsonify": {
1777 | "version": "1.0.1",
1778 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
1779 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
1780 | "dev": true
1781 | },
1782 | "node_modules/json5": {
1783 | "version": "1.0.2",
1784 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
1785 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
1786 | "dev": true,
1787 | "dependencies": {
1788 | "minimist": "^1.2.0"
1789 | },
1790 | "bin": {
1791 | "json5": "lib/cli.js"
1792 | }
1793 | },
1794 | "node_modules/levn": {
1795 | "version": "0.3.0",
1796 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1797 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
1798 | "dev": true,
1799 | "dependencies": {
1800 | "prelude-ls": "~1.1.2",
1801 | "type-check": "~0.3.2"
1802 | },
1803 | "engines": {
1804 | "node": ">= 0.8.0"
1805 | }
1806 | },
1807 | "node_modules/lodash": {
1808 | "version": "4.17.21",
1809 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1810 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
1811 | "dev": true
1812 | },
1813 | "node_modules/mimic-fn": {
1814 | "version": "2.1.0",
1815 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1816 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1817 | "dev": true,
1818 | "engines": {
1819 | "node": ">=6"
1820 | }
1821 | },
1822 | "node_modules/minimatch": {
1823 | "version": "3.1.2",
1824 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1825 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1826 | "dev": true,
1827 | "dependencies": {
1828 | "brace-expansion": "^1.1.7"
1829 | },
1830 | "engines": {
1831 | "node": "*"
1832 | }
1833 | },
1834 | "node_modules/minimist": {
1835 | "version": "1.2.8",
1836 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1837 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1838 | "dev": true,
1839 | "funding": {
1840 | "url": "https://github.com/sponsors/ljharb"
1841 | }
1842 | },
1843 | "node_modules/mkdirp": {
1844 | "version": "0.5.6",
1845 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
1846 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
1847 | "dev": true,
1848 | "dependencies": {
1849 | "minimist": "^1.2.6"
1850 | },
1851 | "bin": {
1852 | "mkdirp": "bin/cmd.js"
1853 | }
1854 | },
1855 | "node_modules/ms": {
1856 | "version": "2.1.2",
1857 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1858 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1859 | "dev": true
1860 | },
1861 | "node_modules/mute-stream": {
1862 | "version": "0.0.8",
1863 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1864 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
1865 | "dev": true
1866 | },
1867 | "node_modules/natural-compare": {
1868 | "version": "1.4.0",
1869 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1870 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
1871 | "dev": true
1872 | },
1873 | "node_modules/nice-try": {
1874 | "version": "1.0.5",
1875 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
1876 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
1877 | "dev": true
1878 | },
1879 | "node_modules/object-inspect": {
1880 | "version": "1.13.1",
1881 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1882 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
1883 | "dev": true,
1884 | "funding": {
1885 | "url": "https://github.com/sponsors/ljharb"
1886 | }
1887 | },
1888 | "node_modules/object-keys": {
1889 | "version": "1.1.1",
1890 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1891 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1892 | "dev": true,
1893 | "engines": {
1894 | "node": ">= 0.4"
1895 | }
1896 | },
1897 | "node_modules/object.assign": {
1898 | "version": "4.1.5",
1899 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
1900 | "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
1901 | "dev": true,
1902 | "dependencies": {
1903 | "call-bind": "^1.0.5",
1904 | "define-properties": "^1.2.1",
1905 | "has-symbols": "^1.0.3",
1906 | "object-keys": "^1.1.1"
1907 | },
1908 | "engines": {
1909 | "node": ">= 0.4"
1910 | },
1911 | "funding": {
1912 | "url": "https://github.com/sponsors/ljharb"
1913 | }
1914 | },
1915 | "node_modules/object.entries": {
1916 | "version": "1.1.7",
1917 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
1918 | "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
1919 | "dev": true,
1920 | "dependencies": {
1921 | "call-bind": "^1.0.2",
1922 | "define-properties": "^1.2.0",
1923 | "es-abstract": "^1.22.1"
1924 | },
1925 | "engines": {
1926 | "node": ">= 0.4"
1927 | }
1928 | },
1929 | "node_modules/object.fromentries": {
1930 | "version": "2.0.7",
1931 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
1932 | "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
1933 | "dev": true,
1934 | "dependencies": {
1935 | "call-bind": "^1.0.2",
1936 | "define-properties": "^1.2.0",
1937 | "es-abstract": "^1.22.1"
1938 | },
1939 | "engines": {
1940 | "node": ">= 0.4"
1941 | },
1942 | "funding": {
1943 | "url": "https://github.com/sponsors/ljharb"
1944 | }
1945 | },
1946 | "node_modules/object.groupby": {
1947 | "version": "1.0.2",
1948 | "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz",
1949 | "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==",
1950 | "dev": true,
1951 | "dependencies": {
1952 | "array.prototype.filter": "^1.0.3",
1953 | "call-bind": "^1.0.5",
1954 | "define-properties": "^1.2.1",
1955 | "es-abstract": "^1.22.3",
1956 | "es-errors": "^1.0.0"
1957 | }
1958 | },
1959 | "node_modules/object.values": {
1960 | "version": "1.1.7",
1961 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
1962 | "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
1963 | "dev": true,
1964 | "dependencies": {
1965 | "call-bind": "^1.0.2",
1966 | "define-properties": "^1.2.0",
1967 | "es-abstract": "^1.22.1"
1968 | },
1969 | "engines": {
1970 | "node": ">= 0.4"
1971 | },
1972 | "funding": {
1973 | "url": "https://github.com/sponsors/ljharb"
1974 | }
1975 | },
1976 | "node_modules/once": {
1977 | "version": "1.4.0",
1978 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1979 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1980 | "dev": true,
1981 | "dependencies": {
1982 | "wrappy": "1"
1983 | }
1984 | },
1985 | "node_modules/onetime": {
1986 | "version": "5.1.2",
1987 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
1988 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
1989 | "dev": true,
1990 | "dependencies": {
1991 | "mimic-fn": "^2.1.0"
1992 | },
1993 | "engines": {
1994 | "node": ">=6"
1995 | },
1996 | "funding": {
1997 | "url": "https://github.com/sponsors/sindresorhus"
1998 | }
1999 | },
2000 | "node_modules/optionator": {
2001 | "version": "0.8.3",
2002 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
2003 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
2004 | "dev": true,
2005 | "dependencies": {
2006 | "deep-is": "~0.1.3",
2007 | "fast-levenshtein": "~2.0.6",
2008 | "levn": "~0.3.0",
2009 | "prelude-ls": "~1.1.2",
2010 | "type-check": "~0.3.2",
2011 | "word-wrap": "~1.2.3"
2012 | },
2013 | "engines": {
2014 | "node": ">= 0.8.0"
2015 | }
2016 | },
2017 | "node_modules/os-tmpdir": {
2018 | "version": "1.0.2",
2019 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
2020 | "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
2021 | "dev": true,
2022 | "engines": {
2023 | "node": ">=0.10.0"
2024 | }
2025 | },
2026 | "node_modules/parent-module": {
2027 | "version": "1.0.1",
2028 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2029 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2030 | "dev": true,
2031 | "dependencies": {
2032 | "callsites": "^3.0.0"
2033 | },
2034 | "engines": {
2035 | "node": ">=6"
2036 | }
2037 | },
2038 | "node_modules/path-is-absolute": {
2039 | "version": "1.0.1",
2040 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2041 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
2042 | "dev": true,
2043 | "engines": {
2044 | "node": ">=0.10.0"
2045 | }
2046 | },
2047 | "node_modules/path-key": {
2048 | "version": "2.0.1",
2049 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2050 | "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
2051 | "dev": true,
2052 | "engines": {
2053 | "node": ">=4"
2054 | }
2055 | },
2056 | "node_modules/path-parse": {
2057 | "version": "1.0.7",
2058 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2059 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2060 | "dev": true
2061 | },
2062 | "node_modules/prelude-ls": {
2063 | "version": "1.1.2",
2064 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
2065 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
2066 | "dev": true,
2067 | "engines": {
2068 | "node": ">= 0.8.0"
2069 | }
2070 | },
2071 | "node_modules/prettier": {
2072 | "version": "2.8.8",
2073 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
2074 | "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
2075 | "dev": true,
2076 | "bin": {
2077 | "prettier": "bin-prettier.js"
2078 | },
2079 | "engines": {
2080 | "node": ">=10.13.0"
2081 | },
2082 | "funding": {
2083 | "url": "https://github.com/prettier/prettier?sponsor=1"
2084 | }
2085 | },
2086 | "node_modules/prettier-linter-helpers": {
2087 | "version": "1.0.0",
2088 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
2089 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
2090 | "dev": true,
2091 | "dependencies": {
2092 | "fast-diff": "^1.1.2"
2093 | },
2094 | "engines": {
2095 | "node": ">=6.0.0"
2096 | }
2097 | },
2098 | "node_modules/progress": {
2099 | "version": "2.0.3",
2100 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
2101 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
2102 | "dev": true,
2103 | "engines": {
2104 | "node": ">=0.4.0"
2105 | }
2106 | },
2107 | "node_modules/punycode": {
2108 | "version": "2.3.1",
2109 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2110 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2111 | "dev": true,
2112 | "engines": {
2113 | "node": ">=6"
2114 | }
2115 | },
2116 | "node_modules/regexp.prototype.flags": {
2117 | "version": "1.5.2",
2118 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
2119 | "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
2120 | "dev": true,
2121 | "dependencies": {
2122 | "call-bind": "^1.0.6",
2123 | "define-properties": "^1.2.1",
2124 | "es-errors": "^1.3.0",
2125 | "set-function-name": "^2.0.1"
2126 | },
2127 | "engines": {
2128 | "node": ">= 0.4"
2129 | },
2130 | "funding": {
2131 | "url": "https://github.com/sponsors/ljharb"
2132 | }
2133 | },
2134 | "node_modules/regexpp": {
2135 | "version": "2.0.1",
2136 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
2137 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
2138 | "dev": true,
2139 | "engines": {
2140 | "node": ">=6.5.0"
2141 | }
2142 | },
2143 | "node_modules/resolve": {
2144 | "version": "1.22.8",
2145 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
2146 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
2147 | "dev": true,
2148 | "dependencies": {
2149 | "is-core-module": "^2.13.0",
2150 | "path-parse": "^1.0.7",
2151 | "supports-preserve-symlinks-flag": "^1.0.0"
2152 | },
2153 | "bin": {
2154 | "resolve": "bin/resolve"
2155 | },
2156 | "funding": {
2157 | "url": "https://github.com/sponsors/ljharb"
2158 | }
2159 | },
2160 | "node_modules/resolve-from": {
2161 | "version": "4.0.0",
2162 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2163 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2164 | "dev": true,
2165 | "engines": {
2166 | "node": ">=4"
2167 | }
2168 | },
2169 | "node_modules/restore-cursor": {
2170 | "version": "3.1.0",
2171 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
2172 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
2173 | "dev": true,
2174 | "dependencies": {
2175 | "onetime": "^5.1.0",
2176 | "signal-exit": "^3.0.2"
2177 | },
2178 | "engines": {
2179 | "node": ">=8"
2180 | }
2181 | },
2182 | "node_modules/rimraf": {
2183 | "version": "2.6.3",
2184 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
2185 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
2186 | "dev": true,
2187 | "dependencies": {
2188 | "glob": "^7.1.3"
2189 | },
2190 | "bin": {
2191 | "rimraf": "bin.js"
2192 | }
2193 | },
2194 | "node_modules/run-async": {
2195 | "version": "2.4.1",
2196 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
2197 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
2198 | "dev": true,
2199 | "engines": {
2200 | "node": ">=0.12.0"
2201 | }
2202 | },
2203 | "node_modules/rxjs": {
2204 | "version": "6.6.7",
2205 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
2206 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
2207 | "dev": true,
2208 | "dependencies": {
2209 | "tslib": "^1.9.0"
2210 | },
2211 | "engines": {
2212 | "npm": ">=2.0.0"
2213 | }
2214 | },
2215 | "node_modules/safe-array-concat": {
2216 | "version": "1.1.0",
2217 | "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
2218 | "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
2219 | "dev": true,
2220 | "dependencies": {
2221 | "call-bind": "^1.0.5",
2222 | "get-intrinsic": "^1.2.2",
2223 | "has-symbols": "^1.0.3",
2224 | "isarray": "^2.0.5"
2225 | },
2226 | "engines": {
2227 | "node": ">=0.4"
2228 | },
2229 | "funding": {
2230 | "url": "https://github.com/sponsors/ljharb"
2231 | }
2232 | },
2233 | "node_modules/safe-regex-test": {
2234 | "version": "1.0.3",
2235 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
2236 | "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
2237 | "dev": true,
2238 | "dependencies": {
2239 | "call-bind": "^1.0.6",
2240 | "es-errors": "^1.3.0",
2241 | "is-regex": "^1.1.4"
2242 | },
2243 | "engines": {
2244 | "node": ">= 0.4"
2245 | },
2246 | "funding": {
2247 | "url": "https://github.com/sponsors/ljharb"
2248 | }
2249 | },
2250 | "node_modules/safer-buffer": {
2251 | "version": "2.1.2",
2252 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2253 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2254 | "dev": true
2255 | },
2256 | "node_modules/semver": {
2257 | "version": "6.3.1",
2258 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2259 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2260 | "dev": true,
2261 | "bin": {
2262 | "semver": "bin/semver.js"
2263 | }
2264 | },
2265 | "node_modules/set-function-length": {
2266 | "version": "1.2.1",
2267 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
2268 | "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
2269 | "dev": true,
2270 | "dependencies": {
2271 | "define-data-property": "^1.1.2",
2272 | "es-errors": "^1.3.0",
2273 | "function-bind": "^1.1.2",
2274 | "get-intrinsic": "^1.2.3",
2275 | "gopd": "^1.0.1",
2276 | "has-property-descriptors": "^1.0.1"
2277 | },
2278 | "engines": {
2279 | "node": ">= 0.4"
2280 | }
2281 | },
2282 | "node_modules/set-function-name": {
2283 | "version": "2.0.1",
2284 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
2285 | "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
2286 | "dev": true,
2287 | "dependencies": {
2288 | "define-data-property": "^1.0.1",
2289 | "functions-have-names": "^1.2.3",
2290 | "has-property-descriptors": "^1.0.0"
2291 | },
2292 | "engines": {
2293 | "node": ">= 0.4"
2294 | }
2295 | },
2296 | "node_modules/shebang-command": {
2297 | "version": "1.2.0",
2298 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2299 | "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
2300 | "dev": true,
2301 | "dependencies": {
2302 | "shebang-regex": "^1.0.0"
2303 | },
2304 | "engines": {
2305 | "node": ">=0.10.0"
2306 | }
2307 | },
2308 | "node_modules/shebang-regex": {
2309 | "version": "1.0.0",
2310 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2311 | "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
2312 | "dev": true,
2313 | "engines": {
2314 | "node": ">=0.10.0"
2315 | }
2316 | },
2317 | "node_modules/side-channel": {
2318 | "version": "1.0.5",
2319 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
2320 | "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
2321 | "dev": true,
2322 | "dependencies": {
2323 | "call-bind": "^1.0.6",
2324 | "es-errors": "^1.3.0",
2325 | "get-intrinsic": "^1.2.4",
2326 | "object-inspect": "^1.13.1"
2327 | },
2328 | "engines": {
2329 | "node": ">= 0.4"
2330 | },
2331 | "funding": {
2332 | "url": "https://github.com/sponsors/ljharb"
2333 | }
2334 | },
2335 | "node_modules/signal-exit": {
2336 | "version": "3.0.7",
2337 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
2338 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
2339 | "dev": true
2340 | },
2341 | "node_modules/slice-ansi": {
2342 | "version": "2.1.0",
2343 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
2344 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
2345 | "dev": true,
2346 | "dependencies": {
2347 | "ansi-styles": "^3.2.0",
2348 | "astral-regex": "^1.0.0",
2349 | "is-fullwidth-code-point": "^2.0.0"
2350 | },
2351 | "engines": {
2352 | "node": ">=6"
2353 | }
2354 | },
2355 | "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
2356 | "version": "2.0.0",
2357 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2358 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
2359 | "dev": true,
2360 | "engines": {
2361 | "node": ">=4"
2362 | }
2363 | },
2364 | "node_modules/sprintf-js": {
2365 | "version": "1.0.3",
2366 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2367 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
2368 | "dev": true
2369 | },
2370 | "node_modules/string-width": {
2371 | "version": "4.2.3",
2372 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2373 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2374 | "dev": true,
2375 | "dependencies": {
2376 | "emoji-regex": "^8.0.0",
2377 | "is-fullwidth-code-point": "^3.0.0",
2378 | "strip-ansi": "^6.0.1"
2379 | },
2380 | "engines": {
2381 | "node": ">=8"
2382 | }
2383 | },
2384 | "node_modules/string-width/node_modules/ansi-regex": {
2385 | "version": "5.0.1",
2386 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2387 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2388 | "dev": true,
2389 | "engines": {
2390 | "node": ">=8"
2391 | }
2392 | },
2393 | "node_modules/string-width/node_modules/strip-ansi": {
2394 | "version": "6.0.1",
2395 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2396 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2397 | "dev": true,
2398 | "dependencies": {
2399 | "ansi-regex": "^5.0.1"
2400 | },
2401 | "engines": {
2402 | "node": ">=8"
2403 | }
2404 | },
2405 | "node_modules/string.prototype.trim": {
2406 | "version": "1.2.8",
2407 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
2408 | "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
2409 | "dev": true,
2410 | "dependencies": {
2411 | "call-bind": "^1.0.2",
2412 | "define-properties": "^1.2.0",
2413 | "es-abstract": "^1.22.1"
2414 | },
2415 | "engines": {
2416 | "node": ">= 0.4"
2417 | },
2418 | "funding": {
2419 | "url": "https://github.com/sponsors/ljharb"
2420 | }
2421 | },
2422 | "node_modules/string.prototype.trimend": {
2423 | "version": "1.0.7",
2424 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
2425 | "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
2426 | "dev": true,
2427 | "dependencies": {
2428 | "call-bind": "^1.0.2",
2429 | "define-properties": "^1.2.0",
2430 | "es-abstract": "^1.22.1"
2431 | },
2432 | "funding": {
2433 | "url": "https://github.com/sponsors/ljharb"
2434 | }
2435 | },
2436 | "node_modules/string.prototype.trimstart": {
2437 | "version": "1.0.7",
2438 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
2439 | "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
2440 | "dev": true,
2441 | "dependencies": {
2442 | "call-bind": "^1.0.2",
2443 | "define-properties": "^1.2.0",
2444 | "es-abstract": "^1.22.1"
2445 | },
2446 | "funding": {
2447 | "url": "https://github.com/sponsors/ljharb"
2448 | }
2449 | },
2450 | "node_modules/strip-ansi": {
2451 | "version": "5.2.0",
2452 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2453 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2454 | "dev": true,
2455 | "dependencies": {
2456 | "ansi-regex": "^4.1.0"
2457 | },
2458 | "engines": {
2459 | "node": ">=6"
2460 | }
2461 | },
2462 | "node_modules/strip-bom": {
2463 | "version": "3.0.0",
2464 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2465 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
2466 | "dev": true,
2467 | "engines": {
2468 | "node": ">=4"
2469 | }
2470 | },
2471 | "node_modules/strip-json-comments": {
2472 | "version": "3.1.1",
2473 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
2474 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
2475 | "dev": true,
2476 | "engines": {
2477 | "node": ">=8"
2478 | },
2479 | "funding": {
2480 | "url": "https://github.com/sponsors/sindresorhus"
2481 | }
2482 | },
2483 | "node_modules/supports-color": {
2484 | "version": "5.5.0",
2485 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2486 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2487 | "dev": true,
2488 | "dependencies": {
2489 | "has-flag": "^3.0.0"
2490 | },
2491 | "engines": {
2492 | "node": ">=4"
2493 | }
2494 | },
2495 | "node_modules/supports-preserve-symlinks-flag": {
2496 | "version": "1.0.0",
2497 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2498 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2499 | "dev": true,
2500 | "engines": {
2501 | "node": ">= 0.4"
2502 | },
2503 | "funding": {
2504 | "url": "https://github.com/sponsors/ljharb"
2505 | }
2506 | },
2507 | "node_modules/table": {
2508 | "version": "5.4.6",
2509 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
2510 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
2511 | "dev": true,
2512 | "dependencies": {
2513 | "ajv": "^6.10.2",
2514 | "lodash": "^4.17.14",
2515 | "slice-ansi": "^2.1.0",
2516 | "string-width": "^3.0.0"
2517 | },
2518 | "engines": {
2519 | "node": ">=6.0.0"
2520 | }
2521 | },
2522 | "node_modules/table/node_modules/emoji-regex": {
2523 | "version": "7.0.3",
2524 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2525 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2526 | "dev": true
2527 | },
2528 | "node_modules/table/node_modules/is-fullwidth-code-point": {
2529 | "version": "2.0.0",
2530 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2531 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
2532 | "dev": true,
2533 | "engines": {
2534 | "node": ">=4"
2535 | }
2536 | },
2537 | "node_modules/table/node_modules/string-width": {
2538 | "version": "3.1.0",
2539 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2540 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2541 | "dev": true,
2542 | "dependencies": {
2543 | "emoji-regex": "^7.0.1",
2544 | "is-fullwidth-code-point": "^2.0.0",
2545 | "strip-ansi": "^5.1.0"
2546 | },
2547 | "engines": {
2548 | "node": ">=6"
2549 | }
2550 | },
2551 | "node_modules/text-table": {
2552 | "version": "0.2.0",
2553 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2554 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
2555 | "dev": true
2556 | },
2557 | "node_modules/through": {
2558 | "version": "2.3.8",
2559 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2560 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
2561 | "dev": true
2562 | },
2563 | "node_modules/tmp": {
2564 | "version": "0.0.33",
2565 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
2566 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
2567 | "dev": true,
2568 | "dependencies": {
2569 | "os-tmpdir": "~1.0.2"
2570 | },
2571 | "engines": {
2572 | "node": ">=0.6.0"
2573 | }
2574 | },
2575 | "node_modules/tsconfig-paths": {
2576 | "version": "3.15.0",
2577 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
2578 | "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
2579 | "dev": true,
2580 | "dependencies": {
2581 | "@types/json5": "^0.0.29",
2582 | "json5": "^1.0.2",
2583 | "minimist": "^1.2.6",
2584 | "strip-bom": "^3.0.0"
2585 | }
2586 | },
2587 | "node_modules/tslib": {
2588 | "version": "1.14.1",
2589 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
2590 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
2591 | "dev": true
2592 | },
2593 | "node_modules/type-check": {
2594 | "version": "0.3.2",
2595 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2596 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
2597 | "dev": true,
2598 | "dependencies": {
2599 | "prelude-ls": "~1.1.2"
2600 | },
2601 | "engines": {
2602 | "node": ">= 0.8.0"
2603 | }
2604 | },
2605 | "node_modules/type-fest": {
2606 | "version": "0.8.1",
2607 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2608 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2609 | "dev": true,
2610 | "engines": {
2611 | "node": ">=8"
2612 | }
2613 | },
2614 | "node_modules/typed-array-buffer": {
2615 | "version": "1.0.1",
2616 | "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz",
2617 | "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==",
2618 | "dev": true,
2619 | "dependencies": {
2620 | "call-bind": "^1.0.6",
2621 | "es-errors": "^1.3.0",
2622 | "is-typed-array": "^1.1.13"
2623 | },
2624 | "engines": {
2625 | "node": ">= 0.4"
2626 | }
2627 | },
2628 | "node_modules/typed-array-byte-length": {
2629 | "version": "1.0.0",
2630 | "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
2631 | "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
2632 | "dev": true,
2633 | "dependencies": {
2634 | "call-bind": "^1.0.2",
2635 | "for-each": "^0.3.3",
2636 | "has-proto": "^1.0.1",
2637 | "is-typed-array": "^1.1.10"
2638 | },
2639 | "engines": {
2640 | "node": ">= 0.4"
2641 | },
2642 | "funding": {
2643 | "url": "https://github.com/sponsors/ljharb"
2644 | }
2645 | },
2646 | "node_modules/typed-array-byte-offset": {
2647 | "version": "1.0.0",
2648 | "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
2649 | "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
2650 | "dev": true,
2651 | "dependencies": {
2652 | "available-typed-arrays": "^1.0.5",
2653 | "call-bind": "^1.0.2",
2654 | "for-each": "^0.3.3",
2655 | "has-proto": "^1.0.1",
2656 | "is-typed-array": "^1.1.10"
2657 | },
2658 | "engines": {
2659 | "node": ">= 0.4"
2660 | },
2661 | "funding": {
2662 | "url": "https://github.com/sponsors/ljharb"
2663 | }
2664 | },
2665 | "node_modules/typed-array-length": {
2666 | "version": "1.0.4",
2667 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
2668 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
2669 | "dev": true,
2670 | "dependencies": {
2671 | "call-bind": "^1.0.2",
2672 | "for-each": "^0.3.3",
2673 | "is-typed-array": "^1.1.9"
2674 | },
2675 | "funding": {
2676 | "url": "https://github.com/sponsors/ljharb"
2677 | }
2678 | },
2679 | "node_modules/unbox-primitive": {
2680 | "version": "1.0.2",
2681 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
2682 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
2683 | "dev": true,
2684 | "dependencies": {
2685 | "call-bind": "^1.0.2",
2686 | "has-bigints": "^1.0.2",
2687 | "has-symbols": "^1.0.3",
2688 | "which-boxed-primitive": "^1.0.2"
2689 | },
2690 | "funding": {
2691 | "url": "https://github.com/sponsors/ljharb"
2692 | }
2693 | },
2694 | "node_modules/uri-js": {
2695 | "version": "4.4.1",
2696 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2697 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2698 | "dev": true,
2699 | "dependencies": {
2700 | "punycode": "^2.1.0"
2701 | }
2702 | },
2703 | "node_modules/v8-compile-cache": {
2704 | "version": "2.4.0",
2705 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
2706 | "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
2707 | "dev": true
2708 | },
2709 | "node_modules/which": {
2710 | "version": "1.3.1",
2711 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
2712 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
2713 | "dev": true,
2714 | "dependencies": {
2715 | "isexe": "^2.0.0"
2716 | },
2717 | "bin": {
2718 | "which": "bin/which"
2719 | }
2720 | },
2721 | "node_modules/which-boxed-primitive": {
2722 | "version": "1.0.2",
2723 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
2724 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
2725 | "dev": true,
2726 | "dependencies": {
2727 | "is-bigint": "^1.0.1",
2728 | "is-boolean-object": "^1.1.0",
2729 | "is-number-object": "^1.0.4",
2730 | "is-string": "^1.0.5",
2731 | "is-symbol": "^1.0.3"
2732 | },
2733 | "funding": {
2734 | "url": "https://github.com/sponsors/ljharb"
2735 | }
2736 | },
2737 | "node_modules/which-typed-array": {
2738 | "version": "1.1.14",
2739 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
2740 | "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
2741 | "dev": true,
2742 | "dependencies": {
2743 | "available-typed-arrays": "^1.0.6",
2744 | "call-bind": "^1.0.5",
2745 | "for-each": "^0.3.3",
2746 | "gopd": "^1.0.1",
2747 | "has-tostringtag": "^1.0.1"
2748 | },
2749 | "engines": {
2750 | "node": ">= 0.4"
2751 | },
2752 | "funding": {
2753 | "url": "https://github.com/sponsors/ljharb"
2754 | }
2755 | },
2756 | "node_modules/word-wrap": {
2757 | "version": "1.2.5",
2758 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
2759 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
2760 | "dev": true,
2761 | "engines": {
2762 | "node": ">=0.10.0"
2763 | }
2764 | },
2765 | "node_modules/wrappy": {
2766 | "version": "1.0.2",
2767 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2768 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2769 | "dev": true
2770 | },
2771 | "node_modules/write": {
2772 | "version": "1.0.3",
2773 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
2774 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
2775 | "dev": true,
2776 | "dependencies": {
2777 | "mkdirp": "^0.5.1"
2778 | },
2779 | "engines": {
2780 | "node": ">=4"
2781 | }
2782 | }
2783 | }
2784 | }
2785 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "speed-cloudflare-cli",
3 | "version": "2.0.3",
4 | "description": "Measure the speed and consistency of your internet connection using speed.cloudflare.com",
5 | "main": "cli.js",
6 | "bin": {
7 | "speed-cloudflare-cli": "./cli.js"
8 | },
9 | "scripts": {
10 | "test": "echo \"Error: no test specified\" && exit 1"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/KNawm/speed-cloudflare-cli.git"
15 | },
16 | "keywords": [
17 | "bandwidth",
18 | "connection",
19 | "download",
20 | "internet",
21 | "latency",
22 | "network",
23 | "ping",
24 | "speed",
25 | "speedtest",
26 | "test",
27 | "upload"
28 | ],
29 | "author": "Tomás Arias ",
30 | "license": "MIT",
31 | "bugs": {
32 | "url": "https://github.com/KNawm/speed-cloudflare-cli/issues"
33 | },
34 | "homepage": "https://github.com/KNawm/speed-cloudflare-cli#readme",
35 | "devDependencies": {
36 | "eslint": "^6.8.0",
37 | "eslint-config-airbnb-base": "^14.1.0",
38 | "eslint-config-prettier": "^6.11.0",
39 | "eslint-plugin-import": "^2.20.2",
40 | "eslint-plugin-prettier": "^3.1.3",
41 | "prettier": "^2.0.5"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/stats.js:
--------------------------------------------------------------------------------
1 | function average(values) {
2 | let total = 0;
3 |
4 | for (let i = 0; i < values.length; i += 1) {
5 | total += values[i];
6 | }
7 |
8 | return total / values.length;
9 | }
10 |
11 | function median(values) {
12 | const half = Math.floor(values.length / 2);
13 |
14 | values.sort((a, b) => a - b);
15 |
16 | if (values.length % 2) return values[half];
17 |
18 | return (values[half - 1] + values[half]) / 2;
19 | }
20 |
21 | function quartile(values, percentile) {
22 | values.sort((a, b) => a - b);
23 | const pos = (values.length - 1) * percentile;
24 | const base = Math.floor(pos);
25 | const rest = pos - base;
26 |
27 | if (values[base + 1] !== undefined) {
28 | return values[base] + rest * (values[base + 1] - values[base]);
29 | }
30 |
31 | return values[base];
32 | }
33 |
34 | function jitter(values) {
35 | // Average distance between consecutive latency measurements...
36 | let jitters = [];
37 |
38 | for (let i = 0; i < values.length - 1; i += 1) {
39 | jitters.push(Math.abs(values[i] - values[i+1]));
40 | }
41 |
42 | return average(jitters);
43 | }
44 |
45 | exports.average = average;
46 | exports.median = median;
47 | exports.quartile = quartile;
48 | exports.jitter = jitter;
49 |
--------------------------------------------------------------------------------