├── .DS_Store ├── .env.template ├── .gitignore ├── package-lock.json ├── package.json ├── src ├── app.ts ├── config │ ├── envs.ts │ └── index.ts ├── interfaces │ ├── github-issue.interface.ts │ ├── github-start.interface.ts │ └── index.ts └── presentation │ ├── github │ └── controller.ts │ └── services │ ├── discord.service.ts │ └── github.service.ts └── tsconfig.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Klerith/webhooks-server/e9fb0ff69097fe95a9135753afbf372ac07e58b5/.DS_Store -------------------------------------------------------------------------------- /.env.template: -------------------------------------------------------------------------------- 1 | 2 | 3 | PORT=3000 4 | 5 | 6 | DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/asdasd" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | 4 | .env 5 | 6 | .DS_Store -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "09-github-webhooks", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "09-github-webhooks", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "dotenv": "^16.3.1", 13 | "env-var": "^7.4.1", 14 | "express": "^4.18.2" 15 | }, 16 | "devDependencies": { 17 | "@types/express": "^4.17.17", 18 | "@types/node": "^20.6.3", 19 | "rimraf": "^5.0.1", 20 | "ts-node-dev": "^2.0.0", 21 | "typescript": "^5.2.2" 22 | } 23 | }, 24 | "node_modules/@cspotcode/source-map-support": { 25 | "version": "0.8.1", 26 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 27 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 28 | "dev": true, 29 | "dependencies": { 30 | "@jridgewell/trace-mapping": "0.3.9" 31 | }, 32 | "engines": { 33 | "node": ">=12" 34 | } 35 | }, 36 | "node_modules/@isaacs/cliui": { 37 | "version": "8.0.2", 38 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 39 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 40 | "dev": true, 41 | "dependencies": { 42 | "string-width": "^5.1.2", 43 | "string-width-cjs": "npm:string-width@^4.2.0", 44 | "strip-ansi": "^7.0.1", 45 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 46 | "wrap-ansi": "^8.1.0", 47 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 48 | }, 49 | "engines": { 50 | "node": ">=12" 51 | } 52 | }, 53 | "node_modules/@jridgewell/resolve-uri": { 54 | "version": "3.1.1", 55 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 56 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 57 | "dev": true, 58 | "engines": { 59 | "node": ">=6.0.0" 60 | } 61 | }, 62 | "node_modules/@jridgewell/sourcemap-codec": { 63 | "version": "1.4.15", 64 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 65 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 66 | "dev": true 67 | }, 68 | "node_modules/@jridgewell/trace-mapping": { 69 | "version": "0.3.9", 70 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 71 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 72 | "dev": true, 73 | "dependencies": { 74 | "@jridgewell/resolve-uri": "^3.0.3", 75 | "@jridgewell/sourcemap-codec": "^1.4.10" 76 | } 77 | }, 78 | "node_modules/@pkgjs/parseargs": { 79 | "version": "0.11.0", 80 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 81 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 82 | "dev": true, 83 | "optional": true, 84 | "engines": { 85 | "node": ">=14" 86 | } 87 | }, 88 | "node_modules/@tsconfig/node10": { 89 | "version": "1.0.9", 90 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 91 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 92 | "dev": true 93 | }, 94 | "node_modules/@tsconfig/node12": { 95 | "version": "1.0.11", 96 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 97 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 98 | "dev": true 99 | }, 100 | "node_modules/@tsconfig/node14": { 101 | "version": "1.0.3", 102 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 103 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 104 | "dev": true 105 | }, 106 | "node_modules/@tsconfig/node16": { 107 | "version": "1.0.4", 108 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 109 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 110 | "dev": true 111 | }, 112 | "node_modules/@types/body-parser": { 113 | "version": "1.19.3", 114 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", 115 | "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", 116 | "dev": true, 117 | "dependencies": { 118 | "@types/connect": "*", 119 | "@types/node": "*" 120 | } 121 | }, 122 | "node_modules/@types/connect": { 123 | "version": "3.4.36", 124 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", 125 | "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", 126 | "dev": true, 127 | "dependencies": { 128 | "@types/node": "*" 129 | } 130 | }, 131 | "node_modules/@types/express": { 132 | "version": "4.17.17", 133 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", 134 | "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", 135 | "dev": true, 136 | "dependencies": { 137 | "@types/body-parser": "*", 138 | "@types/express-serve-static-core": "^4.17.33", 139 | "@types/qs": "*", 140 | "@types/serve-static": "*" 141 | } 142 | }, 143 | "node_modules/@types/express-serve-static-core": { 144 | "version": "4.17.36", 145 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", 146 | "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", 147 | "dev": true, 148 | "dependencies": { 149 | "@types/node": "*", 150 | "@types/qs": "*", 151 | "@types/range-parser": "*", 152 | "@types/send": "*" 153 | } 154 | }, 155 | "node_modules/@types/http-errors": { 156 | "version": "2.0.2", 157 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", 158 | "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", 159 | "dev": true 160 | }, 161 | "node_modules/@types/mime": { 162 | "version": "1.3.2", 163 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", 164 | "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", 165 | "dev": true 166 | }, 167 | "node_modules/@types/node": { 168 | "version": "20.6.3", 169 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", 170 | "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", 171 | "dev": true 172 | }, 173 | "node_modules/@types/qs": { 174 | "version": "6.9.8", 175 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", 176 | "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", 177 | "dev": true 178 | }, 179 | "node_modules/@types/range-parser": { 180 | "version": "1.2.4", 181 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", 182 | "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", 183 | "dev": true 184 | }, 185 | "node_modules/@types/send": { 186 | "version": "0.17.1", 187 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", 188 | "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", 189 | "dev": true, 190 | "dependencies": { 191 | "@types/mime": "^1", 192 | "@types/node": "*" 193 | } 194 | }, 195 | "node_modules/@types/serve-static": { 196 | "version": "1.15.2", 197 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", 198 | "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", 199 | "dev": true, 200 | "dependencies": { 201 | "@types/http-errors": "*", 202 | "@types/mime": "*", 203 | "@types/node": "*" 204 | } 205 | }, 206 | "node_modules/@types/strip-bom": { 207 | "version": "3.0.0", 208 | "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", 209 | "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", 210 | "dev": true 211 | }, 212 | "node_modules/@types/strip-json-comments": { 213 | "version": "0.0.30", 214 | "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", 215 | "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", 216 | "dev": true 217 | }, 218 | "node_modules/accepts": { 219 | "version": "1.3.8", 220 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 221 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 222 | "dependencies": { 223 | "mime-types": "~2.1.34", 224 | "negotiator": "0.6.3" 225 | }, 226 | "engines": { 227 | "node": ">= 0.6" 228 | } 229 | }, 230 | "node_modules/acorn": { 231 | "version": "8.10.0", 232 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 233 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 234 | "dev": true, 235 | "bin": { 236 | "acorn": "bin/acorn" 237 | }, 238 | "engines": { 239 | "node": ">=0.4.0" 240 | } 241 | }, 242 | "node_modules/acorn-walk": { 243 | "version": "8.2.0", 244 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 245 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 246 | "dev": true, 247 | "engines": { 248 | "node": ">=0.4.0" 249 | } 250 | }, 251 | "node_modules/ansi-regex": { 252 | "version": "6.0.1", 253 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 254 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 255 | "dev": true, 256 | "engines": { 257 | "node": ">=12" 258 | }, 259 | "funding": { 260 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 261 | } 262 | }, 263 | "node_modules/ansi-styles": { 264 | "version": "6.2.1", 265 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 266 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 267 | "dev": true, 268 | "engines": { 269 | "node": ">=12" 270 | }, 271 | "funding": { 272 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 273 | } 274 | }, 275 | "node_modules/anymatch": { 276 | "version": "3.1.3", 277 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 278 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 279 | "dev": true, 280 | "dependencies": { 281 | "normalize-path": "^3.0.0", 282 | "picomatch": "^2.0.4" 283 | }, 284 | "engines": { 285 | "node": ">= 8" 286 | } 287 | }, 288 | "node_modules/arg": { 289 | "version": "4.1.3", 290 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 291 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 292 | "dev": true 293 | }, 294 | "node_modules/array-flatten": { 295 | "version": "1.1.1", 296 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 297 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 298 | }, 299 | "node_modules/balanced-match": { 300 | "version": "1.0.2", 301 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 302 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 303 | "dev": true 304 | }, 305 | "node_modules/binary-extensions": { 306 | "version": "2.2.0", 307 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 308 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 309 | "dev": true, 310 | "engines": { 311 | "node": ">=8" 312 | } 313 | }, 314 | "node_modules/body-parser": { 315 | "version": "1.20.1", 316 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 317 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 318 | "dependencies": { 319 | "bytes": "3.1.2", 320 | "content-type": "~1.0.4", 321 | "debug": "2.6.9", 322 | "depd": "2.0.0", 323 | "destroy": "1.2.0", 324 | "http-errors": "2.0.0", 325 | "iconv-lite": "0.4.24", 326 | "on-finished": "2.4.1", 327 | "qs": "6.11.0", 328 | "raw-body": "2.5.1", 329 | "type-is": "~1.6.18", 330 | "unpipe": "1.0.0" 331 | }, 332 | "engines": { 333 | "node": ">= 0.8", 334 | "npm": "1.2.8000 || >= 1.4.16" 335 | } 336 | }, 337 | "node_modules/brace-expansion": { 338 | "version": "2.0.1", 339 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 340 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 341 | "dev": true, 342 | "dependencies": { 343 | "balanced-match": "^1.0.0" 344 | } 345 | }, 346 | "node_modules/braces": { 347 | "version": "3.0.2", 348 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 349 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 350 | "dev": true, 351 | "dependencies": { 352 | "fill-range": "^7.0.1" 353 | }, 354 | "engines": { 355 | "node": ">=8" 356 | } 357 | }, 358 | "node_modules/buffer-from": { 359 | "version": "1.1.2", 360 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 361 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 362 | "dev": true 363 | }, 364 | "node_modules/bytes": { 365 | "version": "3.1.2", 366 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 367 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 368 | "engines": { 369 | "node": ">= 0.8" 370 | } 371 | }, 372 | "node_modules/call-bind": { 373 | "version": "1.0.2", 374 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 375 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 376 | "dependencies": { 377 | "function-bind": "^1.1.1", 378 | "get-intrinsic": "^1.0.2" 379 | }, 380 | "funding": { 381 | "url": "https://github.com/sponsors/ljharb" 382 | } 383 | }, 384 | "node_modules/chokidar": { 385 | "version": "3.5.3", 386 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 387 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 388 | "dev": true, 389 | "funding": [ 390 | { 391 | "type": "individual", 392 | "url": "https://paulmillr.com/funding/" 393 | } 394 | ], 395 | "dependencies": { 396 | "anymatch": "~3.1.2", 397 | "braces": "~3.0.2", 398 | "glob-parent": "~5.1.2", 399 | "is-binary-path": "~2.1.0", 400 | "is-glob": "~4.0.1", 401 | "normalize-path": "~3.0.0", 402 | "readdirp": "~3.6.0" 403 | }, 404 | "engines": { 405 | "node": ">= 8.10.0" 406 | }, 407 | "optionalDependencies": { 408 | "fsevents": "~2.3.2" 409 | } 410 | }, 411 | "node_modules/color-convert": { 412 | "version": "2.0.1", 413 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 414 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 415 | "dev": true, 416 | "dependencies": { 417 | "color-name": "~1.1.4" 418 | }, 419 | "engines": { 420 | "node": ">=7.0.0" 421 | } 422 | }, 423 | "node_modules/color-name": { 424 | "version": "1.1.4", 425 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 426 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 427 | "dev": true 428 | }, 429 | "node_modules/concat-map": { 430 | "version": "0.0.1", 431 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 432 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 433 | "dev": true 434 | }, 435 | "node_modules/content-disposition": { 436 | "version": "0.5.4", 437 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 438 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 439 | "dependencies": { 440 | "safe-buffer": "5.2.1" 441 | }, 442 | "engines": { 443 | "node": ">= 0.6" 444 | } 445 | }, 446 | "node_modules/content-type": { 447 | "version": "1.0.5", 448 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 449 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 450 | "engines": { 451 | "node": ">= 0.6" 452 | } 453 | }, 454 | "node_modules/cookie": { 455 | "version": "0.5.0", 456 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 457 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 458 | "engines": { 459 | "node": ">= 0.6" 460 | } 461 | }, 462 | "node_modules/cookie-signature": { 463 | "version": "1.0.6", 464 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 465 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 466 | }, 467 | "node_modules/create-require": { 468 | "version": "1.1.1", 469 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 470 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 471 | "dev": true 472 | }, 473 | "node_modules/cross-spawn": { 474 | "version": "7.0.3", 475 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 476 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 477 | "dev": true, 478 | "dependencies": { 479 | "path-key": "^3.1.0", 480 | "shebang-command": "^2.0.0", 481 | "which": "^2.0.1" 482 | }, 483 | "engines": { 484 | "node": ">= 8" 485 | } 486 | }, 487 | "node_modules/debug": { 488 | "version": "2.6.9", 489 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 490 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 491 | "dependencies": { 492 | "ms": "2.0.0" 493 | } 494 | }, 495 | "node_modules/depd": { 496 | "version": "2.0.0", 497 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 498 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 499 | "engines": { 500 | "node": ">= 0.8" 501 | } 502 | }, 503 | "node_modules/destroy": { 504 | "version": "1.2.0", 505 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 506 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 507 | "engines": { 508 | "node": ">= 0.8", 509 | "npm": "1.2.8000 || >= 1.4.16" 510 | } 511 | }, 512 | "node_modules/diff": { 513 | "version": "4.0.2", 514 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 515 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 516 | "dev": true, 517 | "engines": { 518 | "node": ">=0.3.1" 519 | } 520 | }, 521 | "node_modules/dotenv": { 522 | "version": "16.3.1", 523 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 524 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", 525 | "engines": { 526 | "node": ">=12" 527 | }, 528 | "funding": { 529 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 530 | } 531 | }, 532 | "node_modules/dynamic-dedupe": { 533 | "version": "0.3.0", 534 | "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", 535 | "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", 536 | "dev": true, 537 | "dependencies": { 538 | "xtend": "^4.0.0" 539 | } 540 | }, 541 | "node_modules/eastasianwidth": { 542 | "version": "0.2.0", 543 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 544 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 545 | "dev": true 546 | }, 547 | "node_modules/ee-first": { 548 | "version": "1.1.1", 549 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 550 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 551 | }, 552 | "node_modules/emoji-regex": { 553 | "version": "9.2.2", 554 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 555 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 556 | "dev": true 557 | }, 558 | "node_modules/encodeurl": { 559 | "version": "1.0.2", 560 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 561 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 562 | "engines": { 563 | "node": ">= 0.8" 564 | } 565 | }, 566 | "node_modules/env-var": { 567 | "version": "7.4.1", 568 | "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.4.1.tgz", 569 | "integrity": "sha512-H8Ga2SbXTQwt6MKEawWSvmxoH1+J6bnAXkuyE7eDvbGmrhIL2i+XGjzGM3DFHcJu8GY1zY9/AnBJY8uGQYPHiw==", 570 | "engines": { 571 | "node": ">=10" 572 | } 573 | }, 574 | "node_modules/escape-html": { 575 | "version": "1.0.3", 576 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 577 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 578 | }, 579 | "node_modules/etag": { 580 | "version": "1.8.1", 581 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 582 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 583 | "engines": { 584 | "node": ">= 0.6" 585 | } 586 | }, 587 | "node_modules/express": { 588 | "version": "4.18.2", 589 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 590 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 591 | "dependencies": { 592 | "accepts": "~1.3.8", 593 | "array-flatten": "1.1.1", 594 | "body-parser": "1.20.1", 595 | "content-disposition": "0.5.4", 596 | "content-type": "~1.0.4", 597 | "cookie": "0.5.0", 598 | "cookie-signature": "1.0.6", 599 | "debug": "2.6.9", 600 | "depd": "2.0.0", 601 | "encodeurl": "~1.0.2", 602 | "escape-html": "~1.0.3", 603 | "etag": "~1.8.1", 604 | "finalhandler": "1.2.0", 605 | "fresh": "0.5.2", 606 | "http-errors": "2.0.0", 607 | "merge-descriptors": "1.0.1", 608 | "methods": "~1.1.2", 609 | "on-finished": "2.4.1", 610 | "parseurl": "~1.3.3", 611 | "path-to-regexp": "0.1.7", 612 | "proxy-addr": "~2.0.7", 613 | "qs": "6.11.0", 614 | "range-parser": "~1.2.1", 615 | "safe-buffer": "5.2.1", 616 | "send": "0.18.0", 617 | "serve-static": "1.15.0", 618 | "setprototypeof": "1.2.0", 619 | "statuses": "2.0.1", 620 | "type-is": "~1.6.18", 621 | "utils-merge": "1.0.1", 622 | "vary": "~1.1.2" 623 | }, 624 | "engines": { 625 | "node": ">= 0.10.0" 626 | } 627 | }, 628 | "node_modules/fill-range": { 629 | "version": "7.0.1", 630 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 631 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 632 | "dev": true, 633 | "dependencies": { 634 | "to-regex-range": "^5.0.1" 635 | }, 636 | "engines": { 637 | "node": ">=8" 638 | } 639 | }, 640 | "node_modules/finalhandler": { 641 | "version": "1.2.0", 642 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 643 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 644 | "dependencies": { 645 | "debug": "2.6.9", 646 | "encodeurl": "~1.0.2", 647 | "escape-html": "~1.0.3", 648 | "on-finished": "2.4.1", 649 | "parseurl": "~1.3.3", 650 | "statuses": "2.0.1", 651 | "unpipe": "~1.0.0" 652 | }, 653 | "engines": { 654 | "node": ">= 0.8" 655 | } 656 | }, 657 | "node_modules/foreground-child": { 658 | "version": "3.1.1", 659 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", 660 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", 661 | "dev": true, 662 | "dependencies": { 663 | "cross-spawn": "^7.0.0", 664 | "signal-exit": "^4.0.1" 665 | }, 666 | "engines": { 667 | "node": ">=14" 668 | }, 669 | "funding": { 670 | "url": "https://github.com/sponsors/isaacs" 671 | } 672 | }, 673 | "node_modules/forwarded": { 674 | "version": "0.2.0", 675 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 676 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 677 | "engines": { 678 | "node": ">= 0.6" 679 | } 680 | }, 681 | "node_modules/fresh": { 682 | "version": "0.5.2", 683 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 684 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 685 | "engines": { 686 | "node": ">= 0.6" 687 | } 688 | }, 689 | "node_modules/fs.realpath": { 690 | "version": "1.0.0", 691 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 692 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 693 | "dev": true 694 | }, 695 | "node_modules/fsevents": { 696 | "version": "2.3.3", 697 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 698 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 699 | "dev": true, 700 | "hasInstallScript": true, 701 | "optional": true, 702 | "os": [ 703 | "darwin" 704 | ], 705 | "engines": { 706 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 707 | } 708 | }, 709 | "node_modules/function-bind": { 710 | "version": "1.1.1", 711 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 712 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 713 | }, 714 | "node_modules/get-intrinsic": { 715 | "version": "1.2.1", 716 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 717 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 718 | "dependencies": { 719 | "function-bind": "^1.1.1", 720 | "has": "^1.0.3", 721 | "has-proto": "^1.0.1", 722 | "has-symbols": "^1.0.3" 723 | }, 724 | "funding": { 725 | "url": "https://github.com/sponsors/ljharb" 726 | } 727 | }, 728 | "node_modules/glob": { 729 | "version": "10.3.5", 730 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", 731 | "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", 732 | "dev": true, 733 | "dependencies": { 734 | "foreground-child": "^3.1.0", 735 | "jackspeak": "^2.0.3", 736 | "minimatch": "^9.0.1", 737 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", 738 | "path-scurry": "^1.10.1" 739 | }, 740 | "bin": { 741 | "glob": "dist/cjs/src/bin.js" 742 | }, 743 | "engines": { 744 | "node": ">=16 || 14 >=14.17" 745 | }, 746 | "funding": { 747 | "url": "https://github.com/sponsors/isaacs" 748 | } 749 | }, 750 | "node_modules/glob-parent": { 751 | "version": "5.1.2", 752 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 753 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 754 | "dev": true, 755 | "dependencies": { 756 | "is-glob": "^4.0.1" 757 | }, 758 | "engines": { 759 | "node": ">= 6" 760 | } 761 | }, 762 | "node_modules/has": { 763 | "version": "1.0.3", 764 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 765 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 766 | "dependencies": { 767 | "function-bind": "^1.1.1" 768 | }, 769 | "engines": { 770 | "node": ">= 0.4.0" 771 | } 772 | }, 773 | "node_modules/has-proto": { 774 | "version": "1.0.1", 775 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 776 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 777 | "engines": { 778 | "node": ">= 0.4" 779 | }, 780 | "funding": { 781 | "url": "https://github.com/sponsors/ljharb" 782 | } 783 | }, 784 | "node_modules/has-symbols": { 785 | "version": "1.0.3", 786 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 787 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 788 | "engines": { 789 | "node": ">= 0.4" 790 | }, 791 | "funding": { 792 | "url": "https://github.com/sponsors/ljharb" 793 | } 794 | }, 795 | "node_modules/http-errors": { 796 | "version": "2.0.0", 797 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 798 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 799 | "dependencies": { 800 | "depd": "2.0.0", 801 | "inherits": "2.0.4", 802 | "setprototypeof": "1.2.0", 803 | "statuses": "2.0.1", 804 | "toidentifier": "1.0.1" 805 | }, 806 | "engines": { 807 | "node": ">= 0.8" 808 | } 809 | }, 810 | "node_modules/iconv-lite": { 811 | "version": "0.4.24", 812 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 813 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 814 | "dependencies": { 815 | "safer-buffer": ">= 2.1.2 < 3" 816 | }, 817 | "engines": { 818 | "node": ">=0.10.0" 819 | } 820 | }, 821 | "node_modules/inflight": { 822 | "version": "1.0.6", 823 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 824 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 825 | "dev": true, 826 | "dependencies": { 827 | "once": "^1.3.0", 828 | "wrappy": "1" 829 | } 830 | }, 831 | "node_modules/inherits": { 832 | "version": "2.0.4", 833 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 834 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 835 | }, 836 | "node_modules/ipaddr.js": { 837 | "version": "1.9.1", 838 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 839 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 840 | "engines": { 841 | "node": ">= 0.10" 842 | } 843 | }, 844 | "node_modules/is-binary-path": { 845 | "version": "2.1.0", 846 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 847 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 848 | "dev": true, 849 | "dependencies": { 850 | "binary-extensions": "^2.0.0" 851 | }, 852 | "engines": { 853 | "node": ">=8" 854 | } 855 | }, 856 | "node_modules/is-core-module": { 857 | "version": "2.13.0", 858 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 859 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 860 | "dev": true, 861 | "dependencies": { 862 | "has": "^1.0.3" 863 | }, 864 | "funding": { 865 | "url": "https://github.com/sponsors/ljharb" 866 | } 867 | }, 868 | "node_modules/is-extglob": { 869 | "version": "2.1.1", 870 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 871 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 872 | "dev": true, 873 | "engines": { 874 | "node": ">=0.10.0" 875 | } 876 | }, 877 | "node_modules/is-fullwidth-code-point": { 878 | "version": "3.0.0", 879 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 880 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 881 | "dev": true, 882 | "engines": { 883 | "node": ">=8" 884 | } 885 | }, 886 | "node_modules/is-glob": { 887 | "version": "4.0.3", 888 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 889 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 890 | "dev": true, 891 | "dependencies": { 892 | "is-extglob": "^2.1.1" 893 | }, 894 | "engines": { 895 | "node": ">=0.10.0" 896 | } 897 | }, 898 | "node_modules/is-number": { 899 | "version": "7.0.0", 900 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 901 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 902 | "dev": true, 903 | "engines": { 904 | "node": ">=0.12.0" 905 | } 906 | }, 907 | "node_modules/isexe": { 908 | "version": "2.0.0", 909 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 910 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 911 | "dev": true 912 | }, 913 | "node_modules/jackspeak": { 914 | "version": "2.3.3", 915 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", 916 | "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", 917 | "dev": true, 918 | "dependencies": { 919 | "@isaacs/cliui": "^8.0.2" 920 | }, 921 | "engines": { 922 | "node": ">=14" 923 | }, 924 | "funding": { 925 | "url": "https://github.com/sponsors/isaacs" 926 | }, 927 | "optionalDependencies": { 928 | "@pkgjs/parseargs": "^0.11.0" 929 | } 930 | }, 931 | "node_modules/lru-cache": { 932 | "version": "10.0.1", 933 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", 934 | "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", 935 | "dev": true, 936 | "engines": { 937 | "node": "14 || >=16.14" 938 | } 939 | }, 940 | "node_modules/make-error": { 941 | "version": "1.3.6", 942 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 943 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 944 | "dev": true 945 | }, 946 | "node_modules/media-typer": { 947 | "version": "0.3.0", 948 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 949 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 950 | "engines": { 951 | "node": ">= 0.6" 952 | } 953 | }, 954 | "node_modules/merge-descriptors": { 955 | "version": "1.0.1", 956 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 957 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 958 | }, 959 | "node_modules/methods": { 960 | "version": "1.1.2", 961 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 962 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 963 | "engines": { 964 | "node": ">= 0.6" 965 | } 966 | }, 967 | "node_modules/mime": { 968 | "version": "1.6.0", 969 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 970 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 971 | "bin": { 972 | "mime": "cli.js" 973 | }, 974 | "engines": { 975 | "node": ">=4" 976 | } 977 | }, 978 | "node_modules/mime-db": { 979 | "version": "1.52.0", 980 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 981 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 982 | "engines": { 983 | "node": ">= 0.6" 984 | } 985 | }, 986 | "node_modules/mime-types": { 987 | "version": "2.1.35", 988 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 989 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 990 | "dependencies": { 991 | "mime-db": "1.52.0" 992 | }, 993 | "engines": { 994 | "node": ">= 0.6" 995 | } 996 | }, 997 | "node_modules/minimatch": { 998 | "version": "9.0.3", 999 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 1000 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 1001 | "dev": true, 1002 | "dependencies": { 1003 | "brace-expansion": "^2.0.1" 1004 | }, 1005 | "engines": { 1006 | "node": ">=16 || 14 >=14.17" 1007 | }, 1008 | "funding": { 1009 | "url": "https://github.com/sponsors/isaacs" 1010 | } 1011 | }, 1012 | "node_modules/minimist": { 1013 | "version": "1.2.8", 1014 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1015 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1016 | "dev": true, 1017 | "funding": { 1018 | "url": "https://github.com/sponsors/ljharb" 1019 | } 1020 | }, 1021 | "node_modules/minipass": { 1022 | "version": "7.0.3", 1023 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", 1024 | "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", 1025 | "dev": true, 1026 | "engines": { 1027 | "node": ">=16 || 14 >=14.17" 1028 | } 1029 | }, 1030 | "node_modules/mkdirp": { 1031 | "version": "1.0.4", 1032 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1033 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1034 | "dev": true, 1035 | "bin": { 1036 | "mkdirp": "bin/cmd.js" 1037 | }, 1038 | "engines": { 1039 | "node": ">=10" 1040 | } 1041 | }, 1042 | "node_modules/ms": { 1043 | "version": "2.0.0", 1044 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1045 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1046 | }, 1047 | "node_modules/negotiator": { 1048 | "version": "0.6.3", 1049 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1050 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1051 | "engines": { 1052 | "node": ">= 0.6" 1053 | } 1054 | }, 1055 | "node_modules/normalize-path": { 1056 | "version": "3.0.0", 1057 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1058 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1059 | "dev": true, 1060 | "engines": { 1061 | "node": ">=0.10.0" 1062 | } 1063 | }, 1064 | "node_modules/object-inspect": { 1065 | "version": "1.12.3", 1066 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1067 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1068 | "funding": { 1069 | "url": "https://github.com/sponsors/ljharb" 1070 | } 1071 | }, 1072 | "node_modules/on-finished": { 1073 | "version": "2.4.1", 1074 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1075 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1076 | "dependencies": { 1077 | "ee-first": "1.1.1" 1078 | }, 1079 | "engines": { 1080 | "node": ">= 0.8" 1081 | } 1082 | }, 1083 | "node_modules/once": { 1084 | "version": "1.4.0", 1085 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1086 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1087 | "dev": true, 1088 | "dependencies": { 1089 | "wrappy": "1" 1090 | } 1091 | }, 1092 | "node_modules/parseurl": { 1093 | "version": "1.3.3", 1094 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1095 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1096 | "engines": { 1097 | "node": ">= 0.8" 1098 | } 1099 | }, 1100 | "node_modules/path-is-absolute": { 1101 | "version": "1.0.1", 1102 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1103 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1104 | "dev": true, 1105 | "engines": { 1106 | "node": ">=0.10.0" 1107 | } 1108 | }, 1109 | "node_modules/path-key": { 1110 | "version": "3.1.1", 1111 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1112 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1113 | "dev": true, 1114 | "engines": { 1115 | "node": ">=8" 1116 | } 1117 | }, 1118 | "node_modules/path-parse": { 1119 | "version": "1.0.7", 1120 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1121 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1122 | "dev": true 1123 | }, 1124 | "node_modules/path-scurry": { 1125 | "version": "1.10.1", 1126 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", 1127 | "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", 1128 | "dev": true, 1129 | "dependencies": { 1130 | "lru-cache": "^9.1.1 || ^10.0.0", 1131 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1132 | }, 1133 | "engines": { 1134 | "node": ">=16 || 14 >=14.17" 1135 | }, 1136 | "funding": { 1137 | "url": "https://github.com/sponsors/isaacs" 1138 | } 1139 | }, 1140 | "node_modules/path-to-regexp": { 1141 | "version": "0.1.7", 1142 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1143 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1144 | }, 1145 | "node_modules/picomatch": { 1146 | "version": "2.3.1", 1147 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1148 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1149 | "dev": true, 1150 | "engines": { 1151 | "node": ">=8.6" 1152 | }, 1153 | "funding": { 1154 | "url": "https://github.com/sponsors/jonschlinkert" 1155 | } 1156 | }, 1157 | "node_modules/proxy-addr": { 1158 | "version": "2.0.7", 1159 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1160 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1161 | "dependencies": { 1162 | "forwarded": "0.2.0", 1163 | "ipaddr.js": "1.9.1" 1164 | }, 1165 | "engines": { 1166 | "node": ">= 0.10" 1167 | } 1168 | }, 1169 | "node_modules/qs": { 1170 | "version": "6.11.0", 1171 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1172 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1173 | "dependencies": { 1174 | "side-channel": "^1.0.4" 1175 | }, 1176 | "engines": { 1177 | "node": ">=0.6" 1178 | }, 1179 | "funding": { 1180 | "url": "https://github.com/sponsors/ljharb" 1181 | } 1182 | }, 1183 | "node_modules/range-parser": { 1184 | "version": "1.2.1", 1185 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1186 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1187 | "engines": { 1188 | "node": ">= 0.6" 1189 | } 1190 | }, 1191 | "node_modules/raw-body": { 1192 | "version": "2.5.1", 1193 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1194 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1195 | "dependencies": { 1196 | "bytes": "3.1.2", 1197 | "http-errors": "2.0.0", 1198 | "iconv-lite": "0.4.24", 1199 | "unpipe": "1.0.0" 1200 | }, 1201 | "engines": { 1202 | "node": ">= 0.8" 1203 | } 1204 | }, 1205 | "node_modules/readdirp": { 1206 | "version": "3.6.0", 1207 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1208 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1209 | "dev": true, 1210 | "dependencies": { 1211 | "picomatch": "^2.2.1" 1212 | }, 1213 | "engines": { 1214 | "node": ">=8.10.0" 1215 | } 1216 | }, 1217 | "node_modules/resolve": { 1218 | "version": "1.22.6", 1219 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", 1220 | "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", 1221 | "dev": true, 1222 | "dependencies": { 1223 | "is-core-module": "^2.13.0", 1224 | "path-parse": "^1.0.7", 1225 | "supports-preserve-symlinks-flag": "^1.0.0" 1226 | }, 1227 | "bin": { 1228 | "resolve": "bin/resolve" 1229 | }, 1230 | "funding": { 1231 | "url": "https://github.com/sponsors/ljharb" 1232 | } 1233 | }, 1234 | "node_modules/rimraf": { 1235 | "version": "5.0.1", 1236 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", 1237 | "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", 1238 | "dev": true, 1239 | "dependencies": { 1240 | "glob": "^10.2.5" 1241 | }, 1242 | "bin": { 1243 | "rimraf": "dist/cjs/src/bin.js" 1244 | }, 1245 | "engines": { 1246 | "node": ">=14" 1247 | }, 1248 | "funding": { 1249 | "url": "https://github.com/sponsors/isaacs" 1250 | } 1251 | }, 1252 | "node_modules/safe-buffer": { 1253 | "version": "5.2.1", 1254 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1255 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1256 | "funding": [ 1257 | { 1258 | "type": "github", 1259 | "url": "https://github.com/sponsors/feross" 1260 | }, 1261 | { 1262 | "type": "patreon", 1263 | "url": "https://www.patreon.com/feross" 1264 | }, 1265 | { 1266 | "type": "consulting", 1267 | "url": "https://feross.org/support" 1268 | } 1269 | ] 1270 | }, 1271 | "node_modules/safer-buffer": { 1272 | "version": "2.1.2", 1273 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1274 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1275 | }, 1276 | "node_modules/send": { 1277 | "version": "0.18.0", 1278 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1279 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1280 | "dependencies": { 1281 | "debug": "2.6.9", 1282 | "depd": "2.0.0", 1283 | "destroy": "1.2.0", 1284 | "encodeurl": "~1.0.2", 1285 | "escape-html": "~1.0.3", 1286 | "etag": "~1.8.1", 1287 | "fresh": "0.5.2", 1288 | "http-errors": "2.0.0", 1289 | "mime": "1.6.0", 1290 | "ms": "2.1.3", 1291 | "on-finished": "2.4.1", 1292 | "range-parser": "~1.2.1", 1293 | "statuses": "2.0.1" 1294 | }, 1295 | "engines": { 1296 | "node": ">= 0.8.0" 1297 | } 1298 | }, 1299 | "node_modules/send/node_modules/ms": { 1300 | "version": "2.1.3", 1301 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1302 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1303 | }, 1304 | "node_modules/serve-static": { 1305 | "version": "1.15.0", 1306 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1307 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1308 | "dependencies": { 1309 | "encodeurl": "~1.0.2", 1310 | "escape-html": "~1.0.3", 1311 | "parseurl": "~1.3.3", 1312 | "send": "0.18.0" 1313 | }, 1314 | "engines": { 1315 | "node": ">= 0.8.0" 1316 | } 1317 | }, 1318 | "node_modules/setprototypeof": { 1319 | "version": "1.2.0", 1320 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1321 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1322 | }, 1323 | "node_modules/shebang-command": { 1324 | "version": "2.0.0", 1325 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1326 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1327 | "dev": true, 1328 | "dependencies": { 1329 | "shebang-regex": "^3.0.0" 1330 | }, 1331 | "engines": { 1332 | "node": ">=8" 1333 | } 1334 | }, 1335 | "node_modules/shebang-regex": { 1336 | "version": "3.0.0", 1337 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1338 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1339 | "dev": true, 1340 | "engines": { 1341 | "node": ">=8" 1342 | } 1343 | }, 1344 | "node_modules/side-channel": { 1345 | "version": "1.0.4", 1346 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1347 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1348 | "dependencies": { 1349 | "call-bind": "^1.0.0", 1350 | "get-intrinsic": "^1.0.2", 1351 | "object-inspect": "^1.9.0" 1352 | }, 1353 | "funding": { 1354 | "url": "https://github.com/sponsors/ljharb" 1355 | } 1356 | }, 1357 | "node_modules/signal-exit": { 1358 | "version": "4.1.0", 1359 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1360 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1361 | "dev": true, 1362 | "engines": { 1363 | "node": ">=14" 1364 | }, 1365 | "funding": { 1366 | "url": "https://github.com/sponsors/isaacs" 1367 | } 1368 | }, 1369 | "node_modules/source-map": { 1370 | "version": "0.6.1", 1371 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1372 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1373 | "dev": true, 1374 | "engines": { 1375 | "node": ">=0.10.0" 1376 | } 1377 | }, 1378 | "node_modules/source-map-support": { 1379 | "version": "0.5.21", 1380 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1381 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1382 | "dev": true, 1383 | "dependencies": { 1384 | "buffer-from": "^1.0.0", 1385 | "source-map": "^0.6.0" 1386 | } 1387 | }, 1388 | "node_modules/statuses": { 1389 | "version": "2.0.1", 1390 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1391 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1392 | "engines": { 1393 | "node": ">= 0.8" 1394 | } 1395 | }, 1396 | "node_modules/string-width": { 1397 | "version": "5.1.2", 1398 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1399 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1400 | "dev": true, 1401 | "dependencies": { 1402 | "eastasianwidth": "^0.2.0", 1403 | "emoji-regex": "^9.2.2", 1404 | "strip-ansi": "^7.0.1" 1405 | }, 1406 | "engines": { 1407 | "node": ">=12" 1408 | }, 1409 | "funding": { 1410 | "url": "https://github.com/sponsors/sindresorhus" 1411 | } 1412 | }, 1413 | "node_modules/string-width-cjs": { 1414 | "name": "string-width", 1415 | "version": "4.2.3", 1416 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1417 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "emoji-regex": "^8.0.0", 1421 | "is-fullwidth-code-point": "^3.0.0", 1422 | "strip-ansi": "^6.0.1" 1423 | }, 1424 | "engines": { 1425 | "node": ">=8" 1426 | } 1427 | }, 1428 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 1429 | "version": "5.0.1", 1430 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1431 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1432 | "dev": true, 1433 | "engines": { 1434 | "node": ">=8" 1435 | } 1436 | }, 1437 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1438 | "version": "8.0.0", 1439 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1440 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1441 | "dev": true 1442 | }, 1443 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 1444 | "version": "6.0.1", 1445 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1446 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1447 | "dev": true, 1448 | "dependencies": { 1449 | "ansi-regex": "^5.0.1" 1450 | }, 1451 | "engines": { 1452 | "node": ">=8" 1453 | } 1454 | }, 1455 | "node_modules/strip-ansi": { 1456 | "version": "7.1.0", 1457 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1458 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1459 | "dev": true, 1460 | "dependencies": { 1461 | "ansi-regex": "^6.0.1" 1462 | }, 1463 | "engines": { 1464 | "node": ">=12" 1465 | }, 1466 | "funding": { 1467 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1468 | } 1469 | }, 1470 | "node_modules/strip-ansi-cjs": { 1471 | "name": "strip-ansi", 1472 | "version": "6.0.1", 1473 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1474 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1475 | "dev": true, 1476 | "dependencies": { 1477 | "ansi-regex": "^5.0.1" 1478 | }, 1479 | "engines": { 1480 | "node": ">=8" 1481 | } 1482 | }, 1483 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 1484 | "version": "5.0.1", 1485 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1486 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1487 | "dev": true, 1488 | "engines": { 1489 | "node": ">=8" 1490 | } 1491 | }, 1492 | "node_modules/strip-bom": { 1493 | "version": "3.0.0", 1494 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1495 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 1496 | "dev": true, 1497 | "engines": { 1498 | "node": ">=4" 1499 | } 1500 | }, 1501 | "node_modules/strip-json-comments": { 1502 | "version": "2.0.1", 1503 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1504 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 1505 | "dev": true, 1506 | "engines": { 1507 | "node": ">=0.10.0" 1508 | } 1509 | }, 1510 | "node_modules/supports-preserve-symlinks-flag": { 1511 | "version": "1.0.0", 1512 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1513 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1514 | "dev": true, 1515 | "engines": { 1516 | "node": ">= 0.4" 1517 | }, 1518 | "funding": { 1519 | "url": "https://github.com/sponsors/ljharb" 1520 | } 1521 | }, 1522 | "node_modules/to-regex-range": { 1523 | "version": "5.0.1", 1524 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1525 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1526 | "dev": true, 1527 | "dependencies": { 1528 | "is-number": "^7.0.0" 1529 | }, 1530 | "engines": { 1531 | "node": ">=8.0" 1532 | } 1533 | }, 1534 | "node_modules/toidentifier": { 1535 | "version": "1.0.1", 1536 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1537 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1538 | "engines": { 1539 | "node": ">=0.6" 1540 | } 1541 | }, 1542 | "node_modules/tree-kill": { 1543 | "version": "1.2.2", 1544 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 1545 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 1546 | "dev": true, 1547 | "bin": { 1548 | "tree-kill": "cli.js" 1549 | } 1550 | }, 1551 | "node_modules/ts-node": { 1552 | "version": "10.9.1", 1553 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 1554 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 1555 | "dev": true, 1556 | "dependencies": { 1557 | "@cspotcode/source-map-support": "^0.8.0", 1558 | "@tsconfig/node10": "^1.0.7", 1559 | "@tsconfig/node12": "^1.0.7", 1560 | "@tsconfig/node14": "^1.0.0", 1561 | "@tsconfig/node16": "^1.0.2", 1562 | "acorn": "^8.4.1", 1563 | "acorn-walk": "^8.1.1", 1564 | "arg": "^4.1.0", 1565 | "create-require": "^1.1.0", 1566 | "diff": "^4.0.1", 1567 | "make-error": "^1.1.1", 1568 | "v8-compile-cache-lib": "^3.0.1", 1569 | "yn": "3.1.1" 1570 | }, 1571 | "bin": { 1572 | "ts-node": "dist/bin.js", 1573 | "ts-node-cwd": "dist/bin-cwd.js", 1574 | "ts-node-esm": "dist/bin-esm.js", 1575 | "ts-node-script": "dist/bin-script.js", 1576 | "ts-node-transpile-only": "dist/bin-transpile.js", 1577 | "ts-script": "dist/bin-script-deprecated.js" 1578 | }, 1579 | "peerDependencies": { 1580 | "@swc/core": ">=1.2.50", 1581 | "@swc/wasm": ">=1.2.50", 1582 | "@types/node": "*", 1583 | "typescript": ">=2.7" 1584 | }, 1585 | "peerDependenciesMeta": { 1586 | "@swc/core": { 1587 | "optional": true 1588 | }, 1589 | "@swc/wasm": { 1590 | "optional": true 1591 | } 1592 | } 1593 | }, 1594 | "node_modules/ts-node-dev": { 1595 | "version": "2.0.0", 1596 | "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", 1597 | "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", 1598 | "dev": true, 1599 | "dependencies": { 1600 | "chokidar": "^3.5.1", 1601 | "dynamic-dedupe": "^0.3.0", 1602 | "minimist": "^1.2.6", 1603 | "mkdirp": "^1.0.4", 1604 | "resolve": "^1.0.0", 1605 | "rimraf": "^2.6.1", 1606 | "source-map-support": "^0.5.12", 1607 | "tree-kill": "^1.2.2", 1608 | "ts-node": "^10.4.0", 1609 | "tsconfig": "^7.0.0" 1610 | }, 1611 | "bin": { 1612 | "ts-node-dev": "lib/bin.js", 1613 | "tsnd": "lib/bin.js" 1614 | }, 1615 | "engines": { 1616 | "node": ">=0.8.0" 1617 | }, 1618 | "peerDependencies": { 1619 | "node-notifier": "*", 1620 | "typescript": "*" 1621 | }, 1622 | "peerDependenciesMeta": { 1623 | "node-notifier": { 1624 | "optional": true 1625 | } 1626 | } 1627 | }, 1628 | "node_modules/ts-node-dev/node_modules/brace-expansion": { 1629 | "version": "1.1.11", 1630 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1631 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1632 | "dev": true, 1633 | "dependencies": { 1634 | "balanced-match": "^1.0.0", 1635 | "concat-map": "0.0.1" 1636 | } 1637 | }, 1638 | "node_modules/ts-node-dev/node_modules/glob": { 1639 | "version": "7.2.3", 1640 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1641 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1642 | "dev": true, 1643 | "dependencies": { 1644 | "fs.realpath": "^1.0.0", 1645 | "inflight": "^1.0.4", 1646 | "inherits": "2", 1647 | "minimatch": "^3.1.1", 1648 | "once": "^1.3.0", 1649 | "path-is-absolute": "^1.0.0" 1650 | }, 1651 | "engines": { 1652 | "node": "*" 1653 | }, 1654 | "funding": { 1655 | "url": "https://github.com/sponsors/isaacs" 1656 | } 1657 | }, 1658 | "node_modules/ts-node-dev/node_modules/minimatch": { 1659 | "version": "3.1.2", 1660 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1661 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1662 | "dev": true, 1663 | "dependencies": { 1664 | "brace-expansion": "^1.1.7" 1665 | }, 1666 | "engines": { 1667 | "node": "*" 1668 | } 1669 | }, 1670 | "node_modules/ts-node-dev/node_modules/rimraf": { 1671 | "version": "2.7.1", 1672 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 1673 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 1674 | "dev": true, 1675 | "dependencies": { 1676 | "glob": "^7.1.3" 1677 | }, 1678 | "bin": { 1679 | "rimraf": "bin.js" 1680 | } 1681 | }, 1682 | "node_modules/tsconfig": { 1683 | "version": "7.0.0", 1684 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", 1685 | "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", 1686 | "dev": true, 1687 | "dependencies": { 1688 | "@types/strip-bom": "^3.0.0", 1689 | "@types/strip-json-comments": "0.0.30", 1690 | "strip-bom": "^3.0.0", 1691 | "strip-json-comments": "^2.0.0" 1692 | } 1693 | }, 1694 | "node_modules/type-is": { 1695 | "version": "1.6.18", 1696 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1697 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1698 | "dependencies": { 1699 | "media-typer": "0.3.0", 1700 | "mime-types": "~2.1.24" 1701 | }, 1702 | "engines": { 1703 | "node": ">= 0.6" 1704 | } 1705 | }, 1706 | "node_modules/typescript": { 1707 | "version": "5.2.2", 1708 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", 1709 | "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", 1710 | "dev": true, 1711 | "bin": { 1712 | "tsc": "bin/tsc", 1713 | "tsserver": "bin/tsserver" 1714 | }, 1715 | "engines": { 1716 | "node": ">=14.17" 1717 | } 1718 | }, 1719 | "node_modules/unpipe": { 1720 | "version": "1.0.0", 1721 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1722 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1723 | "engines": { 1724 | "node": ">= 0.8" 1725 | } 1726 | }, 1727 | "node_modules/utils-merge": { 1728 | "version": "1.0.1", 1729 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1730 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1731 | "engines": { 1732 | "node": ">= 0.4.0" 1733 | } 1734 | }, 1735 | "node_modules/v8-compile-cache-lib": { 1736 | "version": "3.0.1", 1737 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 1738 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 1739 | "dev": true 1740 | }, 1741 | "node_modules/vary": { 1742 | "version": "1.1.2", 1743 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1744 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1745 | "engines": { 1746 | "node": ">= 0.8" 1747 | } 1748 | }, 1749 | "node_modules/which": { 1750 | "version": "2.0.2", 1751 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1752 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1753 | "dev": true, 1754 | "dependencies": { 1755 | "isexe": "^2.0.0" 1756 | }, 1757 | "bin": { 1758 | "node-which": "bin/node-which" 1759 | }, 1760 | "engines": { 1761 | "node": ">= 8" 1762 | } 1763 | }, 1764 | "node_modules/wrap-ansi": { 1765 | "version": "8.1.0", 1766 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1767 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1768 | "dev": true, 1769 | "dependencies": { 1770 | "ansi-styles": "^6.1.0", 1771 | "string-width": "^5.0.1", 1772 | "strip-ansi": "^7.0.1" 1773 | }, 1774 | "engines": { 1775 | "node": ">=12" 1776 | }, 1777 | "funding": { 1778 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1779 | } 1780 | }, 1781 | "node_modules/wrap-ansi-cjs": { 1782 | "name": "wrap-ansi", 1783 | "version": "7.0.0", 1784 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1785 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1786 | "dev": true, 1787 | "dependencies": { 1788 | "ansi-styles": "^4.0.0", 1789 | "string-width": "^4.1.0", 1790 | "strip-ansi": "^6.0.0" 1791 | }, 1792 | "engines": { 1793 | "node": ">=10" 1794 | }, 1795 | "funding": { 1796 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1797 | } 1798 | }, 1799 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 1800 | "version": "5.0.1", 1801 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1802 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1803 | "dev": true, 1804 | "engines": { 1805 | "node": ">=8" 1806 | } 1807 | }, 1808 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 1809 | "version": "4.3.0", 1810 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1811 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1812 | "dev": true, 1813 | "dependencies": { 1814 | "color-convert": "^2.0.1" 1815 | }, 1816 | "engines": { 1817 | "node": ">=8" 1818 | }, 1819 | "funding": { 1820 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1821 | } 1822 | }, 1823 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 1824 | "version": "8.0.0", 1825 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1826 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1827 | "dev": true 1828 | }, 1829 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 1830 | "version": "4.2.3", 1831 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1832 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1833 | "dev": true, 1834 | "dependencies": { 1835 | "emoji-regex": "^8.0.0", 1836 | "is-fullwidth-code-point": "^3.0.0", 1837 | "strip-ansi": "^6.0.1" 1838 | }, 1839 | "engines": { 1840 | "node": ">=8" 1841 | } 1842 | }, 1843 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 1844 | "version": "6.0.1", 1845 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1846 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1847 | "dev": true, 1848 | "dependencies": { 1849 | "ansi-regex": "^5.0.1" 1850 | }, 1851 | "engines": { 1852 | "node": ">=8" 1853 | } 1854 | }, 1855 | "node_modules/wrappy": { 1856 | "version": "1.0.2", 1857 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1858 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1859 | "dev": true 1860 | }, 1861 | "node_modules/xtend": { 1862 | "version": "4.0.2", 1863 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1864 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1865 | "dev": true, 1866 | "engines": { 1867 | "node": ">=0.4" 1868 | } 1869 | }, 1870 | "node_modules/yn": { 1871 | "version": "3.1.1", 1872 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 1873 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 1874 | "dev": true, 1875 | "engines": { 1876 | "node": ">=6" 1877 | } 1878 | } 1879 | } 1880 | } 1881 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "09-github-webhooks", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "tsnd --respawn --clear src/app.ts", 8 | "build": "rimraf ./dist && tsc", 9 | "start": "npm run build && node dist/app.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@types/express": "^4.17.17", 16 | "@types/node": "^20.6.3", 17 | "rimraf": "^5.0.1", 18 | "ts-node-dev": "^2.0.0", 19 | "typescript": "^5.2.2" 20 | }, 21 | "dependencies": { 22 | "dotenv": "^16.3.1", 23 | "env-var": "^7.4.1", 24 | "express": "^4.18.2" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import { envs } from './config'; 3 | import { GithubController } from './presentation/github/controller'; 4 | 5 | 6 | (()=> { 7 | main(); 8 | })(); 9 | 10 | 11 | function main() { 12 | 13 | const app = express(); 14 | 15 | const controller = new GithubController(); 16 | 17 | app.use( express.json() ); 18 | 19 | app.post('/api/github', controller.webhookHandler ); 20 | 21 | 22 | 23 | app.listen( envs.PORT, () => { 24 | console.log(`App running on port ${ envs.PORT }`); 25 | }) 26 | 27 | 28 | } -------------------------------------------------------------------------------- /src/config/envs.ts: -------------------------------------------------------------------------------- 1 | import 'dotenv/config'; 2 | import {get} from 'env-var'; 3 | 4 | 5 | 6 | export const envs = { 7 | 8 | PORT: get('PORT').required().asPortNumber(), 9 | 10 | DISCORD_WEBHOOK_URL: get('DISCORD_WEBHOOK_URL').required().asString(), 11 | 12 | } -------------------------------------------------------------------------------- /src/config/index.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | export * from './envs'; -------------------------------------------------------------------------------- /src/interfaces/github-issue.interface.ts: -------------------------------------------------------------------------------- 1 | // Generated by https://quicktype.io 2 | 3 | export interface GitHubIssuePayload { 4 | action: string; 5 | issue: Issue; 6 | repository: Repository; 7 | sender: Sender; 8 | } 9 | 10 | interface Issue { 11 | url: string; 12 | repository_url: string; 13 | labels_url: string; 14 | comments_url: string; 15 | events_url: string; 16 | html_url: string; 17 | id: number; 18 | node_id: string; 19 | number: number; 20 | title: string; 21 | user: Sender; 22 | labels: any[]; 23 | state: string; 24 | locked: boolean; 25 | assignee: null; 26 | assignees: any[]; 27 | milestone: null; 28 | comments: number; 29 | created_at: string; 30 | updated_at: string; 31 | closed_at: null; 32 | author_association: string; 33 | active_lock_reason: null; 34 | body: string; 35 | reactions: Reactions; 36 | timeline_url: string; 37 | performed_via_github_app: null; 38 | state_reason: string; 39 | } 40 | 41 | interface Reactions { 42 | url: string; 43 | total_count: number; 44 | "+1": number; 45 | "-1": number; 46 | laugh: number; 47 | hooray: number; 48 | confused: number; 49 | heart: number; 50 | rocket: number; 51 | eyes: number; 52 | } 53 | 54 | interface Sender { 55 | login: string; 56 | id: number; 57 | node_id: string; 58 | avatar_url: string; 59 | gravatar_id: string; 60 | url: string; 61 | html_url: string; 62 | followers_url: string; 63 | following_url: string; 64 | gists_url: string; 65 | starred_url: string; 66 | subscriptions_url: string; 67 | organizations_url: string; 68 | repos_url: string; 69 | events_url: string; 70 | received_events_url: string; 71 | type: string; 72 | site_admin: boolean; 73 | } 74 | 75 | interface Repository { 76 | id: number; 77 | node_id: string; 78 | name: string; 79 | full_name: string; 80 | private: boolean; 81 | owner: Sender; 82 | html_url: string; 83 | description: string; 84 | fork: boolean; 85 | url: string; 86 | forks_url: string; 87 | keys_url: string; 88 | collaborators_url: string; 89 | teams_url: string; 90 | hooks_url: string; 91 | issue_events_url: string; 92 | events_url: string; 93 | assignees_url: string; 94 | branches_url: string; 95 | tags_url: string; 96 | blobs_url: string; 97 | git_tags_url: string; 98 | git_refs_url: string; 99 | trees_url: string; 100 | statuses_url: string; 101 | languages_url: string; 102 | stargazers_url: string; 103 | contributors_url: string; 104 | subscribers_url: string; 105 | subscription_url: string; 106 | commits_url: string; 107 | git_commits_url: string; 108 | comments_url: string; 109 | issue_comment_url: string; 110 | contents_url: string; 111 | compare_url: string; 112 | merges_url: string; 113 | archive_url: string; 114 | downloads_url: string; 115 | issues_url: string; 116 | pulls_url: string; 117 | milestones_url: string; 118 | notifications_url: string; 119 | labels_url: string; 120 | releases_url: string; 121 | deployments_url: string; 122 | created_at: string; 123 | updated_at: string; 124 | pushed_at: string; 125 | git_url: string; 126 | ssh_url: string; 127 | clone_url: string; 128 | svn_url: string; 129 | homepage: null; 130 | size: number; 131 | stargazers_count: number; 132 | watchers_count: number; 133 | language: null; 134 | has_issues: boolean; 135 | has_projects: boolean; 136 | has_downloads: boolean; 137 | has_wiki: boolean; 138 | has_pages: boolean; 139 | has_discussions: boolean; 140 | forks_count: number; 141 | mirror_url: null; 142 | archived: boolean; 143 | disabled: boolean; 144 | open_issues_count: number; 145 | license: License; 146 | allow_forking: boolean; 147 | is_template: boolean; 148 | web_commit_signoff_required: boolean; 149 | topics: any[]; 150 | visibility: string; 151 | forks: number; 152 | open_issues: number; 153 | watchers: number; 154 | default_branch: string; 155 | } 156 | 157 | interface License { 158 | key: string; 159 | name: string; 160 | spdx_id: string; 161 | url: string; 162 | node_id: string; 163 | } 164 | -------------------------------------------------------------------------------- /src/interfaces/github-start.interface.ts: -------------------------------------------------------------------------------- 1 | 2 | // Generated by https://quicktype.io 3 | 4 | export interface GitHubStarPayload { 5 | action: string; 6 | starred_at: string; 7 | repository: Repository; 8 | sender: Sender; 9 | } 10 | 11 | interface Repository { 12 | id: number; 13 | node_id: string; 14 | name: string; 15 | full_name: string; 16 | private: boolean; 17 | owner: Sender; 18 | html_url: string; 19 | description: string; 20 | fork: boolean; 21 | url: string; 22 | forks_url: string; 23 | keys_url: string; 24 | collaborators_url: string; 25 | teams_url: string; 26 | hooks_url: string; 27 | issue_events_url: string; 28 | events_url: string; 29 | assignees_url: string; 30 | branches_url: string; 31 | tags_url: string; 32 | blobs_url: string; 33 | git_tags_url: string; 34 | git_refs_url: string; 35 | trees_url: string; 36 | statuses_url: string; 37 | languages_url: string; 38 | stargazers_url: string; 39 | contributors_url: string; 40 | subscribers_url: string; 41 | subscription_url: string; 42 | commits_url: string; 43 | git_commits_url: string; 44 | comments_url: string; 45 | issue_comment_url: string; 46 | contents_url: string; 47 | compare_url: string; 48 | merges_url: string; 49 | archive_url: string; 50 | downloads_url: string; 51 | issues_url: string; 52 | pulls_url: string; 53 | milestones_url: string; 54 | notifications_url: string; 55 | labels_url: string; 56 | releases_url: string; 57 | deployments_url: string; 58 | created_at: string; 59 | updated_at: string; 60 | pushed_at: string; 61 | git_url: string; 62 | ssh_url: string; 63 | clone_url: string; 64 | svn_url: string; 65 | homepage: null; 66 | size: number; 67 | stargazers_count: number; 68 | watchers_count: number; 69 | language: null; 70 | has_issues: boolean; 71 | has_projects: boolean; 72 | has_downloads: boolean; 73 | has_wiki: boolean; 74 | has_pages: boolean; 75 | has_discussions: boolean; 76 | forks_count: number; 77 | mirror_url: null; 78 | archived: boolean; 79 | disabled: boolean; 80 | open_issues_count: number; 81 | license: License; 82 | allow_forking: boolean; 83 | is_template: boolean; 84 | web_commit_signoff_required: boolean; 85 | topics: any[]; 86 | visibility: string; 87 | forks: number; 88 | open_issues: number; 89 | watchers: number; 90 | default_branch: string; 91 | } 92 | 93 | interface License { 94 | key: string; 95 | name: string; 96 | spdx_id: string; 97 | url: string; 98 | node_id: string; 99 | } 100 | 101 | interface Sender { 102 | login: string; 103 | id: number; 104 | node_id: string; 105 | avatar_url: string; 106 | gravatar_id: string; 107 | url: string; 108 | html_url: string; 109 | followers_url: string; 110 | following_url: string; 111 | gists_url: string; 112 | starred_url: string; 113 | subscriptions_url: string; 114 | organizations_url: string; 115 | repos_url: string; 116 | events_url: string; 117 | received_events_url: string; 118 | type: string; 119 | site_admin: boolean; 120 | } 121 | -------------------------------------------------------------------------------- /src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | export * from './github-issue.interface'; 4 | export * from './github-start.interface'; -------------------------------------------------------------------------------- /src/presentation/github/controller.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from 'express'; 2 | import { GitHubService } from '../services/github.service'; 3 | import { DiscordService } from '../services/discord.service'; 4 | 5 | 6 | 7 | export class GithubController { 8 | 9 | 10 | constructor( 11 | private readonly githubService = new GitHubService(), 12 | private readonly discordService = new DiscordService(), 13 | ){} 14 | 15 | 16 | webhookHandler = ( req: Request, res: Response ) => { 17 | 18 | const githubEvent = req.header('x-github-event') ?? 'unknown'; 19 | const payload = req.body; 20 | let message:string; 21 | 22 | switch( githubEvent ) { 23 | 24 | case 'star': 25 | message = this.githubService.onStar( payload ); 26 | break; 27 | 28 | case 'issues': 29 | message = this.githubService.onIssue(payload); 30 | break; 31 | 32 | 33 | default: 34 | message = `Unknown event ${ githubEvent }`; 35 | 36 | } 37 | 38 | this.discordService.notify(message) 39 | .then( () => res.status(202).send('Accepted') ) 40 | .catch( () => res.status(500).json({ error: 'internal server error'}) ) 41 | 42 | } 43 | 44 | 45 | 46 | } 47 | 48 | -------------------------------------------------------------------------------- /src/presentation/services/discord.service.ts: -------------------------------------------------------------------------------- 1 | import { envs } from '../../config'; 2 | 3 | 4 | 5 | 6 | export class DiscordService { 7 | 8 | private readonly discordWebhookUrl = envs.DISCORD_WEBHOOK_URL; 9 | 10 | constructor() {} 11 | 12 | 13 | async notify( message: string ) { 14 | 15 | const body = { 16 | content: message, 17 | // embeds: [ 18 | // { 19 | // image: { url: 'https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExbjZycHVhaG5jcXNqcG43ZWtpMW9vNGYwZnU0OGhuem91Zmh6ZWNnaSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/du3J3cXyzhj75IOgvA/giphy.gif' } 20 | // } 21 | // ] 22 | } 23 | 24 | const resp = await fetch( this.discordWebhookUrl, { 25 | method: 'POST', 26 | headers: { 'Content-Type': 'application/json' }, 27 | body: JSON.stringify(body), 28 | }); 29 | 30 | if ( !resp.ok ) { 31 | console.log('Error sending message to discord'); 32 | return false; 33 | } 34 | 35 | return true; 36 | } 37 | 38 | 39 | 40 | } -------------------------------------------------------------------------------- /src/presentation/services/github.service.ts: -------------------------------------------------------------------------------- 1 | import { GitHubIssuePayload, GitHubStarPayload } from '../../interfaces'; 2 | 3 | 4 | 5 | export class GitHubService { 6 | 7 | constructor() { } 8 | 9 | 10 | onStar( payload: GitHubStarPayload ): string { 11 | 12 | 13 | const { action, sender, repository } = payload; 14 | 15 | return `User ${ sender.login } ${ action } star on ${ repository.full_name }`; 16 | 17 | } 18 | 19 | onIssue( payload: GitHubIssuePayload ): string { 20 | 21 | const { action, issue } = payload; 22 | 23 | if ( action === 'opened' ) { 24 | return `An issue was opened with this title ${ issue.title }`; 25 | } 26 | 27 | if ( action === 'closed' ) { 28 | return `An issue was closed by ${ issue.user.login }`; 29 | } 30 | 31 | if ( action === 'reopened' ) { 32 | return `An issue was reopened by ${ issue.user.login }`; 33 | } 34 | 35 | 36 | return `Unhandled action for the issue event ${ action }`; 37 | 38 | 39 | } 40 | 41 | 42 | 43 | 44 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | "rootDir": "src", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "dist/", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | } 109 | } 110 | --------------------------------------------------------------------------------