├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── LICENSE.md
├── README.md
├── config
├── bot.json
└── keys.template
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── src
├── index.ts
├── shard.ts
└── util
│ ├── isInterface.ts
│ └── logger.ts
├── tsconfig.json
└── windows_ez_start.bat
/.eslintignore:
--------------------------------------------------------------------------------
1 | build/
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "parserOptions": {
3 | "ecmaVersion": 2021
4 | },
5 | "env": {
6 | "es6": true,
7 | "node": true,
8 | "es2021": true
9 | },
10 | "parser": "@typescript-eslint/parser",
11 | "plugins": [
12 | "@typescript-eslint",
13 | "import"
14 | ],
15 | "extends": [
16 | "eslint:recommended",
17 | "plugin:@typescript-eslint/eslint-recommended",
18 | "plugin:@typescript-eslint/recommended"
19 | ],
20 | "rules": {
21 | "no-console": "off",
22 | "indent": [
23 | "warn",
24 | 2,
25 | {
26 | "SwitchCase": 1
27 | }
28 | ],
29 | "quotes": [
30 | "warn",
31 | "backtick"
32 | ],
33 | "semi": "off",
34 | "space-before-blocks": [
35 | "warn",
36 | {
37 | "functions": "always",
38 | "keywords": "always",
39 | "classes": "always"
40 | }
41 | ],
42 | "prefer-const": [
43 | "warn",
44 | {
45 | "destructuring": "any",
46 | "ignoreReadBeforeAssign": false
47 | }
48 | ],
49 | "no-unused-vars": "off",
50 | "no-var": "error",
51 | "no-empty": "off",
52 | "eqeqeq": "error",
53 | "no-use-before-define": [
54 | "error",
55 | {
56 | "functions": false,
57 | "classes": false
58 | }
59 | ],
60 | "@typescript-eslint/no-unused-vars": "warn",
61 | "@typescript-eslint/semi": "warn"
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/node
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=node
4 |
5 | # Typescript built files
6 | build/
7 |
8 | .vscode/
9 |
10 | ### Node ###
11 | # Logs
12 | logs
13 | *.log
14 | npm-debug.log*
15 | yarn-debug.log*
16 | yarn-error.log*
17 | lerna-debug.log*
18 | .pnpm-debug.log*
19 |
20 | # Diagnostic reports (https://nodejs.org/api/report.html)
21 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
22 |
23 | # Runtime data
24 | pids
25 | *.pid
26 | *.seed
27 | *.pid.lock
28 |
29 | # Directory for instrumented libs generated by jscoverage/JSCover
30 | lib-cov
31 |
32 | # Coverage directory used by tools like istanbul
33 | coverage
34 | *.lcov
35 |
36 | # nyc test coverage
37 | .nyc_output
38 |
39 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
40 | .grunt
41 |
42 | # Bower dependency directory (https://bower.io/)
43 | bower_components
44 |
45 | # node-waf configuration
46 | .lock-wscript
47 |
48 | # Compiled binary addons (https://nodejs.org/api/addons.html)
49 | build/Release
50 |
51 | # Dependency directories
52 | node_modules/
53 | jspm_packages/
54 |
55 | # Snowpack dependency directory (https://snowpack.dev/)
56 | web_modules/
57 |
58 | # TypeScript cache
59 | *.tsbuildinfo
60 |
61 | # Optional npm cache directory
62 | .npm
63 |
64 | # Optional eslint cache
65 | .eslintcache
66 |
67 | # Optional stylelint cache
68 | .stylelintcache
69 |
70 | # Microbundle cache
71 | .rpt2_cache/
72 | .rts2_cache_cjs/
73 | .rts2_cache_es/
74 | .rts2_cache_umd/
75 |
76 | # Optional REPL history
77 | .node_repl_history
78 |
79 | # Output of 'npm pack'
80 | *.tgz
81 |
82 | # Yarn Integrity file
83 | .yarn-integrity
84 |
85 | # dotenv environment variable files
86 | .env
87 | .env.development.local
88 | .env.test.local
89 | .env.production.local
90 | .env.local
91 |
92 | # parcel-bundler cache (https://parceljs.org/)
93 | .cache
94 | .parcel-cache
95 |
96 | # Next.js build output
97 | .next
98 | out
99 |
100 | # Nuxt.js build / generate output
101 | .nuxt
102 | dist
103 |
104 | # Gatsby files
105 | .cache/
106 | # Comment in the public line in if your project uses Gatsby and not Next.js
107 | # https://nextjs.org/blog/next-9-1#public-directory-support
108 | # public
109 |
110 | # vuepress build output
111 | .vuepress/dist
112 |
113 | # vuepress v2.x temp and cache directory
114 | .temp
115 |
116 | # Docusaurus cache and generated files
117 | .docusaurus
118 |
119 | # Serverless directories
120 | .serverless/
121 |
122 | # FuseBox cache
123 | .fusebox/
124 |
125 | # DynamoDB Local files
126 | .dynamodb/
127 |
128 | # TernJS port file
129 | .tern-port
130 |
131 | # Stores VSCode versions used for testing VSCode extensions
132 | .vscode-test
133 |
134 | # yarn v2
135 | .yarn/cache
136 | .yarn/unplugged
137 | .yarn/build-state.yml
138 | .yarn/install-state.gz
139 | .pnp.*
140 |
141 | ### Node Patch ###
142 | # Serverless Webpack directories
143 | .webpack/
144 |
145 | # Optional stylelint cache
146 |
147 | # SvelteKit build / generate output
148 | .svelte-kit
149 |
150 | # End of https://www.toptal.com/developers/gitignore/api/node
151 |
152 |
153 | # Vector: Auto-generated Folders
154 | data
155 | .local
156 |
157 | # Vector: Private Files
158 | config/keys.json
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) [2022] [Kyle Edwards]
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 |

3 |
Vector
4 |
A Discord bot for advanced moderation & server management
5 |

6 |
7 |
8 |
This project has been shelved.
9 |
More information: https://github.com/JackDotJS/vector-bot/issues/15
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/config/bot.json:
--------------------------------------------------------------------------------
1 | {
2 | "loginLimit": {
3 | "warning": 5,
4 | "shutdown": 30,
5 | "absolute": 999
6 | }
7 | }
--------------------------------------------------------------------------------
/config/keys.template:
--------------------------------------------------------------------------------
1 | {
2 | "discord": ""
3 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vector-bot",
3 | "version": "3.0.0",
4 | "description": "A Discord bot for advanced moderation & server management",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "build": "tsc",
8 | "start": "node build/src/index.js",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+ssh://git@github.com/JackDotJS/vector-bot.git"
14 | },
15 | "author": "JackDotJS",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/JackDotJS/vector-bot/issues"
19 | },
20 | "homepage": "https://github.com/JackDotJS/vector-bot#readme",
21 | "devDependencies": {
22 | "@types/luxon": "^2.3.2",
23 | "@types/node": "^18.0.0",
24 | "@typescript-eslint/eslint-plugin": "^5.27.0",
25 | "@typescript-eslint/parser": "^5.27.0",
26 | "eslint": "^8.17.0",
27 | "eslint-plugin-import": "^2.26.0",
28 | "typescript": "^4.7.4"
29 | },
30 | "dependencies": {
31 | "chalk": "4.x.x",
32 | "compressing": "^1.6.0",
33 | "discord.js": "^13.8.1",
34 | "luxon": "^2.4.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@types/luxon': ^2.3.2
5 | '@types/node': ^18.0.0
6 | '@typescript-eslint/eslint-plugin': ^5.27.0
7 | '@typescript-eslint/parser': ^5.27.0
8 | chalk: 4.x.x
9 | compressing: ^1.6.0
10 | discord.js: ^13.8.1
11 | eslint: ^8.17.0
12 | eslint-plugin-import: ^2.26.0
13 | luxon: ^2.4.0
14 | typescript: ^4.7.4
15 |
16 | dependencies:
17 | chalk: 4.1.2
18 | compressing: 1.6.0
19 | discord.js: 13.8.1
20 | luxon: 2.4.0
21 |
22 | devDependencies:
23 | '@types/luxon': 2.3.2
24 | '@types/node': 18.0.0
25 | '@typescript-eslint/eslint-plugin': 5.27.0_55jjgj7njb4nbofoh2bh457ivy
26 | '@typescript-eslint/parser': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
27 | eslint: 8.17.0
28 | eslint-plugin-import: 2.26.0_er3f6f6cekbq4lwnvn7afiwhn4
29 | typescript: 4.7.4
30 |
31 | packages:
32 |
33 | /@discordjs/builders/0.14.0:
34 | resolution: {integrity: sha512-+fqLIqa9wN3R+kvlld8sgG0nt04BAZxdCDP4t2qZ9TJsquLWA+xMtT8Waibb3d4li4AQS+IOfjiHAznv/dhHgQ==}
35 | engines: {node: '>=16.9.0'}
36 | dependencies:
37 | '@sapphire/shapeshift': 3.3.1
38 | '@sindresorhus/is': 4.6.0
39 | discord-api-types: 0.33.5
40 | fast-deep-equal: 3.1.3
41 | ts-mixer: 6.0.1
42 | tslib: 2.4.0
43 | dev: false
44 |
45 | /@discordjs/collection/0.7.0:
46 | resolution: {integrity: sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==}
47 | engines: {node: '>=16.9.0'}
48 | dev: false
49 |
50 | /@eslint/eslintrc/1.3.0:
51 | resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==}
52 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
53 | dependencies:
54 | ajv: 6.12.6
55 | debug: 4.3.4
56 | espree: 9.3.2
57 | globals: 13.15.0
58 | ignore: 5.2.0
59 | import-fresh: 3.3.0
60 | js-yaml: 4.1.0
61 | minimatch: 3.1.2
62 | strip-json-comments: 3.1.1
63 | transitivePeerDependencies:
64 | - supports-color
65 | dev: true
66 |
67 | /@humanwhocodes/config-array/0.9.5:
68 | resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==}
69 | engines: {node: '>=10.10.0'}
70 | dependencies:
71 | '@humanwhocodes/object-schema': 1.2.1
72 | debug: 4.3.4
73 | minimatch: 3.1.2
74 | transitivePeerDependencies:
75 | - supports-color
76 | dev: true
77 |
78 | /@humanwhocodes/object-schema/1.2.1:
79 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
80 | dev: true
81 |
82 | /@nodelib/fs.scandir/2.1.5:
83 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
84 | engines: {node: '>= 8'}
85 | dependencies:
86 | '@nodelib/fs.stat': 2.0.5
87 | run-parallel: 1.2.0
88 | dev: true
89 |
90 | /@nodelib/fs.stat/2.0.5:
91 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
92 | engines: {node: '>= 8'}
93 | dev: true
94 |
95 | /@nodelib/fs.walk/1.2.8:
96 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
97 | engines: {node: '>= 8'}
98 | dependencies:
99 | '@nodelib/fs.scandir': 2.1.5
100 | fastq: 1.13.0
101 | dev: true
102 |
103 | /@sapphire/async-queue/1.3.1:
104 | resolution: {integrity: sha512-FFTlPOWZX1kDj9xCAsRzH5xEJfawg1lNoYAA+ecOWJMHOfiZYb1uXOI3ne9U4UILSEPwfE68p3T9wUHwIQfR0g==}
105 | engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
106 | dev: false
107 |
108 | /@sapphire/shapeshift/3.3.1:
109 | resolution: {integrity: sha512-PB2e5JHWIMRz9HiN/sIWcNIzXjYvzc3OmeRHYICXreKhetDYf4Zufypr8A48Z/XZLzbMqIka6uoR+2dH58nksg==}
110 | engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
111 | dev: false
112 |
113 | /@sindresorhus/is/4.6.0:
114 | resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
115 | engines: {node: '>=10'}
116 | dev: false
117 |
118 | /@types/json-schema/7.0.11:
119 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
120 | dev: true
121 |
122 | /@types/json5/0.0.29:
123 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
124 | dev: true
125 |
126 | /@types/luxon/2.3.2:
127 | resolution: {integrity: sha512-WOehptuhKIXukSUUkRgGbj2c997Uv/iUgYgII8U7XLJqq9W2oF0kQ6frEznRQbdurioz+L/cdaIm4GutTQfgmA==}
128 | dev: true
129 |
130 | /@types/node-fetch/2.6.1:
131 | resolution: {integrity: sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==}
132 | dependencies:
133 | '@types/node': 18.0.0
134 | form-data: 3.0.1
135 | dev: false
136 |
137 | /@types/node/18.0.0:
138 | resolution: {integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==}
139 |
140 | /@types/ws/8.5.3:
141 | resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
142 | dependencies:
143 | '@types/node': 18.0.0
144 | dev: false
145 |
146 | /@typescript-eslint/eslint-plugin/5.27.0_55jjgj7njb4nbofoh2bh457ivy:
147 | resolution: {integrity: sha512-DDrIA7GXtmHXr1VCcx9HivA39eprYBIFxbQEHI6NyraRDxCGpxAFiYQAT/1Y0vh1C+o2vfBiy4IuPoXxtTZCAQ==}
148 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
149 | peerDependencies:
150 | '@typescript-eslint/parser': ^5.0.0
151 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
152 | typescript: '*'
153 | peerDependenciesMeta:
154 | typescript:
155 | optional: true
156 | dependencies:
157 | '@typescript-eslint/parser': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
158 | '@typescript-eslint/scope-manager': 5.27.0
159 | '@typescript-eslint/type-utils': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
160 | '@typescript-eslint/utils': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
161 | debug: 4.3.4
162 | eslint: 8.17.0
163 | functional-red-black-tree: 1.0.1
164 | ignore: 5.2.0
165 | regexpp: 3.2.0
166 | semver: 7.3.7
167 | tsutils: 3.21.0_typescript@4.7.4
168 | typescript: 4.7.4
169 | transitivePeerDependencies:
170 | - supports-color
171 | dev: true
172 |
173 | /@typescript-eslint/parser/5.27.0_n4lrrl552kqf5nk4rgej5xdcha:
174 | resolution: {integrity: sha512-8oGjQF46c52l7fMiPPvX4It3u3V3JipssqDfHQ2hcR0AeR8Zge+OYyKUCm5b70X72N1qXt0qgHenwN6Gc2SXZA==}
175 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
176 | peerDependencies:
177 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
178 | typescript: '*'
179 | peerDependenciesMeta:
180 | typescript:
181 | optional: true
182 | dependencies:
183 | '@typescript-eslint/scope-manager': 5.27.0
184 | '@typescript-eslint/types': 5.27.0
185 | '@typescript-eslint/typescript-estree': 5.27.0_typescript@4.7.4
186 | debug: 4.3.4
187 | eslint: 8.17.0
188 | typescript: 4.7.4
189 | transitivePeerDependencies:
190 | - supports-color
191 | dev: true
192 |
193 | /@typescript-eslint/scope-manager/5.27.0:
194 | resolution: {integrity: sha512-VnykheBQ/sHd1Vt0LJ1JLrMH1GzHO+SzX6VTXuStISIsvRiurue/eRkTqSrG0CexHQgKG8shyJfR4o5VYioB9g==}
195 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
196 | dependencies:
197 | '@typescript-eslint/types': 5.27.0
198 | '@typescript-eslint/visitor-keys': 5.27.0
199 | dev: true
200 |
201 | /@typescript-eslint/type-utils/5.27.0_n4lrrl552kqf5nk4rgej5xdcha:
202 | resolution: {integrity: sha512-vpTvRRchaf628Hb/Xzfek+85o//zEUotr1SmexKvTfs7czXfYjXVT/a5yDbpzLBX1rhbqxjDdr1Gyo0x1Fc64g==}
203 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
204 | peerDependencies:
205 | eslint: '*'
206 | typescript: '*'
207 | peerDependenciesMeta:
208 | typescript:
209 | optional: true
210 | dependencies:
211 | '@typescript-eslint/utils': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
212 | debug: 4.3.4
213 | eslint: 8.17.0
214 | tsutils: 3.21.0_typescript@4.7.4
215 | typescript: 4.7.4
216 | transitivePeerDependencies:
217 | - supports-color
218 | dev: true
219 |
220 | /@typescript-eslint/types/5.27.0:
221 | resolution: {integrity: sha512-lY6C7oGm9a/GWhmUDOs3xAVRz4ty/XKlQ2fOLr8GAIryGn0+UBOoJDWyHer3UgrHkenorwvBnphhP+zPmzmw0A==}
222 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
223 | dev: true
224 |
225 | /@typescript-eslint/typescript-estree/5.27.0_typescript@4.7.4:
226 | resolution: {integrity: sha512-QywPMFvgZ+MHSLRofLI7BDL+UczFFHyj0vF5ibeChDAJgdTV8k4xgEwF0geFhVlPc1p8r70eYewzpo6ps+9LJQ==}
227 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
228 | peerDependencies:
229 | typescript: '*'
230 | peerDependenciesMeta:
231 | typescript:
232 | optional: true
233 | dependencies:
234 | '@typescript-eslint/types': 5.27.0
235 | '@typescript-eslint/visitor-keys': 5.27.0
236 | debug: 4.3.4
237 | globby: 11.1.0
238 | is-glob: 4.0.3
239 | semver: 7.3.7
240 | tsutils: 3.21.0_typescript@4.7.4
241 | typescript: 4.7.4
242 | transitivePeerDependencies:
243 | - supports-color
244 | dev: true
245 |
246 | /@typescript-eslint/utils/5.27.0_n4lrrl552kqf5nk4rgej5xdcha:
247 | resolution: {integrity: sha512-nZvCrkIJppym7cIbP3pOwIkAefXOmfGPnCM0LQfzNaKxJHI6VjI8NC662uoiPlaf5f6ymkTy9C3NQXev2mdXmA==}
248 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
249 | peerDependencies:
250 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
251 | dependencies:
252 | '@types/json-schema': 7.0.11
253 | '@typescript-eslint/scope-manager': 5.27.0
254 | '@typescript-eslint/types': 5.27.0
255 | '@typescript-eslint/typescript-estree': 5.27.0_typescript@4.7.4
256 | eslint: 8.17.0
257 | eslint-scope: 5.1.1
258 | eslint-utils: 3.0.0_eslint@8.17.0
259 | transitivePeerDependencies:
260 | - supports-color
261 | - typescript
262 | dev: true
263 |
264 | /@typescript-eslint/visitor-keys/5.27.0:
265 | resolution: {integrity: sha512-46cYrteA2MrIAjv9ai44OQDUoCZyHeGIc4lsjCUX2WT6r4C+kidz1bNiR4017wHOPUythYeH+Sc7/cFP97KEAA==}
266 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
267 | dependencies:
268 | '@typescript-eslint/types': 5.27.0
269 | eslint-visitor-keys: 3.3.0
270 | dev: true
271 |
272 | /acorn-jsx/5.3.2_acorn@8.7.1:
273 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
274 | peerDependencies:
275 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
276 | dependencies:
277 | acorn: 8.7.1
278 | dev: true
279 |
280 | /acorn/8.7.1:
281 | resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==}
282 | engines: {node: '>=0.4.0'}
283 | hasBin: true
284 | dev: true
285 |
286 | /ajv/6.12.6:
287 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
288 | dependencies:
289 | fast-deep-equal: 3.1.3
290 | fast-json-stable-stringify: 2.1.0
291 | json-schema-traverse: 0.4.1
292 | uri-js: 4.4.1
293 | dev: true
294 |
295 | /ansi-regex/5.0.1:
296 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
297 | engines: {node: '>=8'}
298 | dev: true
299 |
300 | /ansi-styles/4.3.0:
301 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
302 | engines: {node: '>=8'}
303 | dependencies:
304 | color-convert: 2.0.1
305 |
306 | /argparse/2.0.1:
307 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
308 | dev: true
309 |
310 | /array-includes/3.1.5:
311 | resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==}
312 | engines: {node: '>= 0.4'}
313 | dependencies:
314 | call-bind: 1.0.2
315 | define-properties: 1.1.4
316 | es-abstract: 1.20.1
317 | get-intrinsic: 1.1.1
318 | is-string: 1.0.7
319 | dev: true
320 |
321 | /array-union/2.1.0:
322 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
323 | engines: {node: '>=8'}
324 | dev: true
325 |
326 | /array.prototype.flat/1.3.0:
327 | resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==}
328 | engines: {node: '>= 0.4'}
329 | dependencies:
330 | call-bind: 1.0.2
331 | define-properties: 1.1.4
332 | es-abstract: 1.20.1
333 | es-shim-unscopables: 1.0.0
334 | dev: true
335 |
336 | /asynckit/0.4.0:
337 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
338 | dev: false
339 |
340 | /balanced-match/1.0.2:
341 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
342 | dev: true
343 |
344 | /bl/1.2.3:
345 | resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
346 | dependencies:
347 | readable-stream: 2.3.7
348 | safe-buffer: 5.2.1
349 | dev: false
350 |
351 | /brace-expansion/1.1.11:
352 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
353 | dependencies:
354 | balanced-match: 1.0.2
355 | concat-map: 0.0.1
356 | dev: true
357 |
358 | /braces/3.0.2:
359 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
360 | engines: {node: '>=8'}
361 | dependencies:
362 | fill-range: 7.0.1
363 | dev: true
364 |
365 | /buffer-alloc-unsafe/1.1.0:
366 | resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
367 | dev: false
368 |
369 | /buffer-alloc/1.2.0:
370 | resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
371 | dependencies:
372 | buffer-alloc-unsafe: 1.1.0
373 | buffer-fill: 1.0.0
374 | dev: false
375 |
376 | /buffer-crc32/0.2.13:
377 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
378 | dev: false
379 |
380 | /buffer-fill/1.0.0:
381 | resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
382 | dev: false
383 |
384 | /call-bind/1.0.2:
385 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
386 | dependencies:
387 | function-bind: 1.1.1
388 | get-intrinsic: 1.1.1
389 | dev: true
390 |
391 | /callsites/3.1.0:
392 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
393 | engines: {node: '>=6'}
394 | dev: true
395 |
396 | /chalk/4.1.2:
397 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
398 | engines: {node: '>=10'}
399 | dependencies:
400 | ansi-styles: 4.3.0
401 | supports-color: 7.2.0
402 |
403 | /color-convert/2.0.1:
404 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
405 | engines: {node: '>=7.0.0'}
406 | dependencies:
407 | color-name: 1.1.4
408 |
409 | /color-name/1.1.4:
410 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
411 |
412 | /combined-stream/1.0.8:
413 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
414 | engines: {node: '>= 0.8'}
415 | dependencies:
416 | delayed-stream: 1.0.0
417 | dev: false
418 |
419 | /compressing/1.6.0:
420 | resolution: {integrity: sha512-tWI4kJAbYLqoL+YHlMf9+EvIb9LA0WUm49C17KBMVa+JxpCfvHdiXqhE6lepFTuCghu0hDRZNd0Q+bGZvFDHAQ==}
421 | engines: {node: '>= 4.0.0'}
422 | dependencies:
423 | flushwritable: 1.0.0
424 | get-ready: 1.0.0
425 | iconv-lite: 0.5.2
426 | mkdirp: 0.5.6
427 | pump: 3.0.0
428 | streamifier: 0.1.1
429 | tar-stream: 1.6.2
430 | yauzl: 2.10.0
431 | yazl: 2.5.1
432 | dev: false
433 |
434 | /concat-map/0.0.1:
435 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
436 | dev: true
437 |
438 | /core-util-is/1.0.3:
439 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
440 | dev: false
441 |
442 | /cross-spawn/7.0.3:
443 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
444 | engines: {node: '>= 8'}
445 | dependencies:
446 | path-key: 3.1.1
447 | shebang-command: 2.0.0
448 | which: 2.0.2
449 | dev: true
450 |
451 | /debug/2.6.9:
452 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
453 | peerDependencies:
454 | supports-color: '*'
455 | peerDependenciesMeta:
456 | supports-color:
457 | optional: true
458 | dependencies:
459 | ms: 2.0.0
460 | dev: true
461 |
462 | /debug/3.2.7:
463 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
464 | peerDependencies:
465 | supports-color: '*'
466 | peerDependenciesMeta:
467 | supports-color:
468 | optional: true
469 | dependencies:
470 | ms: 2.1.3
471 | dev: true
472 |
473 | /debug/4.3.4:
474 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
475 | engines: {node: '>=6.0'}
476 | peerDependencies:
477 | supports-color: '*'
478 | peerDependenciesMeta:
479 | supports-color:
480 | optional: true
481 | dependencies:
482 | ms: 2.1.2
483 | dev: true
484 |
485 | /deep-is/0.1.4:
486 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
487 | dev: true
488 |
489 | /define-properties/1.1.4:
490 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
491 | engines: {node: '>= 0.4'}
492 | dependencies:
493 | has-property-descriptors: 1.0.0
494 | object-keys: 1.1.1
495 | dev: true
496 |
497 | /delayed-stream/1.0.0:
498 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
499 | engines: {node: '>=0.4.0'}
500 | dev: false
501 |
502 | /dir-glob/3.0.1:
503 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
504 | engines: {node: '>=8'}
505 | dependencies:
506 | path-type: 4.0.0
507 | dev: true
508 |
509 | /discord-api-types/0.33.5:
510 | resolution: {integrity: sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==}
511 | dev: false
512 |
513 | /discord.js/13.8.1:
514 | resolution: {integrity: sha512-jOsD+4tEZWWx0RHVyH+FBcqoTrsL+d5Mm5p+ULQOdU0qSaxhLNkWYig+yDHNZoND7nlkXX3qi+BW+gO5erWylg==}
515 | engines: {node: '>=16.6.0', npm: '>=7.0.0'}
516 | dependencies:
517 | '@discordjs/builders': 0.14.0
518 | '@discordjs/collection': 0.7.0
519 | '@sapphire/async-queue': 1.3.1
520 | '@types/node-fetch': 2.6.1
521 | '@types/ws': 8.5.3
522 | discord-api-types: 0.33.5
523 | form-data: 4.0.0
524 | node-fetch: 2.6.7
525 | ws: 8.7.0
526 | transitivePeerDependencies:
527 | - bufferutil
528 | - encoding
529 | - utf-8-validate
530 | dev: false
531 |
532 | /doctrine/2.1.0:
533 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
534 | engines: {node: '>=0.10.0'}
535 | dependencies:
536 | esutils: 2.0.3
537 | dev: true
538 |
539 | /doctrine/3.0.0:
540 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
541 | engines: {node: '>=6.0.0'}
542 | dependencies:
543 | esutils: 2.0.3
544 | dev: true
545 |
546 | /end-of-stream/1.4.4:
547 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
548 | dependencies:
549 | once: 1.4.0
550 | dev: false
551 |
552 | /es-abstract/1.20.1:
553 | resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==}
554 | engines: {node: '>= 0.4'}
555 | dependencies:
556 | call-bind: 1.0.2
557 | es-to-primitive: 1.2.1
558 | function-bind: 1.1.1
559 | function.prototype.name: 1.1.5
560 | get-intrinsic: 1.1.1
561 | get-symbol-description: 1.0.0
562 | has: 1.0.3
563 | has-property-descriptors: 1.0.0
564 | has-symbols: 1.0.3
565 | internal-slot: 1.0.3
566 | is-callable: 1.2.4
567 | is-negative-zero: 2.0.2
568 | is-regex: 1.1.4
569 | is-shared-array-buffer: 1.0.2
570 | is-string: 1.0.7
571 | is-weakref: 1.0.2
572 | object-inspect: 1.12.2
573 | object-keys: 1.1.1
574 | object.assign: 4.1.2
575 | regexp.prototype.flags: 1.4.3
576 | string.prototype.trimend: 1.0.5
577 | string.prototype.trimstart: 1.0.5
578 | unbox-primitive: 1.0.2
579 | dev: true
580 |
581 | /es-shim-unscopables/1.0.0:
582 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
583 | dependencies:
584 | has: 1.0.3
585 | dev: true
586 |
587 | /es-to-primitive/1.2.1:
588 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
589 | engines: {node: '>= 0.4'}
590 | dependencies:
591 | is-callable: 1.2.4
592 | is-date-object: 1.0.5
593 | is-symbol: 1.0.4
594 | dev: true
595 |
596 | /escape-string-regexp/4.0.0:
597 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
598 | engines: {node: '>=10'}
599 | dev: true
600 |
601 | /eslint-import-resolver-node/0.3.6:
602 | resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==}
603 | dependencies:
604 | debug: 3.2.7
605 | resolve: 1.22.0
606 | transitivePeerDependencies:
607 | - supports-color
608 | dev: true
609 |
610 | /eslint-module-utils/2.7.3_nd4nb6nccnlbwilvit6hlaep3q:
611 | resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==}
612 | engines: {node: '>=4'}
613 | peerDependencies:
614 | '@typescript-eslint/parser': '*'
615 | eslint-import-resolver-node: '*'
616 | eslint-import-resolver-typescript: '*'
617 | eslint-import-resolver-webpack: '*'
618 | peerDependenciesMeta:
619 | '@typescript-eslint/parser':
620 | optional: true
621 | eslint-import-resolver-node:
622 | optional: true
623 | eslint-import-resolver-typescript:
624 | optional: true
625 | eslint-import-resolver-webpack:
626 | optional: true
627 | dependencies:
628 | '@typescript-eslint/parser': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
629 | debug: 3.2.7
630 | eslint-import-resolver-node: 0.3.6
631 | find-up: 2.1.0
632 | transitivePeerDependencies:
633 | - supports-color
634 | dev: true
635 |
636 | /eslint-plugin-import/2.26.0_er3f6f6cekbq4lwnvn7afiwhn4:
637 | resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
638 | engines: {node: '>=4'}
639 | peerDependencies:
640 | '@typescript-eslint/parser': '*'
641 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
642 | peerDependenciesMeta:
643 | '@typescript-eslint/parser':
644 | optional: true
645 | dependencies:
646 | '@typescript-eslint/parser': 5.27.0_n4lrrl552kqf5nk4rgej5xdcha
647 | array-includes: 3.1.5
648 | array.prototype.flat: 1.3.0
649 | debug: 2.6.9
650 | doctrine: 2.1.0
651 | eslint: 8.17.0
652 | eslint-import-resolver-node: 0.3.6
653 | eslint-module-utils: 2.7.3_nd4nb6nccnlbwilvit6hlaep3q
654 | has: 1.0.3
655 | is-core-module: 2.9.0
656 | is-glob: 4.0.3
657 | minimatch: 3.1.2
658 | object.values: 1.1.5
659 | resolve: 1.22.0
660 | tsconfig-paths: 3.14.1
661 | transitivePeerDependencies:
662 | - eslint-import-resolver-typescript
663 | - eslint-import-resolver-webpack
664 | - supports-color
665 | dev: true
666 |
667 | /eslint-scope/5.1.1:
668 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
669 | engines: {node: '>=8.0.0'}
670 | dependencies:
671 | esrecurse: 4.3.0
672 | estraverse: 4.3.0
673 | dev: true
674 |
675 | /eslint-scope/7.1.1:
676 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
677 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
678 | dependencies:
679 | esrecurse: 4.3.0
680 | estraverse: 5.3.0
681 | dev: true
682 |
683 | /eslint-utils/3.0.0_eslint@8.17.0:
684 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
685 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
686 | peerDependencies:
687 | eslint: '>=5'
688 | dependencies:
689 | eslint: 8.17.0
690 | eslint-visitor-keys: 2.1.0
691 | dev: true
692 |
693 | /eslint-visitor-keys/2.1.0:
694 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
695 | engines: {node: '>=10'}
696 | dev: true
697 |
698 | /eslint-visitor-keys/3.3.0:
699 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
700 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
701 | dev: true
702 |
703 | /eslint/8.17.0:
704 | resolution: {integrity: sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==}
705 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
706 | hasBin: true
707 | dependencies:
708 | '@eslint/eslintrc': 1.3.0
709 | '@humanwhocodes/config-array': 0.9.5
710 | ajv: 6.12.6
711 | chalk: 4.1.2
712 | cross-spawn: 7.0.3
713 | debug: 4.3.4
714 | doctrine: 3.0.0
715 | escape-string-regexp: 4.0.0
716 | eslint-scope: 7.1.1
717 | eslint-utils: 3.0.0_eslint@8.17.0
718 | eslint-visitor-keys: 3.3.0
719 | espree: 9.3.2
720 | esquery: 1.4.0
721 | esutils: 2.0.3
722 | fast-deep-equal: 3.1.3
723 | file-entry-cache: 6.0.1
724 | functional-red-black-tree: 1.0.1
725 | glob-parent: 6.0.2
726 | globals: 13.15.0
727 | ignore: 5.2.0
728 | import-fresh: 3.3.0
729 | imurmurhash: 0.1.4
730 | is-glob: 4.0.3
731 | js-yaml: 4.1.0
732 | json-stable-stringify-without-jsonify: 1.0.1
733 | levn: 0.4.1
734 | lodash.merge: 4.6.2
735 | minimatch: 3.1.2
736 | natural-compare: 1.4.0
737 | optionator: 0.9.1
738 | regexpp: 3.2.0
739 | strip-ansi: 6.0.1
740 | strip-json-comments: 3.1.1
741 | text-table: 0.2.0
742 | v8-compile-cache: 2.3.0
743 | transitivePeerDependencies:
744 | - supports-color
745 | dev: true
746 |
747 | /espree/9.3.2:
748 | resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==}
749 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
750 | dependencies:
751 | acorn: 8.7.1
752 | acorn-jsx: 5.3.2_acorn@8.7.1
753 | eslint-visitor-keys: 3.3.0
754 | dev: true
755 |
756 | /esquery/1.4.0:
757 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
758 | engines: {node: '>=0.10'}
759 | dependencies:
760 | estraverse: 5.3.0
761 | dev: true
762 |
763 | /esrecurse/4.3.0:
764 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
765 | engines: {node: '>=4.0'}
766 | dependencies:
767 | estraverse: 5.3.0
768 | dev: true
769 |
770 | /estraverse/4.3.0:
771 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
772 | engines: {node: '>=4.0'}
773 | dev: true
774 |
775 | /estraverse/5.3.0:
776 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
777 | engines: {node: '>=4.0'}
778 | dev: true
779 |
780 | /esutils/2.0.3:
781 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
782 | engines: {node: '>=0.10.0'}
783 | dev: true
784 |
785 | /fast-deep-equal/3.1.3:
786 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
787 |
788 | /fast-glob/3.2.11:
789 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
790 | engines: {node: '>=8.6.0'}
791 | dependencies:
792 | '@nodelib/fs.stat': 2.0.5
793 | '@nodelib/fs.walk': 1.2.8
794 | glob-parent: 5.1.2
795 | merge2: 1.4.1
796 | micromatch: 4.0.5
797 | dev: true
798 |
799 | /fast-json-stable-stringify/2.1.0:
800 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
801 | dev: true
802 |
803 | /fast-levenshtein/2.0.6:
804 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
805 | dev: true
806 |
807 | /fastq/1.13.0:
808 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
809 | dependencies:
810 | reusify: 1.0.4
811 | dev: true
812 |
813 | /fd-slicer/1.1.0:
814 | resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
815 | dependencies:
816 | pend: 1.2.0
817 | dev: false
818 |
819 | /file-entry-cache/6.0.1:
820 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
821 | engines: {node: ^10.12.0 || >=12.0.0}
822 | dependencies:
823 | flat-cache: 3.0.4
824 | dev: true
825 |
826 | /fill-range/7.0.1:
827 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
828 | engines: {node: '>=8'}
829 | dependencies:
830 | to-regex-range: 5.0.1
831 | dev: true
832 |
833 | /find-up/2.1.0:
834 | resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
835 | engines: {node: '>=4'}
836 | dependencies:
837 | locate-path: 2.0.0
838 | dev: true
839 |
840 | /flat-cache/3.0.4:
841 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
842 | engines: {node: ^10.12.0 || >=12.0.0}
843 | dependencies:
844 | flatted: 3.2.5
845 | rimraf: 3.0.2
846 | dev: true
847 |
848 | /flatted/3.2.5:
849 | resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==}
850 | dev: true
851 |
852 | /flushwritable/1.0.0:
853 | resolution: {integrity: sha512-3VELfuWCLVzt5d2Gblk8qcqFro6nuwvxwMzHaENVDHI7rxcBRtMCwTk/E9FXcgh+82DSpavPNDueA9+RxXJoFg==}
854 | dev: false
855 |
856 | /form-data/3.0.1:
857 | resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==}
858 | engines: {node: '>= 6'}
859 | dependencies:
860 | asynckit: 0.4.0
861 | combined-stream: 1.0.8
862 | mime-types: 2.1.35
863 | dev: false
864 |
865 | /form-data/4.0.0:
866 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
867 | engines: {node: '>= 6'}
868 | dependencies:
869 | asynckit: 0.4.0
870 | combined-stream: 1.0.8
871 | mime-types: 2.1.35
872 | dev: false
873 |
874 | /fs-constants/1.0.0:
875 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
876 | dev: false
877 |
878 | /fs.realpath/1.0.0:
879 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
880 | dev: true
881 |
882 | /function-bind/1.1.1:
883 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
884 | dev: true
885 |
886 | /function.prototype.name/1.1.5:
887 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
888 | engines: {node: '>= 0.4'}
889 | dependencies:
890 | call-bind: 1.0.2
891 | define-properties: 1.1.4
892 | es-abstract: 1.20.1
893 | functions-have-names: 1.2.3
894 | dev: true
895 |
896 | /functional-red-black-tree/1.0.1:
897 | resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
898 | dev: true
899 |
900 | /functions-have-names/1.2.3:
901 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
902 | dev: true
903 |
904 | /get-intrinsic/1.1.1:
905 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==}
906 | dependencies:
907 | function-bind: 1.1.1
908 | has: 1.0.3
909 | has-symbols: 1.0.3
910 | dev: true
911 |
912 | /get-ready/1.0.0:
913 | resolution: {integrity: sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==}
914 | dev: false
915 |
916 | /get-symbol-description/1.0.0:
917 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
918 | engines: {node: '>= 0.4'}
919 | dependencies:
920 | call-bind: 1.0.2
921 | get-intrinsic: 1.1.1
922 | dev: true
923 |
924 | /glob-parent/5.1.2:
925 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
926 | engines: {node: '>= 6'}
927 | dependencies:
928 | is-glob: 4.0.3
929 | dev: true
930 |
931 | /glob-parent/6.0.2:
932 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
933 | engines: {node: '>=10.13.0'}
934 | dependencies:
935 | is-glob: 4.0.3
936 | dev: true
937 |
938 | /glob/7.2.3:
939 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
940 | dependencies:
941 | fs.realpath: 1.0.0
942 | inflight: 1.0.6
943 | inherits: 2.0.4
944 | minimatch: 3.1.2
945 | once: 1.4.0
946 | path-is-absolute: 1.0.1
947 | dev: true
948 |
949 | /globals/13.15.0:
950 | resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==}
951 | engines: {node: '>=8'}
952 | dependencies:
953 | type-fest: 0.20.2
954 | dev: true
955 |
956 | /globby/11.1.0:
957 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
958 | engines: {node: '>=10'}
959 | dependencies:
960 | array-union: 2.1.0
961 | dir-glob: 3.0.1
962 | fast-glob: 3.2.11
963 | ignore: 5.2.0
964 | merge2: 1.4.1
965 | slash: 3.0.0
966 | dev: true
967 |
968 | /has-bigints/1.0.2:
969 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
970 | dev: true
971 |
972 | /has-flag/4.0.0:
973 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
974 | engines: {node: '>=8'}
975 |
976 | /has-property-descriptors/1.0.0:
977 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
978 | dependencies:
979 | get-intrinsic: 1.1.1
980 | dev: true
981 |
982 | /has-symbols/1.0.3:
983 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
984 | engines: {node: '>= 0.4'}
985 | dev: true
986 |
987 | /has-tostringtag/1.0.0:
988 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
989 | engines: {node: '>= 0.4'}
990 | dependencies:
991 | has-symbols: 1.0.3
992 | dev: true
993 |
994 | /has/1.0.3:
995 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
996 | engines: {node: '>= 0.4.0'}
997 | dependencies:
998 | function-bind: 1.1.1
999 | dev: true
1000 |
1001 | /iconv-lite/0.5.2:
1002 | resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==}
1003 | engines: {node: '>=0.10.0'}
1004 | dependencies:
1005 | safer-buffer: 2.1.2
1006 | dev: false
1007 |
1008 | /ignore/5.2.0:
1009 | resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
1010 | engines: {node: '>= 4'}
1011 | dev: true
1012 |
1013 | /import-fresh/3.3.0:
1014 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1015 | engines: {node: '>=6'}
1016 | dependencies:
1017 | parent-module: 1.0.1
1018 | resolve-from: 4.0.0
1019 | dev: true
1020 |
1021 | /imurmurhash/0.1.4:
1022 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1023 | engines: {node: '>=0.8.19'}
1024 | dev: true
1025 |
1026 | /inflight/1.0.6:
1027 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1028 | dependencies:
1029 | once: 1.4.0
1030 | wrappy: 1.0.2
1031 | dev: true
1032 |
1033 | /inherits/2.0.4:
1034 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1035 |
1036 | /internal-slot/1.0.3:
1037 | resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
1038 | engines: {node: '>= 0.4'}
1039 | dependencies:
1040 | get-intrinsic: 1.1.1
1041 | has: 1.0.3
1042 | side-channel: 1.0.4
1043 | dev: true
1044 |
1045 | /is-bigint/1.0.4:
1046 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
1047 | dependencies:
1048 | has-bigints: 1.0.2
1049 | dev: true
1050 |
1051 | /is-boolean-object/1.1.2:
1052 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
1053 | engines: {node: '>= 0.4'}
1054 | dependencies:
1055 | call-bind: 1.0.2
1056 | has-tostringtag: 1.0.0
1057 | dev: true
1058 |
1059 | /is-callable/1.2.4:
1060 | resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==}
1061 | engines: {node: '>= 0.4'}
1062 | dev: true
1063 |
1064 | /is-core-module/2.9.0:
1065 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
1066 | dependencies:
1067 | has: 1.0.3
1068 | dev: true
1069 |
1070 | /is-date-object/1.0.5:
1071 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
1072 | engines: {node: '>= 0.4'}
1073 | dependencies:
1074 | has-tostringtag: 1.0.0
1075 | dev: true
1076 |
1077 | /is-extglob/2.1.1:
1078 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1079 | engines: {node: '>=0.10.0'}
1080 | dev: true
1081 |
1082 | /is-glob/4.0.3:
1083 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1084 | engines: {node: '>=0.10.0'}
1085 | dependencies:
1086 | is-extglob: 2.1.1
1087 | dev: true
1088 |
1089 | /is-negative-zero/2.0.2:
1090 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
1091 | engines: {node: '>= 0.4'}
1092 | dev: true
1093 |
1094 | /is-number-object/1.0.7:
1095 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
1096 | engines: {node: '>= 0.4'}
1097 | dependencies:
1098 | has-tostringtag: 1.0.0
1099 | dev: true
1100 |
1101 | /is-number/7.0.0:
1102 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1103 | engines: {node: '>=0.12.0'}
1104 | dev: true
1105 |
1106 | /is-regex/1.1.4:
1107 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1108 | engines: {node: '>= 0.4'}
1109 | dependencies:
1110 | call-bind: 1.0.2
1111 | has-tostringtag: 1.0.0
1112 | dev: true
1113 |
1114 | /is-shared-array-buffer/1.0.2:
1115 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
1116 | dependencies:
1117 | call-bind: 1.0.2
1118 | dev: true
1119 |
1120 | /is-string/1.0.7:
1121 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1122 | engines: {node: '>= 0.4'}
1123 | dependencies:
1124 | has-tostringtag: 1.0.0
1125 | dev: true
1126 |
1127 | /is-symbol/1.0.4:
1128 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1129 | engines: {node: '>= 0.4'}
1130 | dependencies:
1131 | has-symbols: 1.0.3
1132 | dev: true
1133 |
1134 | /is-weakref/1.0.2:
1135 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
1136 | dependencies:
1137 | call-bind: 1.0.2
1138 | dev: true
1139 |
1140 | /isarray/1.0.0:
1141 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
1142 | dev: false
1143 |
1144 | /isexe/2.0.0:
1145 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1146 | dev: true
1147 |
1148 | /js-yaml/4.1.0:
1149 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1150 | hasBin: true
1151 | dependencies:
1152 | argparse: 2.0.1
1153 | dev: true
1154 |
1155 | /json-schema-traverse/0.4.1:
1156 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1157 | dev: true
1158 |
1159 | /json-stable-stringify-without-jsonify/1.0.1:
1160 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1161 | dev: true
1162 |
1163 | /json5/1.0.1:
1164 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==}
1165 | hasBin: true
1166 | dependencies:
1167 | minimist: 1.2.6
1168 | dev: true
1169 |
1170 | /levn/0.4.1:
1171 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1172 | engines: {node: '>= 0.8.0'}
1173 | dependencies:
1174 | prelude-ls: 1.2.1
1175 | type-check: 0.4.0
1176 | dev: true
1177 |
1178 | /locate-path/2.0.0:
1179 | resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
1180 | engines: {node: '>=4'}
1181 | dependencies:
1182 | p-locate: 2.0.0
1183 | path-exists: 3.0.0
1184 | dev: true
1185 |
1186 | /lodash.merge/4.6.2:
1187 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1188 | dev: true
1189 |
1190 | /lru-cache/6.0.0:
1191 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
1192 | engines: {node: '>=10'}
1193 | dependencies:
1194 | yallist: 4.0.0
1195 | dev: true
1196 |
1197 | /luxon/2.4.0:
1198 | resolution: {integrity: sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA==}
1199 | engines: {node: '>=12'}
1200 | dev: false
1201 |
1202 | /merge2/1.4.1:
1203 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1204 | engines: {node: '>= 8'}
1205 | dev: true
1206 |
1207 | /micromatch/4.0.5:
1208 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
1209 | engines: {node: '>=8.6'}
1210 | dependencies:
1211 | braces: 3.0.2
1212 | picomatch: 2.3.1
1213 | dev: true
1214 |
1215 | /mime-db/1.52.0:
1216 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1217 | engines: {node: '>= 0.6'}
1218 | dev: false
1219 |
1220 | /mime-types/2.1.35:
1221 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1222 | engines: {node: '>= 0.6'}
1223 | dependencies:
1224 | mime-db: 1.52.0
1225 | dev: false
1226 |
1227 | /minimatch/3.1.2:
1228 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1229 | dependencies:
1230 | brace-expansion: 1.1.11
1231 | dev: true
1232 |
1233 | /minimist/1.2.6:
1234 | resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
1235 |
1236 | /mkdirp/0.5.6:
1237 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1238 | hasBin: true
1239 | dependencies:
1240 | minimist: 1.2.6
1241 | dev: false
1242 |
1243 | /ms/2.0.0:
1244 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
1245 | dev: true
1246 |
1247 | /ms/2.1.2:
1248 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
1249 | dev: true
1250 |
1251 | /ms/2.1.3:
1252 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1253 | dev: true
1254 |
1255 | /natural-compare/1.4.0:
1256 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1257 | dev: true
1258 |
1259 | /node-fetch/2.6.7:
1260 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
1261 | engines: {node: 4.x || >=6.0.0}
1262 | peerDependencies:
1263 | encoding: ^0.1.0
1264 | peerDependenciesMeta:
1265 | encoding:
1266 | optional: true
1267 | dependencies:
1268 | whatwg-url: 5.0.0
1269 | dev: false
1270 |
1271 | /object-inspect/1.12.2:
1272 | resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
1273 | dev: true
1274 |
1275 | /object-keys/1.1.1:
1276 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1277 | engines: {node: '>= 0.4'}
1278 | dev: true
1279 |
1280 | /object.assign/4.1.2:
1281 | resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==}
1282 | engines: {node: '>= 0.4'}
1283 | dependencies:
1284 | call-bind: 1.0.2
1285 | define-properties: 1.1.4
1286 | has-symbols: 1.0.3
1287 | object-keys: 1.1.1
1288 | dev: true
1289 |
1290 | /object.values/1.1.5:
1291 | resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==}
1292 | engines: {node: '>= 0.4'}
1293 | dependencies:
1294 | call-bind: 1.0.2
1295 | define-properties: 1.1.4
1296 | es-abstract: 1.20.1
1297 | dev: true
1298 |
1299 | /once/1.4.0:
1300 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1301 | dependencies:
1302 | wrappy: 1.0.2
1303 |
1304 | /optionator/0.9.1:
1305 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
1306 | engines: {node: '>= 0.8.0'}
1307 | dependencies:
1308 | deep-is: 0.1.4
1309 | fast-levenshtein: 2.0.6
1310 | levn: 0.4.1
1311 | prelude-ls: 1.2.1
1312 | type-check: 0.4.0
1313 | word-wrap: 1.2.3
1314 | dev: true
1315 |
1316 | /p-limit/1.3.0:
1317 | resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
1318 | engines: {node: '>=4'}
1319 | dependencies:
1320 | p-try: 1.0.0
1321 | dev: true
1322 |
1323 | /p-locate/2.0.0:
1324 | resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
1325 | engines: {node: '>=4'}
1326 | dependencies:
1327 | p-limit: 1.3.0
1328 | dev: true
1329 |
1330 | /p-try/1.0.0:
1331 | resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
1332 | engines: {node: '>=4'}
1333 | dev: true
1334 |
1335 | /parent-module/1.0.1:
1336 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1337 | engines: {node: '>=6'}
1338 | dependencies:
1339 | callsites: 3.1.0
1340 | dev: true
1341 |
1342 | /path-exists/3.0.0:
1343 | resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
1344 | engines: {node: '>=4'}
1345 | dev: true
1346 |
1347 | /path-is-absolute/1.0.1:
1348 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1349 | engines: {node: '>=0.10.0'}
1350 | dev: true
1351 |
1352 | /path-key/3.1.1:
1353 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1354 | engines: {node: '>=8'}
1355 | dev: true
1356 |
1357 | /path-parse/1.0.7:
1358 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1359 | dev: true
1360 |
1361 | /path-type/4.0.0:
1362 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1363 | engines: {node: '>=8'}
1364 | dev: true
1365 |
1366 | /pend/1.2.0:
1367 | resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
1368 | dev: false
1369 |
1370 | /picomatch/2.3.1:
1371 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1372 | engines: {node: '>=8.6'}
1373 | dev: true
1374 |
1375 | /prelude-ls/1.2.1:
1376 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1377 | engines: {node: '>= 0.8.0'}
1378 | dev: true
1379 |
1380 | /process-nextick-args/2.0.1:
1381 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
1382 | dev: false
1383 |
1384 | /pump/3.0.0:
1385 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
1386 | dependencies:
1387 | end-of-stream: 1.4.4
1388 | once: 1.4.0
1389 | dev: false
1390 |
1391 | /punycode/2.1.1:
1392 | resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
1393 | engines: {node: '>=6'}
1394 | dev: true
1395 |
1396 | /queue-microtask/1.2.3:
1397 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1398 | dev: true
1399 |
1400 | /readable-stream/2.3.7:
1401 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
1402 | dependencies:
1403 | core-util-is: 1.0.3
1404 | inherits: 2.0.4
1405 | isarray: 1.0.0
1406 | process-nextick-args: 2.0.1
1407 | safe-buffer: 5.1.2
1408 | string_decoder: 1.1.1
1409 | util-deprecate: 1.0.2
1410 | dev: false
1411 |
1412 | /regexp.prototype.flags/1.4.3:
1413 | resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
1414 | engines: {node: '>= 0.4'}
1415 | dependencies:
1416 | call-bind: 1.0.2
1417 | define-properties: 1.1.4
1418 | functions-have-names: 1.2.3
1419 | dev: true
1420 |
1421 | /regexpp/3.2.0:
1422 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
1423 | engines: {node: '>=8'}
1424 | dev: true
1425 |
1426 | /resolve-from/4.0.0:
1427 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1428 | engines: {node: '>=4'}
1429 | dev: true
1430 |
1431 | /resolve/1.22.0:
1432 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==}
1433 | hasBin: true
1434 | dependencies:
1435 | is-core-module: 2.9.0
1436 | path-parse: 1.0.7
1437 | supports-preserve-symlinks-flag: 1.0.0
1438 | dev: true
1439 |
1440 | /reusify/1.0.4:
1441 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1442 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1443 | dev: true
1444 |
1445 | /rimraf/3.0.2:
1446 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
1447 | hasBin: true
1448 | dependencies:
1449 | glob: 7.2.3
1450 | dev: true
1451 |
1452 | /run-parallel/1.2.0:
1453 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1454 | dependencies:
1455 | queue-microtask: 1.2.3
1456 | dev: true
1457 |
1458 | /safe-buffer/5.1.2:
1459 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1460 | dev: false
1461 |
1462 | /safe-buffer/5.2.1:
1463 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1464 | dev: false
1465 |
1466 | /safer-buffer/2.1.2:
1467 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1468 | dev: false
1469 |
1470 | /semver/7.3.7:
1471 | resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==}
1472 | engines: {node: '>=10'}
1473 | hasBin: true
1474 | dependencies:
1475 | lru-cache: 6.0.0
1476 | dev: true
1477 |
1478 | /shebang-command/2.0.0:
1479 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1480 | engines: {node: '>=8'}
1481 | dependencies:
1482 | shebang-regex: 3.0.0
1483 | dev: true
1484 |
1485 | /shebang-regex/3.0.0:
1486 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1487 | engines: {node: '>=8'}
1488 | dev: true
1489 |
1490 | /side-channel/1.0.4:
1491 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1492 | dependencies:
1493 | call-bind: 1.0.2
1494 | get-intrinsic: 1.1.1
1495 | object-inspect: 1.12.2
1496 | dev: true
1497 |
1498 | /slash/3.0.0:
1499 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1500 | engines: {node: '>=8'}
1501 | dev: true
1502 |
1503 | /streamifier/0.1.1:
1504 | resolution: {integrity: sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==}
1505 | engines: {node: '>=0.10'}
1506 | dev: false
1507 |
1508 | /string.prototype.trimend/1.0.5:
1509 | resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==}
1510 | dependencies:
1511 | call-bind: 1.0.2
1512 | define-properties: 1.1.4
1513 | es-abstract: 1.20.1
1514 | dev: true
1515 |
1516 | /string.prototype.trimstart/1.0.5:
1517 | resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==}
1518 | dependencies:
1519 | call-bind: 1.0.2
1520 | define-properties: 1.1.4
1521 | es-abstract: 1.20.1
1522 | dev: true
1523 |
1524 | /string_decoder/1.1.1:
1525 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
1526 | dependencies:
1527 | safe-buffer: 5.1.2
1528 | dev: false
1529 |
1530 | /strip-ansi/6.0.1:
1531 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1532 | engines: {node: '>=8'}
1533 | dependencies:
1534 | ansi-regex: 5.0.1
1535 | dev: true
1536 |
1537 | /strip-bom/3.0.0:
1538 | resolution: {integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=}
1539 | engines: {node: '>=4'}
1540 | dev: true
1541 |
1542 | /strip-json-comments/3.1.1:
1543 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1544 | engines: {node: '>=8'}
1545 | dev: true
1546 |
1547 | /supports-color/7.2.0:
1548 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1549 | engines: {node: '>=8'}
1550 | dependencies:
1551 | has-flag: 4.0.0
1552 |
1553 | /supports-preserve-symlinks-flag/1.0.0:
1554 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1555 | engines: {node: '>= 0.4'}
1556 | dev: true
1557 |
1558 | /tar-stream/1.6.2:
1559 | resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
1560 | engines: {node: '>= 0.8.0'}
1561 | dependencies:
1562 | bl: 1.2.3
1563 | buffer-alloc: 1.2.0
1564 | end-of-stream: 1.4.4
1565 | fs-constants: 1.0.0
1566 | readable-stream: 2.3.7
1567 | to-buffer: 1.1.1
1568 | xtend: 4.0.2
1569 | dev: false
1570 |
1571 | /text-table/0.2.0:
1572 | resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
1573 | dev: true
1574 |
1575 | /to-buffer/1.1.1:
1576 | resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==}
1577 | dev: false
1578 |
1579 | /to-regex-range/5.0.1:
1580 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1581 | engines: {node: '>=8.0'}
1582 | dependencies:
1583 | is-number: 7.0.0
1584 | dev: true
1585 |
1586 | /tr46/0.0.3:
1587 | resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=}
1588 | dev: false
1589 |
1590 | /ts-mixer/6.0.1:
1591 | resolution: {integrity: sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==}
1592 | dev: false
1593 |
1594 | /tsconfig-paths/3.14.1:
1595 | resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
1596 | dependencies:
1597 | '@types/json5': 0.0.29
1598 | json5: 1.0.1
1599 | minimist: 1.2.6
1600 | strip-bom: 3.0.0
1601 | dev: true
1602 |
1603 | /tslib/1.14.1:
1604 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
1605 | dev: true
1606 |
1607 | /tslib/2.4.0:
1608 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
1609 | dev: false
1610 |
1611 | /tsutils/3.21.0_typescript@4.7.4:
1612 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
1613 | engines: {node: '>= 6'}
1614 | peerDependencies:
1615 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
1616 | dependencies:
1617 | tslib: 1.14.1
1618 | typescript: 4.7.4
1619 | dev: true
1620 |
1621 | /type-check/0.4.0:
1622 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1623 | engines: {node: '>= 0.8.0'}
1624 | dependencies:
1625 | prelude-ls: 1.2.1
1626 | dev: true
1627 |
1628 | /type-fest/0.20.2:
1629 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1630 | engines: {node: '>=10'}
1631 | dev: true
1632 |
1633 | /typescript/4.7.4:
1634 | resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==}
1635 | engines: {node: '>=4.2.0'}
1636 | hasBin: true
1637 | dev: true
1638 |
1639 | /unbox-primitive/1.0.2:
1640 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
1641 | dependencies:
1642 | call-bind: 1.0.2
1643 | has-bigints: 1.0.2
1644 | has-symbols: 1.0.3
1645 | which-boxed-primitive: 1.0.2
1646 | dev: true
1647 |
1648 | /uri-js/4.4.1:
1649 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1650 | dependencies:
1651 | punycode: 2.1.1
1652 | dev: true
1653 |
1654 | /util-deprecate/1.0.2:
1655 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1656 | dev: false
1657 |
1658 | /v8-compile-cache/2.3.0:
1659 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
1660 | dev: true
1661 |
1662 | /webidl-conversions/3.0.1:
1663 | resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=}
1664 | dev: false
1665 |
1666 | /whatwg-url/5.0.0:
1667 | resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=}
1668 | dependencies:
1669 | tr46: 0.0.3
1670 | webidl-conversions: 3.0.1
1671 | dev: false
1672 |
1673 | /which-boxed-primitive/1.0.2:
1674 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
1675 | dependencies:
1676 | is-bigint: 1.0.4
1677 | is-boolean-object: 1.1.2
1678 | is-number-object: 1.0.7
1679 | is-string: 1.0.7
1680 | is-symbol: 1.0.4
1681 | dev: true
1682 |
1683 | /which/2.0.2:
1684 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1685 | engines: {node: '>= 8'}
1686 | hasBin: true
1687 | dependencies:
1688 | isexe: 2.0.0
1689 | dev: true
1690 |
1691 | /word-wrap/1.2.3:
1692 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
1693 | engines: {node: '>=0.10.0'}
1694 | dev: true
1695 |
1696 | /wrappy/1.0.2:
1697 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
1698 |
1699 | /ws/8.7.0:
1700 | resolution: {integrity: sha512-c2gsP0PRwcLFzUiA8Mkr37/MI7ilIlHQxaEAtd0uNMbVMoy8puJyafRlm0bV9MbGSabUPeLrRRaqIBcFcA2Pqg==}
1701 | engines: {node: '>=10.0.0'}
1702 | peerDependencies:
1703 | bufferutil: ^4.0.1
1704 | utf-8-validate: ^5.0.2
1705 | peerDependenciesMeta:
1706 | bufferutil:
1707 | optional: true
1708 | utf-8-validate:
1709 | optional: true
1710 | dev: false
1711 |
1712 | /xtend/4.0.2:
1713 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
1714 | engines: {node: '>=0.4'}
1715 | dev: false
1716 |
1717 | /yallist/4.0.0:
1718 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
1719 | dev: true
1720 |
1721 | /yauzl/2.10.0:
1722 | resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
1723 | dependencies:
1724 | buffer-crc32: 0.2.13
1725 | fd-slicer: 1.1.0
1726 | dev: false
1727 |
1728 | /yazl/2.5.1:
1729 | resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==}
1730 | dependencies:
1731 | buffer-crc32: 0.2.13
1732 | dev: false
1733 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * VECTOR :: INITIALIZATION AND SHARD MANAGEMENT
3 | */
4 |
5 | import * as fs from 'fs';
6 | // import * as util from 'util';
7 | import { ShardingManager } from 'discord.js';
8 | import * as pkg from '../package.json';
9 | import * as cfg from '../config/bot.json';
10 | import isInterface from './util/isInterface';
11 | import Logger, { LoggingLevel } from './util/logger';
12 | import keys from '../config/keys.json';
13 |
14 | process.title = `Vector Bot ${pkg.version}`;
15 |
16 | const debugMode = process.argv.includes(`--debug`) || process.argv.includes(`-d`);
17 | let logins = 1;
18 |
19 | // create directories that may or may not exist because Git(TM)
20 | const mkdirs = [
21 | `./.local`,
22 | `./data/archive`,
23 | `./logs/crash`,
24 | `./logs/archive`,
25 | `./logs/all`
26 | ];
27 |
28 | for (const item of mkdirs) {
29 | if (!fs.existsSync(item)) {
30 | fs.mkdirSync(item, { recursive: true });
31 | }
32 | }
33 |
34 | Logger.compressLogs(); // Compress the log files before instantiating a new Logger class as to clean up any files from a previous session
35 |
36 | // check login count, to prevent API spam in the case of a boot loop
37 | interface ErrorWithCode extends Error {
38 | code?: string
39 | }
40 |
41 | try {
42 | // try making file if it does not exist
43 | const data = {
44 | logins: 1,
45 | time: new Date().getTime()
46 | };
47 |
48 | fs.writeFileSync(`./data/resets`, JSON.stringify(data), { encoding: `utf8`, flag: `ax` });
49 | } catch (e: unknown) {
50 |
51 | if (isInterface(e, `code`)) {
52 | if (e.code !== `EEXIST`) {
53 | throw e;
54 | }
55 | }
56 |
57 | const oldData = fs.readFileSync(`./data/resets`, { encoding: `utf8` });
58 |
59 | let json = {
60 | logins: 0,
61 | time: 0
62 | };
63 |
64 | // Attempt to parse as JSON.
65 | // If the JSON data is corrupt, it'll be up to the user to fix it.
66 | // Simply overwriting with default values could cause problems down the line.
67 | json = JSON.parse(oldData);
68 |
69 | // if it's been more than an hour, reset the login count
70 | const now = new Date().getTime();
71 | if (now - json.time > (1000 * 60 * 60)) {
72 | json.logins = 0;
73 | json.time = now;
74 | }
75 |
76 | json.logins++;
77 |
78 | logins = json.logins;
79 |
80 | fs.writeFileSync(`./data/resets`, JSON.stringify(json), { encoding: `utf8` });
81 | }
82 |
83 | const logger = new Logger({ loginCount: logins });
84 |
85 | // check login count before proceeding
86 | if (debugMode) {
87 | if (logins === cfg.loginLimit.absolute) {
88 | logger.fatal(`too many resets`);
89 | process.exit(1);
90 | }
91 | } else {
92 | if (logins > cfg.loginLimit.warning) {
93 | logger.warn(`lots of resets`);
94 | }
95 |
96 | if (logins > cfg.loginLimit.shutdown) {
97 | logger.fatal(`too many resets`);
98 | process.exit(1);
99 | }
100 | }
101 |
102 | // we did it reddit
103 | logger.verbose(`:)`);
104 |
105 | interface ShardMessage {
106 | type: LoggingLevel,
107 | content: string
108 | }
109 |
110 | const options = {
111 | token: keys.discord,
112 | shardArgs: [debugMode.toString()]
113 | };
114 |
115 | const shardManager = new ShardingManager(`./build/src/shard.js`, options);
116 |
117 | shardManager.on(`shardCreate`, shard => {
118 | logger.log(`Launched shard ${shard.id}`);
119 |
120 | shard.on(`message`, (message: ShardMessage) => {
121 | switch (message.type) {
122 | case `log`: {
123 | logger.log(`[Shard ${shard.id}] ${message.content}`);
124 | break;
125 | }
126 | case `warn`: {
127 | logger.warn(`[Shard ${shard.id}] ${message.content}`);
128 | break;
129 | }
130 | case `error`: {
131 | logger.error(`[Shard ${shard.id}] ${message.content}`);
132 | break;
133 | }
134 | case `fatal`: {
135 | logger.fatal(`[Shard ${shard.id}] ${message.content}`);
136 | break;
137 | }
138 | case `verbose`: {
139 | logger.verbose(`[Shard ${shard.id}] ${message.content}`);
140 | break;
141 | }
142 | default: {
143 | logger.warn(`[Master] Unexpected message from shard ${shard.id}: ${message}`);
144 | break;
145 | }
146 | }
147 | });
148 | });
149 |
150 | shardManager.spawn();
151 |
--------------------------------------------------------------------------------
/src/shard.ts:
--------------------------------------------------------------------------------
1 | import { Client, Intents } from 'discord.js';
2 | import Logger from './util/logger';
3 | import keys from '../config/keys.json';
4 |
5 | export const logger = new Logger();
6 |
7 | // const debugMode = process.argv.includes(`--debug`) || process.argv.includes(`-d`);
8 |
9 | const client = new Client({
10 | intents: [
11 | Intents.FLAGS.GUILDS,
12 | Intents.FLAGS.GUILD_MEMBERS,
13 | Intents.FLAGS.GUILD_MESSAGES,
14 | Intents.FLAGS.DIRECT_MESSAGES
15 | ]
16 | });
17 |
18 | client.login(keys.discord)
19 | .then(() => {
20 | logger.log(`Successfully logged in as ${client.user?.tag}! Shard: [${client.shard?.ids.map(s => s + 1).join(`, `)}/${client.shard?.count}]`);
21 | process.title = `Vector Shard ${client.shard?.ids.map(s => s + 1).join(`, `)}/${client.shard?.count}`;
22 | })
23 | .catch(error => {
24 | logger.fatal(`Unexpected error when logging into Discord:\n${error}`);
25 | process.exit(1);
26 | });
--------------------------------------------------------------------------------
/src/util/isInterface.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/explicit-module-boundary-types */
2 | /* eslint-disable @typescript-eslint/no-explicit-any */
3 |
4 | /**
5 | * Type guard for unknown objects to see if they are actually a specific interface
6 | * @param obj Object to check
7 | * @param property Property that exists on T
8 | */
9 | export default function isInterface(obj: any, property: keyof T): obj is T {
10 | return property in obj;
11 | }
12 |
--------------------------------------------------------------------------------
/src/util/logger.ts:
--------------------------------------------------------------------------------
1 | // Logger class for easy and aesthetically pleasing console logging
2 |
3 | import chalk from "chalk";
4 | import { DateTime } from "luxon";
5 | import { inspect } from "util";
6 | import { PathLike } from "fs";
7 | import { appendFile, readdir, rm, stat, access, mkdir, rename } from "fs/promises";
8 | import { zip } from "compressing";
9 |
10 | const defaultFilePath: PathLike = `logs`;
11 |
12 | export type LoggingLevel = `log` | `warn` | `error` | `fatal` | `verbose`;
13 |
14 | // https://cdn.discordapp.com/attachments/275344239850946561/990825655082049586/unknown.png
15 | type strange = string;
16 |
17 | interface LoggerOptions {
18 | loginCount?: number,
19 | writeToFile?: boolean,
20 | filePath?: strange
21 | }
22 |
23 | export default class Logger {
24 |
25 | private readonly writeToFile = true; // Write to log files by default
26 | private readonly filePath: PathLike = defaultFilePath;
27 | private loginCount?: number;
28 |
29 | constructor(options?: LoggerOptions) {
30 | if (options?.writeToFile) {
31 | this.writeToFile = options.writeToFile;
32 | }
33 |
34 | if (options?.filePath) {
35 | this.filePath = options.filePath;
36 | }
37 |
38 | if (options?.loginCount) {
39 | if (process.send)
40 | throw new Error(`Cannot set login count when running as a shard`);
41 |
42 | this.loginCount = options.loginCount;
43 | }
44 |
45 | if (!process.send && !this.loginCount)
46 | throw new Error(`Must set login count when not running as a shard`);
47 |
48 | }
49 |
50 | /**
51 | * generic, everyday logging.
52 | */
53 | public log(info: string): void {
54 | if (process.send) {
55 | process.send({ type: `log`, content: info });
56 | return;
57 | }
58 |
59 | this.appendToLog(`log`, info);
60 | return console.log(`${this.getTimestamp()} ${chalk.blue(`info:`)} ${info} `);
61 | }
62 |
63 | /**
64 | * for things that *could* be a problem but *should* be fine..?
65 | */
66 | public warn(info: string): void {
67 | if (process.send) {
68 | process.send({ type: `warn`, content: info });
69 | return;
70 | }
71 |
72 | this.appendToLog(`warn`, info);
73 | return console.warn(`${this.getTimestamp()} ${chalk.yellow(`warn:`)} ${info} `);
74 | }
75 |
76 | /**
77 | * generic, everyday erroring
78 | */
79 | public error(info: Error | string): void {
80 | if (process.send) {
81 | process.send({ type: `error`, content: info });
82 | return;
83 | }
84 |
85 | if (info instanceof Error) {
86 | info = (info.stack ?? info.message)
87 | .split(`\n`)
88 | .join(`\n${this.getTimestamp()} ${chalk.red(`error:`)}`);
89 | }
90 |
91 | this.appendToLog(`error`, info);
92 | console.error(`${this.getTimestamp()} ${chalk.red(`error:`)} ${info}`);
93 | }
94 |
95 | /**
96 | * for when there's an unexpected error that we haven't sent to logger.error
97 | */
98 | public fatal(info: Error | string): void {
99 | if (process.send) {
100 | process.send({ type: `fatal`, content: info });
101 | return;
102 | }
103 |
104 | if (info instanceof Error) {
105 | info = (info.stack ?? info.message)
106 | .split(`\n`)
107 | .join(`\n${this.getTimestamp()} ${chalk.bgRed.white(`FATAL:`)}`);
108 | }
109 |
110 | this.appendToLog(`fatal`, info);
111 | console.error(`${this.getTimestamp()} ${chalk.bgRed.white(`FATAL:`)} ${chalk.red(info)}`);
112 | }
113 |
114 | /**
115 | * SPAM SPAM SPAM SPAM SPAM
116 | */
117 | public verbose(info: unknown): void {
118 | if (typeof info === `object`)
119 | info = inspect(info, { depth: 0, colors: true });
120 |
121 | if (process.send) {
122 | process.send({ type: `verbose`, content: info });
123 | return;
124 | }
125 |
126 | if (info instanceof Error)
127 | info = (info.stack ?? info.message)
128 | .split(`\n`)
129 | .join(`\n${this.getTimestamp()} ${chalk.grey(`verbose:`)}`);
130 |
131 | return console.log(`${this.getTimestamp()} ${chalk.gray(`verbose:`)} ${chalk.gray(info)} `);
132 | }
133 |
134 | private async appendToLog(level: LoggingLevel, content: string): Promise {
135 | if (!this.writeToFile) return;
136 |
137 | const contentTimestamp = DateTime.utc().toFormat(`yyyy-MM-dd HH:mm:ss.SSS`);
138 | const toWrite = `${contentTimestamp} ${level.toUpperCase()} ${content}\n`;
139 | const fileTimestamp = DateTime.utc().toFormat(`yyyy-MM-dd`);
140 | await appendFile(`./${this.filePath}/${fileTimestamp}.${this.loginCount}.log`, toWrite);
141 | }
142 |
143 | // This is static so we can call it even before the logger is initialized if we want.
144 | public static async compressLogs(filePath?: PathLike): Promise {
145 | if (!filePath)
146 | filePath = defaultFilePath;
147 |
148 | const date = new Date();
149 | const currentYear = date.getUTCFullYear();
150 | const currentMonth = date.getUTCMonth() + 1; // month is 0-indexed annoyingly
151 | const currentDay = date.getUTCDate();
152 |
153 | try {
154 | await access(`${filePath}/archive/${currentYear}/${currentMonth}/`);
155 | } catch (e) {
156 | await mkdir(`${filePath}/archive/${currentYear}/${currentMonth}/`, { recursive: true });
157 | }
158 |
159 | const minimumFileSize = 250; // bytes
160 | // 250 (give or take) is the minimum number of bytes for these zip files from what I've seen.
161 | // That's just the login information with no extra data. If we compress the log file,
162 | // the resulting zip file is actually bigger because of the additional zip header data.
163 | // This can add up if the bot goes through a bunch of restarts with no additional data.
164 |
165 | const files = await readdir(filePath);
166 | for (const file of files) {
167 | const fileStats = await stat(`${filePath}/${file}`);
168 | if (fileStats.isDirectory()) // File is a directory, skip to next iteration.
169 | continue;
170 |
171 | const restartNumber = file.match(/(?<=\d\.)\d+(?=\.log)/i)?.[0] ?? `0`;
172 |
173 | if (fileStats.size <= minimumFileSize) {
174 | // File is too small to be worth compressing, just move it to the archive folder.
175 | await rename(`./${filePath}/${file}`, `./${filePath}/archive/${currentYear}/${currentMonth}/${currentDay}.${restartNumber}.log`);
176 | } else {
177 | zip.compressFile(`./${filePath}/${file}`, `./${filePath}/archive/${currentYear}/${currentMonth}/${currentDay}.${restartNumber}.zip`);
178 | rm(`./${filePath}/${file}`);
179 | }
180 |
181 | }
182 | }
183 |
184 | private getTimestamp(): string {
185 | return chalk.grey(DateTime.utc().toFormat(`[yyyy-MM-dd HH:mm:ss.SSS]`));
186 | }
187 | }
188 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "buildOptions": {
3 | "verbose": true
4 | },
5 | "compilerOptions": {
6 | "outDir": "./build",
7 | "allowJs": true,
8 | "target": "es2020",
9 | "module": "commonjs",
10 | "strict": true,
11 | "moduleResolution": "node",
12 | "noImplicitReturns": true,
13 | "allowSyntheticDefaultImports": true,
14 | "esModuleInterop": true,
15 | "resolveJsonModule": true,
16 | "noFallthroughCasesInSwitch": true,
17 | "lib": ["esnext"],
18 | "incremental": true,
19 | "noImplicitOverride": true,
20 | "skipLibCheck": true
21 | },
22 | "include": ["./src/**/*"],
23 | }
24 |
--------------------------------------------------------------------------------
/windows_ez_start.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | call npm run build
3 | call npm run start -- --debug
4 | pause
--------------------------------------------------------------------------------