From 097d722546f7c3b292e24c05d38f5cdf773d20b6 Mon Sep 17 00:00:00 2001 From: Matteo Juen <45847997+Blvckleg@users.noreply.github.com> Date: Thu, 25 Apr 2024 13:43:45 +0000 Subject: [PATCH 01/16] chore(nest): add cli to deps --- package-lock.json | 2352 ++++++++++++++++++++++++++++++++++++++------- package.json | 1 + 2 files changed, 2002 insertions(+), 351 deletions(-) diff --git a/package-lock.json b/package-lock.json index b366046..22bdbd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.3.0", "license": "MIT", "dependencies": { + "@nestjs/cli": "^10.3.2", "@nestjs/common": "^10.2.10", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.2.6", @@ -50,6 +51,186 @@ "node": ">=6.0.0" } }, + "node_modules/@angular-devkit/core": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.1.2.tgz", + "integrity": "sha512-ku+/W/HMCBacSWFppenr9y6Lx8mDuTuQvn1IkTyBLiJOpWnzgVbx9kHDeaDchGa1PwLlJUBBrv27t3qgJOIDPw==", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "picomatch": "3.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@angular-devkit/core/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.1.2.tgz", + "integrity": "sha512-8S9RuM8olFN/gwN+mjbuF1CwHX61f0i59EGXz9tXLnKRUTjsRR+8vVMTAmX0dvVAT5fJTG/T69X+HX7FeumdqA==", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.5", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.1.2.tgz", + "integrity": "sha512-bvXykYzSST05qFdlgIzUguNOb3z0hCa8HaTwtqdmQo9aFPf+P+/AC56I64t1iTchMjQtf3JrBQhYM25gUdcGbg==", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "@angular-devkit/schematics": "17.1.2", + "ansi-colors": "4.1.3", + "inquirer": "9.2.12", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", + "dependencies": { + "@ljharb/through": "^2.3.11", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", @@ -580,6 +761,15 @@ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -702,6 +892,79 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -787,25 +1050,6 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -924,14 +1168,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -971,17 +1207,6 @@ "node": "*" } }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1131,6 +1356,24 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -1145,6 +1388,17 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@lukeed/csprng": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", @@ -1161,56 +1415,159 @@ "sparse-bitfield": "^3.0.3" } }, - "node_modules/@nestjs/common": { - "version": "10.2.10", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.10.tgz", - "integrity": "sha512-fwAk931rjW8CNH2Mgwawq/7HWHH1dxkOLdcgs7U52ddLk8CtHXjejm1cbNahewlSbNhvlOl7y1STLHutE6sUqw==", - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.2", - "uid": "2.0.2" + "node_modules/@nestjs/cli": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.3.2.tgz", + "integrity": "sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "@angular-devkit/schematics": "17.1.2", + "@angular-devkit/schematics-cli": "17.1.2", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.3", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.3.10", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "rimraf": "4.4.1", + "shelljs": "0.8.5", + "source-map-support": "0.5.21", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.3.3", + "webpack": "5.90.1", + "webpack-node-externals": "3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" }, "peerDependencies": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" + "@swc/cli": "^0.1.62 || ^0.3.0", + "@swc/core": "^1.3.62" }, "peerDependenciesMeta": { - "class-transformer": { + "@swc/cli": { "optional": true }, - "class-validator": { + "@swc/core": { "optional": true } } }, - "node_modules/@nestjs/config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.1.1.tgz", - "integrity": "sha512-qu5QlNiJdqQtOsnB6lx4JCXPQ96jkKUsOGd+JXfXwqJqZcOSAq6heNFg0opW4pq4J/VZoNwoo87TNnx9wthnqQ==", + "node_modules/@nestjs/cli/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dependencies": { - "dotenv": "16.3.1", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21", - "uuid": "9.0.0" + "brace-expansion": "^2.0.1" }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13" + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nestjs/config/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } + "node_modules/@nestjs/cli/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/common": { + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.2.10.tgz", + "integrity": "sha512-fwAk931rjW8CNH2Mgwawq/7HWHH1dxkOLdcgs7U52ddLk8CtHXjejm1cbNahewlSbNhvlOl7y1STLHutE6sUqw==", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.1.1.tgz", + "integrity": "sha512-qu5QlNiJdqQtOsnB6lx4JCXPQ96jkKUsOGd+JXfXwqJqZcOSAq6heNFg0opW4pq4J/VZoNwoo87TNnx9wthnqQ==", + "dependencies": { + "dotenv": "16.3.1", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21", + "uuid": "9.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "reflect-metadata": "^0.1.13" + } + }, + "node_modules/@nestjs/config/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, "node_modules/@nestjs/core": { "version": "10.2.6", @@ -1385,6 +1742,26 @@ "node": ">= 0.8" } }, + "node_modules/@nestjs/schematics": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.1.1.tgz", + "integrity": "sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==", + "dependencies": { + "@angular-devkit/core": "17.1.2", + "@angular-devkit/schematics": "17.1.2", + "comment-json": "4.2.3", + "jsonc-parser": "3.2.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, "node_modules/@nestjs/testing": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.2.6.tgz", @@ -1635,6 +2012,29 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, "node_modules/@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", @@ -1708,6 +2108,11 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -1831,6 +2236,147 @@ "npm": ">=7.0.0" } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1854,6 +2400,14 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -1862,6 +2416,45 @@ "node": ">=0.4.0" } }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -1877,22 +2470,22 @@ } }, "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -1933,6 +2526,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -2039,6 +2637,59 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -2152,6 +2803,29 @@ "node": ">=16.20.1" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -2210,12 +2884,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2271,20 +2951,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -2293,14 +2959,50 @@ "node": ">=10" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } ], "engines": { @@ -2322,68 +3024,61 @@ "validator": "^13.9.0" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dependencies": { - "color-convert": "^2.0.1" + "string-width": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "10.* || >= 12.*" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/cliui/node_modules/wrap-ansi": { @@ -2402,6 +3097,14 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", @@ -2443,6 +3146,29 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", + "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2521,6 +3247,47 @@ "node": ">= 0.10" } }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -2629,6 +3396,17 @@ "node": ">=0.10.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -2637,6 +3415,22 @@ "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2764,9 +3558,9 @@ } }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2784,6 +3578,18 @@ "once": "^1.4.0" } }, + "node_modules/enhanced-resolve": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2792,6 +3598,30 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==" + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2813,6 +3643,18 @@ "node": ">=8" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -2825,6 +3667,33 @@ "node": ">=4" } }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -2833,6 +3702,14 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -2948,6 +3825,19 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -3020,6 +3910,28 @@ "node": "^12.20 || >= 14.13" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3088,6 +4000,83 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -3115,6 +4104,24 @@ "node": ">= 0.6" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3134,9 +4141,12 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -3155,14 +4165,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3191,18 +4205,18 @@ } }, "node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3211,6 +4225,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3219,6 +4249,17 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", @@ -3267,6 +4308,25 @@ "node": ">=8" } }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -3289,6 +4349,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hpagent": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", @@ -3351,6 +4422,48 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -3391,6 +4504,39 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -3404,6 +4550,17 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -3415,6 +4572,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3431,6 +4596,25 @@ "node": ">=6" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3450,6 +4634,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3560,9 +4755,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4270,6 +5465,11 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -4281,6 +5481,22 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kareem": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", @@ -4323,6 +5539,14 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4354,6 +5578,21 @@ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -4375,6 +5614,17 @@ "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz", "integrity": "sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==" }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -4440,6 +5690,17 @@ "node": ">= 0.6" } }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -4714,6 +5975,11 @@ "node": ">= 6.0.0" } }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4727,6 +5993,11 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, "node_modules/ngrok": { "version": "5.0.0-beta.2", "resolved": "https://registry.npmjs.org/ngrok/-/ngrok-5.0.0-beta.2.tgz", @@ -4749,6 +6020,11 @@ "hpagent": "^0.1.2" } }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + }, "node_modules/node-cron": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", @@ -4778,6 +6054,14 @@ "node": ">=10.5.0" } }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -4884,6 +6168,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -4939,6 +6253,17 @@ "node": ">=6" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -5013,6 +6338,14 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -5053,6 +6386,14 @@ "node": ">=8" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -5178,6 +6519,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -5224,12 +6573,42 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "peer": true }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5238,6 +6617,14 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", @@ -5297,6 +6684,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/rimraf": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", @@ -5314,11 +6718,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -5347,17 +6758,62 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", @@ -5396,6 +6852,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -5410,6 +6874,22 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5434,6 +6914,61 @@ "node": ">=8" } }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -5558,39 +7093,17 @@ "node": ">=10" } }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/string-width-cjs": { @@ -5607,20 +7120,7 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -5631,20 +7131,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -5657,14 +7143,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -5714,6 +7192,113 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.4.tgz", + "integrity": "sha512-xRdd0v64a8mFK9bnsKVdoNP9GQIKUAaJPTaqEQDL4w/J8WaW4sWXXoMZ+6SimPkfT5bElreXf8m9HnmPc3E1BQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -5766,6 +7351,22 @@ "node": "*" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -5803,6 +7404,14 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -5922,6 +7531,40 @@ } } }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -5969,9 +7612,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6002,6 +7645,14 @@ "node": ">=14.0" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -6039,6 +7690,14 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6116,6 +7775,26 @@ "makeerror": "1.0.12" } }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -6129,6 +7808,68 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/webpack": { + "version": "5.90.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz", + "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -6153,19 +7894,16 @@ } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -6185,57 +7923,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6332,43 +8019,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/package.json b/package.json index 9b5cf1d..cc05be3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "homepage": "https://github.com/Blvckleg/BingusBoingus/#readme", "dependencies": { + "@nestjs/cli": "^10.3.2", "@nestjs/common": "^10.2.10", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.2.6", From a7382023deb3301fc0f9c3c910cac88095bfc0c4 Mon Sep 17 00:00:00 2001 From: Matteo Juen <45847997+Blvckleg@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:02:56 +0200 Subject: [PATCH 02/16] docs(readme): update --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 10b4276..e6301bb 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,19 @@ -## build and test status: ![tests](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml/badge.svg) ![build](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml/badge.svg) - 🤖 Description: BingusBoingus is the bot you never knew you needed, mainly because it not really useful and just very silly instead! With BingusBoingus, expect the unexpected, and prepare for some hilariously quirky and utterly pointless commands that will make you wonder, "Why does this bot even exist?" 🪄 Features: -- Random Responses: BingusBoingus excels at delivering responses that are both baffling and comical. +- Random Responses: BingusBoingus excels at delivering responses to messages that are both baffling and comical. - Coinflip: Ask Bingus to toss a coin for you. It might land on heads. It might land on tails. Or it might... - Saving Quotes: BingusBoingus is able to save quotes in a database. +- Creating Polls: Bingus is able to create a poll about any topic for you. + +- Birthday Shoutouts: every user can add their birthday. Bingus will remember it and congratulate you on your special day. Can effortlessly be deactivated/activated + - 404 Error: This bot's purpose is as elusive as a unicorn, so prepare to have your expectations shattered. And more.... @@ -44,3 +46,9 @@ This workflow ensures organized and collaborative development. for more information on contributing and conventional commits please visit the [BingusBoingus Contributing Docs.](https://github.com/Blvckleg/BingusBoingus/blob/master/CONTRIBUTING.md) Built with [NestJs](https://github.com/nestjs) + +| | | +|:-------------:|:-------------:| +| [![tests](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml) | [![build](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml) | + + From 8c799f03afc0b54f6d4f0029d071a7936a6bf0cc Mon Sep 17 00:00:00 2001 From: Matteo Juen <45847997+Blvckleg@users.noreply.github.com> Date: Thu, 2 May 2024 12:46:14 +0200 Subject: [PATCH 03/16] docs(readme): update badges --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e6301bb..16d4d8d 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,8 @@ for more information on contributing and conventional commits please visit the [ Built with [NestJs](https://github.com/nestjs) -| | | -|:-------------:|:-------------:| -| [![tests](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml) | [![build](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml) | +| Tests | Builds | Version | +|:-------------:|:-------------:|:-------------:| +| [![tests](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-test.yml) | [![build](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml/badge.svg)](https://github.com/blvckleg/bingusboingus/actions/workflows/docker-dev.yml) | ![version-latest](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2FBingusBoingus-Developer-Team%2FBingusBoingus%2Fraw%2Fmaster%2Fpackage.json&query=%24.version&label=latest) From 57034043898f563fb0bd5be102ae792eb483a786 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 13:46:26 +0200 Subject: [PATCH 04/16] chore(deps): @nestjs/swagger and class-transformer --- bun.lockb | Bin 227893 -> 292082 bytes package-lock.json | 89 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ 3 files changed, 91 insertions(+) diff --git a/bun.lockb b/bun.lockb index 844fde687f10304123b6bcff499dd828f246f3a3..704a5b8b0078a71784735c9455daa517687f8d6f 100644 GIT binary patch delta 75333 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 Fe*lcr!$|-D delta 35590 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 Fe*xPpK4Aa= diff --git a/package-lock.json b/package-lock.json index 22bdbd4..67f52a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,8 +15,10 @@ "@nestjs/core": "^10.2.6", "@nestjs/mongoose": "^10.0.2", "@nestjs/platform-express": "^10.2.6", + "@nestjs/swagger": "^7.3.1", "@nestjs/testing": "^10.2.6", "@types/jest": "^29.5.5", + "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "discord-interactions": "^3.4.0", "discord.js": "^14.13.0", @@ -1407,6 +1409,11 @@ "node": ">=8" } }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==" + }, "node_modules/@mongodb-js/saslprep": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", @@ -1611,6 +1618,25 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" }, + "node_modules/@nestjs/mapped-types": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", + "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/mongoose": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.0.2.tgz", @@ -1762,6 +1788,59 @@ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" }, + "node_modules/@nestjs/swagger": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.3.1.tgz", + "integrity": "sha512-LUC4mr+5oAleEC/a2j8pNRh1S5xhKXJ1Gal5ZdRjt9XebQgbngXCdW7JTA9WOEcwGtFZN9EnKYdquzH971LZfw==", + "dependencies": { + "@microsoft/tsdoc": "^0.14.2", + "@nestjs/mapped-types": "2.0.5", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "5.11.2" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0 || ^7.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/swagger/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@nestjs/swagger/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@nestjs/swagger/node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, "node_modules/@nestjs/testing": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.2.6.tgz", @@ -3014,6 +3093,11 @@ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, "node_modules/class-validator": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", @@ -7192,6 +7276,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "5.11.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.2.tgz", + "integrity": "sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A==" + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", diff --git a/package.json b/package.json index cc05be3..a585c09 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,10 @@ "@nestjs/core": "^10.2.6", "@nestjs/mongoose": "^10.0.2", "@nestjs/platform-express": "^10.2.6", + "@nestjs/swagger": "^7.3.1", "@nestjs/testing": "^10.2.6", "@types/jest": "^29.5.5", + "class-transformer": "^0.5.1", "class-validator": "^0.14.1", "discord-interactions": "^3.4.0", "discord.js": "^14.13.0", From 9bf5e49948a1a2cd8cc116b68f1f7cce6191c191 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 13:47:40 +0200 Subject: [PATCH 05/16] feat(common): app api, res model, decorators and errorfilter --- src/app.controller.ts | 12 ++++++ src/app.module.ts | 4 ++ src/app.service.ts | 9 +++++ src/common/decoratos/apires.decorator.ts | 51 ++++++++++++++++++++++++ src/common/filters/error.filter.ts | 45 +++++++++++++++++++++ src/common/res.model.ts | 35 ++++++++++++++++ 6 files changed, 156 insertions(+) create mode 100644 src/app.controller.ts create mode 100644 src/app.service.ts create mode 100644 src/common/decoratos/apires.decorator.ts create mode 100644 src/common/filters/error.filter.ts create mode 100644 src/common/res.model.ts diff --git a/src/app.controller.ts b/src/app.controller.ts new file mode 100644 index 0000000..9591a84 --- /dev/null +++ b/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get('/') + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/src/app.module.ts b/src/app.module.ts index e0f6dc7..dfbccf6 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -6,6 +6,8 @@ import { EventModule } from './modules/event/event.module'; import { DeployModule } from './deployment/deploy.module'; import { MongoDatabaseProviderModule } from './config/database/mongo/provider/mongo-provider.module'; import { TaskModule } from './modules/cron-tasks/task.module'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; @Module({ imports: [ @@ -17,5 +19,7 @@ import { TaskModule } from './modules/cron-tasks/task.module'; MongoDatabaseProviderModule, TaskModule ], + controllers: [AppController], + providers: [AppService], }) export class AppModule {} diff --git a/src/app.service.ts b/src/app.service.ts new file mode 100644 index 0000000..ba67830 --- /dev/null +++ b/src/app.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} + diff --git a/src/common/decoratos/apires.decorator.ts b/src/common/decoratos/apires.decorator.ts new file mode 100644 index 0000000..26e123c --- /dev/null +++ b/src/common/decoratos/apires.decorator.ts @@ -0,0 +1,51 @@ +import { Type, applyDecorators } from '@nestjs/common'; +import { + ApiCreatedResponse, + ApiOkResponse, + getSchemaPath, +} from '@nestjs/swagger'; +import { ReS } from '../res.model'; + +export const ApiReS = >( + model: TModel, + description: string, + status?: number, +) => { + if (status === 201) { + return applyDecorators( + ApiCreatedResponse({ + description, + schema: { + allOf: [ + { $ref: getSchemaPath(ReS) }, + { + properties: { + data: { + $ref: getSchemaPath(model), + }, + }, + }, + ], + }, + }), + ); + } + + return applyDecorators( + ApiOkResponse({ + description, + schema: { + allOf: [ + { $ref: getSchemaPath(ReS) }, + { + properties: { + data: { + $ref: getSchemaPath(model), + }, + }, + }, + ], + }, + }), + ); +}; diff --git a/src/common/filters/error.filter.ts b/src/common/filters/error.filter.ts new file mode 100644 index 0000000..7f2ba83 --- /dev/null +++ b/src/common/filters/error.filter.ts @@ -0,0 +1,45 @@ +import { + ExceptionFilter, + Catch, + HttpException, + ArgumentsHost, + HttpStatus, + } from '@nestjs/common'; + import { ReE } from '../res.model'; + + @Catch() + export class ErrorFilter implements ExceptionFilter { + catch(error: Error, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const request = ctx.getRequest(); + const statusCode: number = + error instanceof HttpException + ? error.getStatus() + : HttpStatus.INTERNAL_SERVER_ERROR; + + let message; + console.error(error); + if (error instanceof HttpException) { + const errorMessage = (error.getResponse() as any)?.message; + message = Array.isArray(errorMessage) ? errorMessage : [errorMessage]; + } else { + message = [error.message]; + } + + const name = + error instanceof HttpException + ? (error.getResponse() as any)?.error || error.name + : error.name; + + const responseWithStatusCode = response.status(statusCode); + const errorPayload = ReE.FromData(statusCode, name, message); + // watch out for fastify + if (typeof responseWithStatusCode.json === 'undefined') { + responseWithStatusCode.send(errorPayload); + } else { + responseWithStatusCode.json(errorPayload); + } + } + } + \ No newline at end of file diff --git a/src/common/res.model.ts b/src/common/res.model.ts new file mode 100644 index 0000000..c55377f --- /dev/null +++ b/src/common/res.model.ts @@ -0,0 +1,35 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class ReturnHelper { + @ApiProperty({ example: true, description: 'success indicator' }) + public success = true; +} + +export class ReS extends ReturnHelper { + static FromData(arg0: T): ReS { + const ret = new ReS(); + ret.success = true; + ret.data = arg0; + return ret; + } + + public data: T; +} + +export class ReE extends ReturnHelper { + static FromData(statusCode: number, error: string, message: string[]): ReE { + const ret = new ReE(); + ret.success = false; + ret.message = message; + ret.error = error; + ret.statusCode = statusCode; + return ret; + } + @ApiProperty({ description: 'statusCode' }) + public statusCode: number; + @ApiProperty({ description: 'detail message' }) + public message: string[]; + @ApiProperty({ description: 'error description' }) + public error: string; +} + From 08875fb2354a827aad1c0add9cdb2adbf213816f Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 13:47:58 +0200 Subject: [PATCH 06/16] feat(swagger): setup swagger api docs --- src/main.ts | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 1d2b9a6..5512298 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,8 @@ import { Reflector } from '@nestjs/core'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { AppConfigService } from './config/config.service'; +import { ErrorFilter } from './common/filters/error.filter'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; async function bootstrap() { const app = await NestFactory.create(AppModule, { @@ -13,11 +15,41 @@ async function bootstrap() { const appConfig: AppConfigService = app.get(AppConfigService); app.setGlobalPrefix('api/v1'); + app.useGlobalFilters(new ErrorFilter()); app.useGlobalInterceptors(app.get(Reflector)); - + bootstrapSwagger(app, appConfig); await app.startAllMicroservices(); await app.listen(appConfig.appPort); } +async function bootstrapSwagger( + app: INestApplication, + appConfig: AppConfigService, +) { + + const config = new DocumentBuilder() + .setTitle('BingusBoingus API') + .setDescription('BingusBoingus REST API Documentation') + .setVersion('1.0') + .addBearerAuth() + .addServer(`localhost:${appConfig.appPort}`, 'Default Ingress') + .build(); + + const document = SwaggerModule.createDocument(app, config, { + ignoreGlobalPrefix: true, + deepScanRoutes: true, + }); + + SwaggerModule.setup('api/v1/doc', app, document, { + swaggerOptions: { + persistAuthorization: true, + urls: [`localhost:${appConfig.appPort}/api/v1/doc/swagger.json`] + }, + customSiteTitle: 'API Docs', + explorer: true, + } as unknown as any); +} + + bootstrap(); From 5e61dbb585275299e27484ebbe3b89f0b1d218ca Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 13:48:32 +0200 Subject: [PATCH 07/16] feat(api): controllers, endpoints and dto definition --- .../controller/birthday-entry.controller.ts | 72 +++++++++++++++++ .../create-or-update-birthday-entry.dto.ts | 36 +++++++++ .../birthday/module/birthday-entry.module.ts | 3 +- .../service/birthday-entry.service.ts | 8 +- .../commands/activate-birthday-shoutout.ts | 6 +- .../command/commands/add-birthday-entry.ts | 5 +- .../commands/deactivate-birthday-shoutout.ts | 77 ++++++++++--------- .../service/someone-once-said.service.ts | 11 +-- .../version/controller/version.controller.ts | 46 +++++++++++ src/modules/version/module/version.module.ts | 3 +- 10 files changed, 208 insertions(+), 59 deletions(-) create mode 100644 src/modules/birthday/controller/birthday-entry.controller.ts create mode 100644 src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts create mode 100644 src/modules/version/controller/version.controller.ts diff --git a/src/modules/birthday/controller/birthday-entry.controller.ts b/src/modules/birthday/controller/birthday-entry.controller.ts new file mode 100644 index 0000000..edef66b --- /dev/null +++ b/src/modules/birthday/controller/birthday-entry.controller.ts @@ -0,0 +1,72 @@ +import { + Get, + Post, + Controller, + UseInterceptors, + ClassSerializerInterceptor, + UseGuards, + ValidationPipe, + UsePipes, + Inject, + Body, + UnprocessableEntityException, + } from '@nestjs/common'; + import { + ApiBody, + ApiExtraModels, + ApiOperation, + ApiResponse, + ApiTags, + } from '@nestjs/swagger'; +import { ReS } from '../../../common/res.model'; +import { BirthdayEntryService } from '../service/birthday-entry.service'; +import { BirthdayEntryDocument } from '../../../schemas/birthday-entry.schema'; +import { CreateOrUpdateBirthdayEntryDto } from '../dto/create-or-update-birthday-entry.dto'; + + @Controller('birthday-entry') + @ApiTags('birthday-entry') + @UseGuards() + @ApiExtraModels(ReS) + @ApiResponse({ status: 403, description: 'Forbidden.' }) + export class BirthdayEntryController { + constructor( + @Inject(BirthdayEntryService) + private readonly birthdayEntryService: BirthdayEntryService, + ) { + } + + @Get('/') + @UseInterceptors(ClassSerializerInterceptor) + @UsePipes(new ValidationPipe({ transform: true, whitelist: true })) + @ApiOperation({ + summary: 'get all birthday entries', + description: 'returns all birthday entries', + }) + + async getEntryForToday(): Promise> { + return ReS.FromData( + await this.birthdayEntryService.getEntryForToday() + ); + } + + @Post('/') + @UseInterceptors(ClassSerializerInterceptor) + @ApiOperation({ + summary: 'create birthday entry', + description: + 'creates a new birthday entry', + }) + @ApiBody({ type: CreateOrUpdateBirthdayEntryDto }) + async createOrUpdate( + @Body() inputs: CreateOrUpdateBirthdayEntryDto, + ): Promise> { + try { + return ReS.FromData( + await this.birthdayEntryService.createOrUpdateBirthdayEntry(inputs) + ); + } catch (error) { + throw new UnprocessableEntityException(error.message) + } + } + } + \ No newline at end of file diff --git a/src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts b/src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts new file mode 100644 index 0000000..efe2a3f --- /dev/null +++ b/src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts @@ -0,0 +1,36 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNotEmpty, IsOptional } from 'class-validator'; + +export class CreateOrUpdateBirthdayEntryDto { + @ApiProperty({ + example: 'JohnDoe12', + description: 'The discord username of the user', + type: String, + }) + @IsNotEmpty() + username: string; + + @ApiProperty({ + example: 'John Doe', + description: 'The discord displayName of the user', + type: String, + }) + @IsOptional() + secName: string; + + @ApiProperty({ + example: '2024-01-01T00:00:00.000Z', + description: 'The birthdate of the user in ISO format', + type: String, + }) + @IsOptional() + birthDate?: Date; + + @ApiProperty({ + example: true, + description: 'Boolean flag if the birthday shoutout is enabled/disabled', + type: Boolean, + }) + @IsOptional() + active: boolean; +} diff --git a/src/modules/birthday/module/birthday-entry.module.ts b/src/modules/birthday/module/birthday-entry.module.ts index 3ab7f10..e9a2eff 100644 --- a/src/modules/birthday/module/birthday-entry.module.ts +++ b/src/modules/birthday/module/birthday-entry.module.ts @@ -2,6 +2,7 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { BirthdayEntry, BirthdayEntrySchema } from '../../../schemas/birthday-entry.schema'; import { BirthdayEntryService } from '../service/birthday-entry.service'; +import { BirthdayEntryController } from '../controller/birthday-entry.controller'; @Module({ imports: [ @@ -12,7 +13,7 @@ import { BirthdayEntryService } from '../service/birthday-entry.service'; }, ]), ], - controllers: [], + controllers: [BirthdayEntryController], providers: [BirthdayEntryService], exports: [BirthdayEntryService], }) diff --git a/src/modules/birthday/service/birthday-entry.service.ts b/src/modules/birthday/service/birthday-entry.service.ts index 9b0abf6..89a2392 100644 --- a/src/modules/birthday/service/birthday-entry.service.ts +++ b/src/modules/birthday/service/birthday-entry.service.ts @@ -1,14 +1,14 @@ import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { BirthdayEntryDocument } from '../../../schemas/birthday-entry.schema'; -import { BirthdayEntryEntity } from '../../../schemas/birthday-entry.model'; +import { CreateOrUpdateBirthdayEntryDto } from '../dto/create-or-update-birthday-entry.dto'; export class BirthdayEntryService { constructor( @InjectModel('BirthdayEntry') private readonly birthdayEntry: Model, ) {} - async createOrUpdateBirthdayEntry(birthdayEntryDto: BirthdayEntryEntity,) { + async createOrUpdateBirthdayEntry(birthdayEntryDto: CreateOrUpdateBirthdayEntryDto,) { const birthdayEntry = await this.birthdayEntry.findOne({ username: birthdayEntryDto.username }); if (birthdayEntry) { return await this.updateBirthdayEntry(birthdayEntryDto); @@ -18,7 +18,7 @@ export class BirthdayEntryService { } async create( - birthdayEntryDto: BirthdayEntryEntity, + birthdayEntryDto: CreateOrUpdateBirthdayEntryDto, ): Promise { try { return await this.birthdayEntry.create({ @@ -33,7 +33,7 @@ export class BirthdayEntryService { } } - async updateBirthdayEntry(birthdayEntryDto: BirthdayEntryEntity): Promise { + async updateBirthdayEntry(birthdayEntryDto: CreateOrUpdateBirthdayEntryDto): Promise { try { return await this.birthdayEntry.findOneAndUpdate( { username: birthdayEntryDto.username }, diff --git a/src/modules/command/commands/activate-birthday-shoutout.ts b/src/modules/command/commands/activate-birthday-shoutout.ts index 9abb8f5..1ed6a98 100644 --- a/src/modules/command/commands/activate-birthday-shoutout.ts +++ b/src/modules/command/commands/activate-birthday-shoutout.ts @@ -6,7 +6,7 @@ import { import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; - import { BirthdayEntry } from '../../../schemas/birthday-entry.schema'; +import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; export default class ActivateBirthdayEntryShoutoutCommand extends ACommand { constructor( @@ -23,11 +23,11 @@ import { async execute(arg: CommandInteraction): Promise { await arg.deferReply(); - const instance = new BirthdayEntry({ + const instance: CreateOrUpdateBirthdayEntryDto ={ username: arg.user.username, secName: arg.user.displayName, active: true - }); + }; const inactive = await this.birthdayEntryService.updateBirthdayEntry(instance); if (!inactive) { diff --git a/src/modules/command/commands/add-birthday-entry.ts b/src/modules/command/commands/add-birthday-entry.ts index 01e2b48..032141e 100644 --- a/src/modules/command/commands/add-birthday-entry.ts +++ b/src/modules/command/commands/add-birthday-entry.ts @@ -8,6 +8,7 @@ import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; import { BirthdayEntry } from '../../../schemas/birthday-entry.schema'; +import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; export default class AddBirthdayEntryCommand extends ACommand { constructor( @@ -47,12 +48,12 @@ export default class AddBirthdayEntryCommand extends ACommand { let monthValue = month.value as unknown as number; let yearValue = year.value as unknown as number; let dateValue = new Date(yearValue, monthValue - 1, dayValue, 0, 0, 0, 0); - const instance = new BirthdayEntry({ + const instance: CreateOrUpdateBirthdayEntryDto = { birthDate: dateValue, username: arg.user.username, secName: arg.user.displayName, active: true, - }); + }; const created = await this.birthdayEntryService.createOrUpdateBirthdayEntry(instance); const quoteEmbed = new EmbedBuilder() diff --git a/src/modules/command/commands/deactivate-birthday-shoutout.ts b/src/modules/command/commands/deactivate-birthday-shoutout.ts index a68fee6..686a8d3 100644 --- a/src/modules/command/commands/deactivate-birthday-shoutout.ts +++ b/src/modules/command/commands/deactivate-birthday-shoutout.ts @@ -1,41 +1,42 @@ -import { - CacheType, - CommandInteraction, - SlashCommandBuilder, - } from 'discord.js'; - import { ACommand } from '../command.abstract'; - import { Inject } from '@nestjs/common'; - import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; - import { BirthdayEntry } from '../../../schemas/birthday-entry.schema'; - - export default class DeactivateBirthdayEntryShoutoutCommand extends ACommand { - constructor( - @Inject(BirthdayEntryService) - private readonly birthdayEntryService: BirthdayEntryService, - ) { - super(); - } - data = new SlashCommandBuilder() - .setName('deactivate-birthday-shoutout') - .setDescription( - 'Use this if you don\'t want Bingus to shout you out on your birthday!', - ); - - async execute(arg: CommandInteraction): Promise { - await arg.deferReply(); - const instance = new BirthdayEntry({ - username: arg.user.username, - secName: arg.user.displayName, - active: false +import { CacheType, CommandInteraction, SlashCommandBuilder } from 'discord.js'; +import { ACommand } from '../command.abstract'; +import { Inject } from '@nestjs/common'; +import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; +import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; + +export default class DeactivateBirthdayEntryShoutoutCommand extends ACommand { + constructor( + @Inject(BirthdayEntryService) + private readonly birthdayEntryService: BirthdayEntryService, + ) { + super(); + } + data = new SlashCommandBuilder() + .setName('deactivate-birthday-shoutout') + .setDescription( + "Use this if you don't want Bingus to shout you out on your birthday!", + ); + + async execute(arg: CommandInteraction): Promise { + await arg.deferReply(); + const instance: CreateOrUpdateBirthdayEntryDto = { + username: arg.user.username, + secName: arg.user.displayName, + active: false, + }; + const inactive = + await this.birthdayEntryService.updateBirthdayEntry(instance); + if (!inactive) { + await arg.editReply({ + content: + 'You are already not receiving a birthday shoutout from Bingus! 🎉', + }); + } else { + await arg.editReply({ + content: + 'You will no longer receive a birthday shoutout from Bingus! 🎉', }); - const inactive = - await this.birthdayEntryService.updateBirthdayEntry(instance); - if (!inactive) { - await arg.editReply({ content: 'You are already not receiving a birthday shoutout from Bingus! 🎉'}); - } else { - await arg.editReply({ content: 'You will no longer receive a birthday shoutout from Bingus! 🎉'}); - } - return true; } + return true; } - \ No newline at end of file +} diff --git a/src/modules/someone-once-said/service/someone-once-said.service.ts b/src/modules/someone-once-said/service/someone-once-said.service.ts index 2a6101b..ee73d80 100644 --- a/src/modules/someone-once-said/service/someone-once-said.service.ts +++ b/src/modules/someone-once-said/service/someone-once-said.service.ts @@ -23,16 +23,7 @@ export class SomeoneOnceSaidService { return null; } } - - async deleteProductionOrderForUser(username: string) { - try { - await this.someoneOnceSaid.deleteMany({ username: username }); - } catch (e) { - return new Error('Error deleting Quotes for username: ' + username); - } - return; - } - + async getRandomQuote(): Promise { try { const count = await this.someoneOnceSaid.countDocuments(); diff --git a/src/modules/version/controller/version.controller.ts b/src/modules/version/controller/version.controller.ts new file mode 100644 index 0000000..de4581d --- /dev/null +++ b/src/modules/version/controller/version.controller.ts @@ -0,0 +1,46 @@ +import { + Get, + Controller, + UseInterceptors, + ClassSerializerInterceptor, + UseGuards, + ValidationPipe, + UsePipes, + Inject, + } from '@nestjs/common'; + import { + ApiExtraModels, + ApiOperation, + ApiResponse, + ApiTags, + } from '@nestjs/swagger'; +import { ReS } from '../../../common/res.model'; +import { VersionService } from '../service/version.service'; + + @Controller('version') + @ApiTags('version') + @UseGuards() + @ApiExtraModels(ReS) + @ApiResponse({ status: 403, description: 'Forbidden.' }) + export class VersionController { + constructor( + @Inject(VersionService) + private readonly versionService: VersionService, + ) { + } + + @Get('/') + @UseInterceptors(ClassSerializerInterceptor) + @UsePipes(new ValidationPipe({ transform: true, whitelist: true })) + @ApiOperation({ + summary: 'get version metadata', + description: 'gets the current running version of the application', + }) + async getVersion(): Promise> { + return ReS.FromData({ + version: await this.versionService.getVersion() + } + ); + } + } + \ No newline at end of file diff --git a/src/modules/version/module/version.module.ts b/src/modules/version/module/version.module.ts index 82123d7..27bfc93 100644 --- a/src/modules/version/module/version.module.ts +++ b/src/modules/version/module/version.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { VersionService } from '../service/version.service'; +import { VersionController } from '../controller/version.controller'; @Module({ imports: [], - controllers: [], + controllers: [VersionController], providers: [VersionService], exports: [VersionService], }) From 43daf076e67c47752838275bdee0598c3b9e1ab6 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 13:55:57 +0200 Subject: [PATCH 08/16] chore(eslint)L setup linter --- bun.lockb | Bin 292082 -> 319474 bytes eslint.config.mjs | 10 + package-lock.json | 1343 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 6 +- 4 files changed, 1311 insertions(+), 48 deletions(-) create mode 100644 eslint.config.mjs diff --git a/bun.lockb b/bun.lockb index 704a5b8b0078a71784735c9455daa517687f8d6f..d10f90d8a8056d96beda783e0e87e07d9e6962a0 100644 GIT binary patch delta 61893 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 R*jPm_y6c=O)dQv3s_U@@38lUU7sU1qD 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 diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..67c6a34 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,10 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; + + +export default [ + {languageOptions: { globals: globals.browser }}, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, +]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 67f52a8..8a4a7b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,8 +37,12 @@ "typescript": "^5.2.2" }, "devDependencies": { + "@eslint/js": "^9.2.0", "@types/express": "^4.17.17", - "prettier": "3.0.3" + "eslint": "^8.57.0", + "globals": "^15.1.0", + "prettier": "3.0.3", + "typescript-eslint": "^7.8.0" } }, "node_modules/@ampproject/remapping": { @@ -745,6 +749,14 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", @@ -865,6 +877,151 @@ "node": ">=16.11.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", + "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -878,6 +1035,61 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1867,6 +2079,41 @@ } } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@nuxtjs/opencollective": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", @@ -2231,6 +2478,12 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -2306,50 +2559,345 @@ "@types/node": "*" } }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "node_modules/@typescript-eslint/parser": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "node_modules/@typescript-eslint/type-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" @@ -2487,6 +3035,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -2610,6 +3167,15 @@ "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -3472,6 +4038,12 @@ } } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -3556,6 +4128,18 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/discord-api-types": { "version": "0.37.50", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", @@ -3596,6 +4180,18 @@ "node": ">=16.11.0" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dotenv": { "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", @@ -3727,16 +4323,293 @@ "node": ">=8" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3751,6 +4624,27 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3778,6 +4672,15 @@ "node": ">=4.0" } }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -3946,16 +4849,47 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -4016,6 +4950,18 @@ "node": ">=0.8.0" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4069,6 +5015,83 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -4326,11 +5349,35 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.1.0.tgz", + "integrity": "sha512-926gJqg+4mkxwYKiFvoomM4J0kWESfk3qfTvRL2/oc/tK/eTDBbrfcKnSa2KtfdxB5onoL7D3A3qIHQFpd4+UA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { @@ -4373,6 +5420,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4525,6 +5578,15 @@ } ] }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4707,6 +5769,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5554,6 +6625,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -5613,6 +6690,19 @@ "node": ">=6" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/libphonenumber-js": { "version": "1.10.57", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.57.tgz", @@ -5657,6 +6747,12 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -5800,6 +6896,15 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -5867,9 +6972,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6252,6 +7357,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -6478,6 +7600,15 @@ "node": ">=4" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prettier": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", @@ -6592,6 +7723,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -6785,6 +7936,16 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", @@ -6810,6 +7971,29 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -7440,6 +8624,12 @@ "node": "*" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -7501,6 +8691,18 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -7664,6 +8866,18 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -7712,6 +8926,32 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.8.0.tgz", + "integrity": "sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.8.0", + "@typescript-eslint/parser": "7.8.0", + "@typescript-eslint/utils": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uid": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", @@ -7982,6 +9222,15 @@ "node": ">= 8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index a585c09..aa9914c 100644 --- a/package.json +++ b/package.json @@ -55,8 +55,12 @@ "typescript": "^5.2.2" }, "devDependencies": { + "@eslint/js": "^9.2.0", "@types/express": "^4.17.17", - "prettier": "3.0.3" + "eslint": "^8.57.0", + "globals": "^15.1.0", + "prettier": "3.0.3", + "typescript-eslint": "^7.8.0" }, "jest": { "moduleFileExtensions": [ From f6fc03fa7415001e5d9769e4880a8d87dffe039e Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 14:09:14 +0200 Subject: [PATCH 09/16] feat: lint script --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index aa9914c..ca60f17 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "build:test": "docker build --pull --rm -f \"dockerfiles\\Dockerfile.test\" -t ghcr.io/blvckleg/bingusboingus:test \".\"", "test:image": "docker run bingusboingus:test npm run test", "test": "jest", - "test:watch": "jest --watch" + "test:watch": "jest --watch", + "lint": "eslint . --fix" }, "repository": { "type": "git", From 0fc7374fe8e10c371523df3207aa59e7cf49c106 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 14:09:28 +0200 Subject: [PATCH 10/16] feat(eslint): config --- eslint.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 67c6a34..6d465c2 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,7 +4,7 @@ import tseslint from "typescript-eslint"; export default [ - {languageOptions: { globals: globals.browser }}, + {languageOptions: { globals: globals.browser }, rules: { "no-unused-vars": "error" },}, pluginJs.configs.recommended, ...tseslint.configs.recommended, ]; \ No newline at end of file From 779540cae123523bbc971560314d6ab838f98e82 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 14:09:58 +0200 Subject: [PATCH 11/16] style: apply fixes from lint --- src/common/filters/error.filter.ts | 1 - src/deployment/deploy.service.ts | 9 ++++----- .../birthday/service/birthday-entry.service.ts | 6 +++--- src/modules/command/command.service.ts | 6 +++--- .../command/commands/add-birthday-entry.ts | 17 ++++++++--------- .../command/commands/someone-once-said.ts | 4 ++-- .../cron-tasks/tasks/birthday-shoutout.task.ts | 6 +++--- src/modules/cron-tasks/tasks/wake-up.task.ts | 2 +- src/modules/event/services/interaction.spec.ts | 2 +- src/modules/event/services/interaction.ts | 2 +- src/modules/event/services/messageEvent.spec.ts | 2 +- src/modules/event/services/messageEvent.ts | 2 +- .../poll/service/db-poll.service.spec.ts | 6 +++--- src/modules/poll/service/db-poll.service.ts | 12 ++++++------ .../service/someone-once-said.service.spec.ts | 2 +- 15 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/common/filters/error.filter.ts b/src/common/filters/error.filter.ts index 7f2ba83..eae3982 100644 --- a/src/common/filters/error.filter.ts +++ b/src/common/filters/error.filter.ts @@ -12,7 +12,6 @@ import { catch(error: Error, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); - const request = ctx.getRequest(); const statusCode: number = error instanceof HttpException ? error.getStatus() diff --git a/src/deployment/deploy.service.ts b/src/deployment/deploy.service.ts index a9451b1..c3775e1 100644 --- a/src/deployment/deploy.service.ts +++ b/src/deployment/deploy.service.ts @@ -2,7 +2,6 @@ import { REST, RESTPostAPIChatInputApplicationCommandsJSONBody, Routes } from 'd import { Injectable } from '@nestjs/common'; import { CommandService } from '../modules/command/command.service'; import { AppConfigService } from '../config/config.service'; -import { ConfigService } from '@nestjs/config'; @Injectable() export class DeployServcice { @@ -10,12 +9,12 @@ export class DeployServcice { private readonly commandService: CommandService, private readonly configService: AppConfigService, ) { - var commands = this.loadCommands(); + const commands = this.loadCommands(); this.deployCommands(commands); } loadCommands(): RESTPostAPIChatInputApplicationCommandsJSONBody[] { - var commands = this.commandService.getAllCommands(); + const commands = this.commandService.getAllCommands(); return commands.map((command) => command.data.toJSON()); } @@ -28,11 +27,11 @@ export class DeployServcice { console.log(`Started refreshing ${commands.length} application (/) commands.`); // The put method is used to fully refresh all commands in the guild with the current set - const data = await rest.put(Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.SERVER_ID), { + const data = await rest.put(Routes.applicationGuildCommands(process.env.CLIENT_ID ?? '', process.env.SERVER_ID ?? ''), { body: commands, }); - var log = ''; + let log = ''; if (Array.isArray(data)) log = data.length + ' '; console.log(`Successfully reloaded ${log}application (/) commands.`); } catch (error) { diff --git a/src/modules/birthday/service/birthday-entry.service.ts b/src/modules/birthday/service/birthday-entry.service.ts index 89a2392..157ef8a 100644 --- a/src/modules/birthday/service/birthday-entry.service.ts +++ b/src/modules/birthday/service/birthday-entry.service.ts @@ -51,16 +51,16 @@ export class BirthdayEntryService { async getEntryForToday(): Promise { try { - let entries = await this.birthdayEntry.find({ active: true }); + const entries = await this.birthdayEntry.find({ active: true }); if (!entries) { return null } - let today = new Date() + const today = new Date() return entries .filter((entry) => { - let date = new Date(entry.birthDate) + const date = new Date(entry.birthDate) return ( date.getFullYear() !== today.getFullYear() && date.getMonth() === today.getMonth() && diff --git a/src/modules/command/command.service.ts b/src/modules/command/command.service.ts index d759128..05e756b 100644 --- a/src/modules/command/command.service.ts +++ b/src/modules/command/command.service.ts @@ -52,7 +52,7 @@ export class CommandService { activateBirthdayEntryShoutoutModule, ]; commands.forEach((command) => { - if (command.data.name && command.execute) { + if (command.data.name && !!command.execute) { console.log('command-name: ' + command.data.name); this.commands.set(command.data.name, command); } else { @@ -62,9 +62,9 @@ export class CommandService { }); } - public getCommand(commandName: string): ACommand { + public getCommand(commandName: string): ACommand | undefined { if (this.commands.has(commandName)) return this.commands.get(commandName); - return null; + return; } getAllCommands() { diff --git a/src/modules/command/commands/add-birthday-entry.ts b/src/modules/command/commands/add-birthday-entry.ts index 032141e..9e9c91d 100644 --- a/src/modules/command/commands/add-birthday-entry.ts +++ b/src/modules/command/commands/add-birthday-entry.ts @@ -7,7 +7,6 @@ import { import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; -import { BirthdayEntry } from '../../../schemas/birthday-entry.schema'; import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; export default class AddBirthdayEntryCommand extends ACommand { @@ -33,21 +32,21 @@ export default class AddBirthdayEntryCommand extends ACommand { ); async execute(arg: CommandInteraction): Promise { - let day = arg.options.get('day'); - let month = arg.options.get('month'); - let year = arg.options.get('year'); + const day = arg.options.get('day'); + const month = arg.options.get('month'); + const year = arg.options.get('year'); if (!day || !month || !year) { await arg.reply({ content: 'yo listen you need to provide a day, month and year! 🤓', ephemeral: true, }); - return; + return false; } await arg.deferReply(); - let dayValue = day.value as unknown as number; - let monthValue = month.value as unknown as number; - let yearValue = year.value as unknown as number; - let dateValue = new Date(yearValue, monthValue - 1, dayValue, 0, 0, 0, 0); + const dayValue = day.value as unknown as number; + const monthValue = month.value as unknown as number; + const yearValue = year.value as unknown as number; + const dateValue = new Date(yearValue, monthValue - 1, dayValue, 0, 0, 0, 0); const instance: CreateOrUpdateBirthdayEntryDto = { birthDate: dateValue, username: arg.user.username, diff --git a/src/modules/command/commands/someone-once-said.ts b/src/modules/command/commands/someone-once-said.ts index 9ba41ae..3f76106 100644 --- a/src/modules/command/commands/someone-once-said.ts +++ b/src/modules/command/commands/someone-once-said.ts @@ -24,7 +24,7 @@ export default class SomeoneOnceSaidCommand extends ACommand { ); async execute(arg: CommandInteraction): Promise { - let phrase = arg.options.get('phrase'); + const phrase = arg.options.get('phrase'); if (!phrase) { await arg.reply({ content: 'ok but what did he say 4head ?XP', @@ -33,7 +33,7 @@ export default class SomeoneOnceSaidCommand extends ACommand { return; } await arg.deferReply(); - let phraseValue = (phrase.value as unknown as string).replaceAll( + const phraseValue = (phrase.value as unknown as string).replaceAll( '\\n', '\n', ); diff --git a/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts b/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts index b2035dc..befa583 100644 --- a/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts +++ b/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts @@ -10,16 +10,16 @@ export default class BirthdayShoutoutTask implements ITask { } async execute(): Promise { - let birthDayEntries = await this.birthdayService.getEntryForToday() + const birthDayEntries = await this.birthdayService.getEntryForToday() if (!birthDayEntries || birthDayEntries.length < 1) { return } birthDayEntries.forEach((entry) => { - let creator = this.channel.members.find((member) => member.user.username === entry.username || member.user.displayName === entry.secName) + const creator = this.channel.members.find((member) => member.user.username === entry.username || member.user.displayName === entry.secName) - let embed = new EmbedBuilder() + const embed = new EmbedBuilder() .setTitle(`🚨 Birthday Alert!! 🚨`) .setColor('Random') .setDescription(`${entry.username ?? entry.secName} is turning **${new Date().getFullYear() - entry.birthDate.getFullYear()}** years old today! 🎉🎂🎈`) diff --git a/src/modules/cron-tasks/tasks/wake-up.task.ts b/src/modules/cron-tasks/tasks/wake-up.task.ts index 9d45bdc..eabe209 100644 --- a/src/modules/cron-tasks/tasks/wake-up.task.ts +++ b/src/modules/cron-tasks/tasks/wake-up.task.ts @@ -10,7 +10,7 @@ export default class WakeUpTask implements ITask { async execute(): Promise { - let embed = new EmbedBuilder() + const embed = new EmbedBuilder() .setTitle(`🚨 WAKE UP 🚨`) .setColor('Random') .setDescription(`🎉 it's the first of the month 🎉`) diff --git a/src/modules/event/services/interaction.spec.ts b/src/modules/event/services/interaction.spec.ts index 0229772..47febc8 100644 --- a/src/modules/event/services/interaction.spec.ts +++ b/src/modules/event/services/interaction.spec.ts @@ -4,7 +4,7 @@ import { CommandService } from '../../command/command.service'; import { PollService } from '../../poll/service/poll.service'; describe('Interaction', () => { - var service: Interaction; + let service: Interaction; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ diff --git a/src/modules/event/services/interaction.ts b/src/modules/event/services/interaction.ts index d417274..89d855e 100644 --- a/src/modules/event/services/interaction.ts +++ b/src/modules/event/services/interaction.ts @@ -30,7 +30,7 @@ export class Interaction extends AEvent { const interaction = args[0]; if (interaction.isCommand()) { const { commandName } = interaction; - var command = this.commandService.getCommand(commandName); + const command = this.commandService.getCommand(commandName); command?.execute(interaction); } else if (interaction.isButton()) { if (interaction?.customId === 'up') { diff --git a/src/modules/event/services/messageEvent.spec.ts b/src/modules/event/services/messageEvent.spec.ts index 34859c4..a35f294 100644 --- a/src/modules/event/services/messageEvent.spec.ts +++ b/src/modules/event/services/messageEvent.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; describe('MessageEvent', () => { - var service: MessageEvent; + let service: MessageEvent; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ diff --git a/src/modules/event/services/messageEvent.ts b/src/modules/event/services/messageEvent.ts index 52fb044..3317710 100644 --- a/src/modules/event/services/messageEvent.ts +++ b/src/modules/event/services/messageEvent.ts @@ -66,7 +66,7 @@ export class MessageEvent extends AEvent { if (author.bot) return; this.responseList.forEach((res) => { - var testRes = res.matcher.test(content); + const testRes = res.matcher.test(content); if (testRes) { if (res?.responseType == ResponseType.Reply) { message.reply(res.response); diff --git a/src/modules/poll/service/db-poll.service.spec.ts b/src/modules/poll/service/db-poll.service.spec.ts index 71483fd..d295ef8 100644 --- a/src/modules/poll/service/db-poll.service.spec.ts +++ b/src/modules/poll/service/db-poll.service.spec.ts @@ -16,7 +16,7 @@ const mockPollModel = () => ({ describe('DbPollService', () => { let service: DbPollService; let pollModel: Model; - let mockDate: Date = new Date(0); + const mockDate: Date = new Date(0); jest.useFakeTimers(); jest.setSystemTime(mockDate); beforeEach(async () => { @@ -47,7 +47,7 @@ describe('DbPollService', () => { downvotes: 0, upMembers: [], downMembers: [], - } as PollEntity; + } as unknown as PollEntity; const mockCreatedPoll: PollDocument = { ...mockPoll, @@ -80,7 +80,7 @@ describe('DbPollService', () => { downvotes: 0, upMembers: [], downMembers: [], - } as PollEntity; + } as unknown as PollEntity; const mockCreatedPoll: PollDocument = { ...mockPoll, diff --git a/src/modules/poll/service/db-poll.service.ts b/src/modules/poll/service/db-poll.service.ts index 9c7190f..f89492c 100644 --- a/src/modules/poll/service/db-poll.service.ts +++ b/src/modules/poll/service/db-poll.service.ts @@ -10,7 +10,7 @@ export class DbPollService { private readonly pollModel: Model, ) {} - async create(pollDto: PollEntity): Promise { + async create(pollDto: PollEntity): Promise { try { return await this.pollModel.create({ msg: pollDto.msg, @@ -24,11 +24,11 @@ export class DbPollService { }); } catch (e) { console.error(e); - return null; + return; } } - async update(updateDto: UpdatePollDto): Promise { + async update(updateDto: UpdatePollDto): Promise { try { return await this.pollModel.findOneAndUpdate( { msg: updateDto.msg }, @@ -42,11 +42,11 @@ export class DbPollService { { new: true }, ); } catch (e) { - return null; + return; } } - async get(messageId: string): Promise { + async get(messageId: string): Promise { try { const test = await this.pollModel.findOne({ msg: messageId, @@ -54,7 +54,7 @@ export class DbPollService { }); return test; } catch (e) { - return null; + return; } } } diff --git a/src/modules/someone-once-said/service/someone-once-said.service.spec.ts b/src/modules/someone-once-said/service/someone-once-said.service.spec.ts index bd24ed9..1eec0eb 100644 --- a/src/modules/someone-once-said/service/someone-once-said.service.spec.ts +++ b/src/modules/someone-once-said/service/someone-once-said.service.spec.ts @@ -7,7 +7,7 @@ import { getModelToken } from '@nestjs/mongoose'; describe('SomeoneOnceSaidService', () => { let service: SomeoneOnceSaidService; let modelMock: Model; - let mockDate: Date = new Date(0); + const mockDate: Date = new Date(0); jest.useFakeTimers(); jest.setSystemTime(mockDate); const mockQuoteDto: SomeoneOnceSaidEntity = { From 9ac43c52d8f7a52137e201d927fca9a85e05b929 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 14:15:47 +0200 Subject: [PATCH 12/16] test: fix pipeline --- .../poll/service/db-poll.service.spec.ts | 2 +- .../service/someone-once-said.service.spec.ts | 21 ------------------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/src/modules/poll/service/db-poll.service.spec.ts b/src/modules/poll/service/db-poll.service.spec.ts index d295ef8..09d8956 100644 --- a/src/modules/poll/service/db-poll.service.spec.ts +++ b/src/modules/poll/service/db-poll.service.spec.ts @@ -67,7 +67,7 @@ describe('DbPollService', () => { const result = await service.create({} as PollEntity); - expect(result).toBeNull(); + expect(result).toBeUndefined(); }); }); diff --git a/src/modules/someone-once-said/service/someone-once-said.service.spec.ts b/src/modules/someone-once-said/service/someone-once-said.service.spec.ts index 1eec0eb..1b683f5 100644 --- a/src/modules/someone-once-said/service/someone-once-said.service.spec.ts +++ b/src/modules/someone-once-said/service/someone-once-said.service.spec.ts @@ -74,27 +74,6 @@ describe('SomeoneOnceSaidService', () => { }); }); - describe('deleteProductionOrderForUser', () => { - it('should delete quotes for a user', async () => { - const username = 'testUser'; - - const result = await service.deleteProductionOrderForUser(username); - - expect(result).toBeUndefined(); - expect(modelMock.deleteMany).toHaveBeenCalledWith({ username }); - }); - - it('should return an error when there is an error', async () => { - const username = 'testUser'; - (modelMock as any).deleteMany = jest - .fn() - .mockRejectedValue(new Error('test')); - - const result = await service.deleteProductionOrderForUser(username); - expect(result).toStrictEqual(new MongooseError(`Error deleting Quotes for username: ${username}`)) - - }); - }); describe('getRandomQuote', () => { it('should return a random quote', async () => { From 207701018b27966fd23209f7f44f04f83e344442 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 14:37:11 +0200 Subject: [PATCH 13/16] fix: swagger setup --- src/main.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main.ts b/src/main.ts index 5512298..b21f76f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -31,21 +31,15 @@ async function bootstrapSwagger( const config = new DocumentBuilder() .setTitle('BingusBoingus API') .setDescription('BingusBoingus REST API Documentation') - .setVersion('1.0') - .addBearerAuth() - .addServer(`localhost:${appConfig.appPort}`, 'Default Ingress') + .setVersion('1.0').setBasePath('api/v1') .build(); const document = SwaggerModule.createDocument(app, config, { - ignoreGlobalPrefix: true, - deepScanRoutes: true, + ignoreGlobalPrefix: false, + }); SwaggerModule.setup('api/v1/doc', app, document, { - swaggerOptions: { - persistAuthorization: true, - urls: [`localhost:${appConfig.appPort}/api/v1/doc/swagger.json`] - }, customSiteTitle: 'API Docs', explorer: true, } as unknown as any); From 07d72d3463d92161b15e74d540a6a923c855f8a5 Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Sat, 4 May 2024 15:12:26 +0200 Subject: [PATCH 14/16] fix(birthdaycontroller): class serializer without options throws --- src/modules/birthday/controller/birthday-entry.controller.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/birthday/controller/birthday-entry.controller.ts b/src/modules/birthday/controller/birthday-entry.controller.ts index edef66b..fb37cc0 100644 --- a/src/modules/birthday/controller/birthday-entry.controller.ts +++ b/src/modules/birthday/controller/birthday-entry.controller.ts @@ -50,7 +50,6 @@ import { CreateOrUpdateBirthdayEntryDto } from '../dto/create-or-update-birthday } @Post('/') - @UseInterceptors(ClassSerializerInterceptor) @ApiOperation({ summary: 'create birthday entry', description: From b1f602630281731831f8b327e87d0c20d0eae62f Mon Sep 17 00:00:00 2001 From: matteom0165 Date: Mon, 6 May 2024 22:36:52 +0200 Subject: [PATCH 15/16] refactor(folder-structure): move model dependent modules into models folder --- .../{ => models}/birthday/controller/birthday-entry.controller.ts | 0 .../birthday/dto/create-or-update-birthday-entry.dto.ts | 0 src/modules/{ => models}/birthday/module/birthday-entry.module.ts | 0 .../{ => models}/birthday/service/birthday-entry.service.ts | 0 src/modules/{ => models}/poll/dto/update-poll.dto.ts | 0 src/modules/{ => models}/poll/module/poll.module.ts | 0 src/modules/{ => models}/poll/service/db-poll.service.spec.ts | 0 src/modules/{ => models}/poll/service/db-poll.service.ts | 0 src/modules/{ => models}/poll/service/poll.service.ts | 0 .../someone-once-said/module/someone-once-said.module.ts | 0 .../someone-once-said/service/someone-once-said.service.spec.ts | 0 .../someone-once-said/service/someone-once-said.service.ts | 0 src/modules/{ => models}/version/controller/version.controller.ts | 0 src/modules/{ => models}/version/module/version.module.ts | 0 src/modules/{ => models}/version/service/version.service.ts | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename src/modules/{ => models}/birthday/controller/birthday-entry.controller.ts (100%) rename src/modules/{ => models}/birthday/dto/create-or-update-birthday-entry.dto.ts (100%) rename src/modules/{ => models}/birthday/module/birthday-entry.module.ts (100%) rename src/modules/{ => models}/birthday/service/birthday-entry.service.ts (100%) rename src/modules/{ => models}/poll/dto/update-poll.dto.ts (100%) rename src/modules/{ => models}/poll/module/poll.module.ts (100%) rename src/modules/{ => models}/poll/service/db-poll.service.spec.ts (100%) rename src/modules/{ => models}/poll/service/db-poll.service.ts (100%) rename src/modules/{ => models}/poll/service/poll.service.ts (100%) rename src/modules/{ => models}/someone-once-said/module/someone-once-said.module.ts (100%) rename src/modules/{ => models}/someone-once-said/service/someone-once-said.service.spec.ts (100%) rename src/modules/{ => models}/someone-once-said/service/someone-once-said.service.ts (100%) rename src/modules/{ => models}/version/controller/version.controller.ts (100%) rename src/modules/{ => models}/version/module/version.module.ts (100%) rename src/modules/{ => models}/version/service/version.service.ts (100%) diff --git a/src/modules/birthday/controller/birthday-entry.controller.ts b/src/modules/models/birthday/controller/birthday-entry.controller.ts similarity index 100% rename from src/modules/birthday/controller/birthday-entry.controller.ts rename to src/modules/models/birthday/controller/birthday-entry.controller.ts diff --git a/src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts b/src/modules/models/birthday/dto/create-or-update-birthday-entry.dto.ts similarity index 100% rename from src/modules/birthday/dto/create-or-update-birthday-entry.dto.ts rename to src/modules/models/birthday/dto/create-or-update-birthday-entry.dto.ts diff --git a/src/modules/birthday/module/birthday-entry.module.ts b/src/modules/models/birthday/module/birthday-entry.module.ts similarity index 100% rename from src/modules/birthday/module/birthday-entry.module.ts rename to src/modules/models/birthday/module/birthday-entry.module.ts diff --git a/src/modules/birthday/service/birthday-entry.service.ts b/src/modules/models/birthday/service/birthday-entry.service.ts similarity index 100% rename from src/modules/birthday/service/birthday-entry.service.ts rename to src/modules/models/birthday/service/birthday-entry.service.ts diff --git a/src/modules/poll/dto/update-poll.dto.ts b/src/modules/models/poll/dto/update-poll.dto.ts similarity index 100% rename from src/modules/poll/dto/update-poll.dto.ts rename to src/modules/models/poll/dto/update-poll.dto.ts diff --git a/src/modules/poll/module/poll.module.ts b/src/modules/models/poll/module/poll.module.ts similarity index 100% rename from src/modules/poll/module/poll.module.ts rename to src/modules/models/poll/module/poll.module.ts diff --git a/src/modules/poll/service/db-poll.service.spec.ts b/src/modules/models/poll/service/db-poll.service.spec.ts similarity index 100% rename from src/modules/poll/service/db-poll.service.spec.ts rename to src/modules/models/poll/service/db-poll.service.spec.ts diff --git a/src/modules/poll/service/db-poll.service.ts b/src/modules/models/poll/service/db-poll.service.ts similarity index 100% rename from src/modules/poll/service/db-poll.service.ts rename to src/modules/models/poll/service/db-poll.service.ts diff --git a/src/modules/poll/service/poll.service.ts b/src/modules/models/poll/service/poll.service.ts similarity index 100% rename from src/modules/poll/service/poll.service.ts rename to src/modules/models/poll/service/poll.service.ts diff --git a/src/modules/someone-once-said/module/someone-once-said.module.ts b/src/modules/models/someone-once-said/module/someone-once-said.module.ts similarity index 100% rename from src/modules/someone-once-said/module/someone-once-said.module.ts rename to src/modules/models/someone-once-said/module/someone-once-said.module.ts diff --git a/src/modules/someone-once-said/service/someone-once-said.service.spec.ts b/src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts similarity index 100% rename from src/modules/someone-once-said/service/someone-once-said.service.spec.ts rename to src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts diff --git a/src/modules/someone-once-said/service/someone-once-said.service.ts b/src/modules/models/someone-once-said/service/someone-once-said.service.ts similarity index 100% rename from src/modules/someone-once-said/service/someone-once-said.service.ts rename to src/modules/models/someone-once-said/service/someone-once-said.service.ts diff --git a/src/modules/version/controller/version.controller.ts b/src/modules/models/version/controller/version.controller.ts similarity index 100% rename from src/modules/version/controller/version.controller.ts rename to src/modules/models/version/controller/version.controller.ts diff --git a/src/modules/version/module/version.module.ts b/src/modules/models/version/module/version.module.ts similarity index 100% rename from src/modules/version/module/version.module.ts rename to src/modules/models/version/module/version.module.ts diff --git a/src/modules/version/service/version.service.ts b/src/modules/models/version/service/version.service.ts similarity index 100% rename from src/modules/version/service/version.service.ts rename to src/modules/models/version/service/version.service.ts From 0a0e4c57de06c93527b709e3a1b60a8a24ec8177 Mon Sep 17 00:00:00 2001 From: Matteo Juen Date: Tue, 7 May 2024 11:34:36 +0200 Subject: [PATCH 16/16] refactor: import paths --- src/modules/command/command.module.ts | 8 ++++---- .../command/commands/activate-birthday-shoutout.ts | 4 ++-- src/modules/command/commands/add-birthday-entry.ts | 4 ++-- .../command/commands/deactivate-birthday-shoutout.ts | 4 ++-- src/modules/command/commands/get-a-quote.ts | 2 +- src/modules/command/commands/poll.ts | 2 +- src/modules/command/commands/someone-once-said.ts | 2 +- src/modules/command/commands/version.ts | 2 +- src/modules/cron-tasks/cron-scheduler.ts | 2 +- src/modules/cron-tasks/task.module.ts | 2 +- .../cron-tasks/tasks/birthday-shoutout.task.ts | 2 +- src/modules/discord/discord.module.ts | 2 +- src/modules/discord/discord.service.ts | 2 +- src/modules/event/event.module.ts | 2 +- src/modules/event/services/interaction.spec.ts | 2 +- src/modules/event/services/interaction.ts | 11 ++--------- .../birthday/controller/birthday-entry.controller.ts | 4 ++-- .../models/birthday/module/birthday-entry.module.ts | 2 +- .../models/birthday/service/birthday-entry.service.ts | 2 +- src/modules/models/poll/module/poll.module.ts | 2 +- .../models/poll/service/db-poll.service.spec.ts | 4 ++-- src/modules/models/poll/service/db-poll.service.ts | 4 ++-- src/modules/models/poll/service/poll.service.ts | 2 +- .../module/someone-once-said.module.ts | 5 +---- .../service/someone-once-said.service.spec.ts | 4 ++-- .../service/someone-once-said.service.ts | 6 +++--- .../models/version/controller/version.controller.ts | 2 +- 27 files changed, 40 insertions(+), 50 deletions(-) diff --git a/src/modules/command/command.module.ts b/src/modules/command/command.module.ts index 26fe1b3..0ae4977 100644 --- a/src/modules/command/command.module.ts +++ b/src/modules/command/command.module.ts @@ -8,16 +8,16 @@ import { BugReport } from './commands/bug'; import { CoinflipCommand } from './commands/coinflip'; import { GoldCommand } from './commands/gold'; import SomeoneOnceSaidCommand from './commands/someone-once-said'; -import { SomeoneOnceSaidModule } from '../someone-once-said/module/someone-once-said.module'; import GetRandomQuote from './commands/get-a-quote'; import { PollCommand } from './commands/poll'; -import { PollModule } from '../poll/module/poll.module'; -import { VersionModule } from '../version/module/version.module'; import { VersionCommand } from './commands/version'; -import { BirthdayEntryModule } from '../birthday/module/birthday-entry.module'; import AddBirthdayEntryCommand from './commands/add-birthday-entry'; import ActivateBirthdayEntryShoutoutCommand from './commands/activate-birthday-shoutout'; import DeactivateBirthdayEntryShoutoutCommand from './commands/deactivate-birthday-shoutout'; +import { SomeoneOnceSaidModule } from '../models/someone-once-said/module/someone-once-said.module'; +import { PollModule } from '../models/poll/module/poll.module'; +import { VersionModule } from '../models/version/module/version.module'; +import { BirthdayEntryModule } from '../models/birthday/module/birthday-entry.module'; @Module({ providers: [ diff --git a/src/modules/command/commands/activate-birthday-shoutout.ts b/src/modules/command/commands/activate-birthday-shoutout.ts index 1ed6a98..3ce4648 100644 --- a/src/modules/command/commands/activate-birthday-shoutout.ts +++ b/src/modules/command/commands/activate-birthday-shoutout.ts @@ -5,8 +5,8 @@ import { } from 'discord.js'; import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; - import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; -import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; +import { BirthdayEntryService } from '../../models/birthday/service/birthday-entry.service'; +import { CreateOrUpdateBirthdayEntryDto } from '../../models/birthday/dto/create-or-update-birthday-entry.dto'; export default class ActivateBirthdayEntryShoutoutCommand extends ACommand { constructor( diff --git a/src/modules/command/commands/add-birthday-entry.ts b/src/modules/command/commands/add-birthday-entry.ts index 9e9c91d..7d03fa3 100644 --- a/src/modules/command/commands/add-birthday-entry.ts +++ b/src/modules/command/commands/add-birthday-entry.ts @@ -6,8 +6,8 @@ import { } from 'discord.js'; import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; -import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; -import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; +import { BirthdayEntryService } from '../../models/birthday/service/birthday-entry.service'; +import { CreateOrUpdateBirthdayEntryDto } from '../../models/birthday/dto/create-or-update-birthday-entry.dto'; export default class AddBirthdayEntryCommand extends ACommand { constructor( diff --git a/src/modules/command/commands/deactivate-birthday-shoutout.ts b/src/modules/command/commands/deactivate-birthday-shoutout.ts index 686a8d3..d16c295 100644 --- a/src/modules/command/commands/deactivate-birthday-shoutout.ts +++ b/src/modules/command/commands/deactivate-birthday-shoutout.ts @@ -1,8 +1,8 @@ import { CacheType, CommandInteraction, SlashCommandBuilder } from 'discord.js'; import { ACommand } from '../command.abstract'; import { Inject } from '@nestjs/common'; -import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service'; -import { CreateOrUpdateBirthdayEntryDto } from '../../birthday/dto/create-or-update-birthday-entry.dto'; +import { BirthdayEntryService } from '../../models/birthday/service/birthday-entry.service'; +import { CreateOrUpdateBirthdayEntryDto } from '../../models/birthday/dto/create-or-update-birthday-entry.dto'; export default class DeactivateBirthdayEntryShoutoutCommand extends ACommand { constructor( diff --git a/src/modules/command/commands/get-a-quote.ts b/src/modules/command/commands/get-a-quote.ts index 3e46868..35c1372 100644 --- a/src/modules/command/commands/get-a-quote.ts +++ b/src/modules/command/commands/get-a-quote.ts @@ -5,8 +5,8 @@ import { SlashCommandBuilder, } from 'discord.js'; import { ACommand } from '../command.abstract'; -import { SomeoneOnceSaidService } from '../../someone-once-said/service/someone-once-said.service'; import { Inject } from '@nestjs/common'; +import { SomeoneOnceSaidService } from '../../models/someone-once-said/service/someone-once-said.service'; export default class GetRandomQuote extends ACommand { constructor( diff --git a/src/modules/command/commands/poll.ts b/src/modules/command/commands/poll.ts index e522a81..005f78a 100644 --- a/src/modules/command/commands/poll.ts +++ b/src/modules/command/commands/poll.ts @@ -9,7 +9,7 @@ import { SlashCommandBuilder, } from 'discord.js'; import { ACommand } from '../command.abstract'; -import { PollService } from '../../poll/service/poll.service'; +import { PollService } from '../../models/poll/service/poll.service'; @Injectable() export class PollCommand extends ACommand { diff --git a/src/modules/command/commands/someone-once-said.ts b/src/modules/command/commands/someone-once-said.ts index 3f76106..2117992 100644 --- a/src/modules/command/commands/someone-once-said.ts +++ b/src/modules/command/commands/someone-once-said.ts @@ -5,9 +5,9 @@ import { SlashCommandBuilder, } from 'discord.js'; import { ACommand } from '../command.abstract'; -import { SomeoneOnceSaidService } from '../../someone-once-said/service/someone-once-said.service'; import { Inject } from '@nestjs/common'; import { SomeoneOnceSaid } from '../../../schemas/someone-once-said.schema'; +import { SomeoneOnceSaidService } from '../../models/someone-once-said/service/someone-once-said.service'; export default class SomeoneOnceSaidCommand extends ACommand { constructor( diff --git a/src/modules/command/commands/version.ts b/src/modules/command/commands/version.ts index 7c77372..2d86931 100644 --- a/src/modules/command/commands/version.ts +++ b/src/modules/command/commands/version.ts @@ -1,7 +1,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { SlashCommandBuilder } from 'discord.js'; import { ACommand } from '../command.abstract'; -import { VersionService } from '../../version/service/version.service'; +import { VersionService } from '../../models/version/service/version.service'; @Injectable() export class VersionCommand extends ACommand { diff --git a/src/modules/cron-tasks/cron-scheduler.ts b/src/modules/cron-tasks/cron-scheduler.ts index 0afd715..6d0c351 100644 --- a/src/modules/cron-tasks/cron-scheduler.ts +++ b/src/modules/cron-tasks/cron-scheduler.ts @@ -3,8 +3,8 @@ import { ITask } from './tasks/interfaces/task.interface' import BirthdayShoutoutTask from './tasks/birthday-shoutout.task' import * as cron from 'node-cron' import { Inject } from '@nestjs/common' -import { BirthdayEntryService } from '../birthday/service/birthday-entry.service' import WakeUpTask from './tasks/wake-up.task' +import { BirthdayEntryService } from '../models/birthday/service/birthday-entry.service' interface TaskEntry { diff --git a/src/modules/cron-tasks/task.module.ts b/src/modules/cron-tasks/task.module.ts index d6accfa..714df29 100644 --- a/src/modules/cron-tasks/task.module.ts +++ b/src/modules/cron-tasks/task.module.ts @@ -1,5 +1,5 @@ import { Module } from "@nestjs/common"; -import { BirthdayEntryModule } from "../birthday/module/birthday-entry.module"; +import { BirthdayEntryModule } from "../models/birthday/module/birthday-entry.module"; @Module({ diff --git a/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts b/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts index befa583..bc9a222 100644 --- a/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts +++ b/src/modules/cron-tasks/tasks/birthday-shoutout.task.ts @@ -1,6 +1,6 @@ import { EmbedBuilder, TextChannel } from 'discord.js' import { ITask } from './interfaces/task.interface' -import { BirthdayEntryService } from '../../birthday/service/birthday-entry.service' +import { BirthdayEntryService } from '../../models/birthday/service/birthday-entry.service' export default class BirthdayShoutoutTask implements ITask { private channel: TextChannel diff --git a/src/modules/discord/discord.module.ts b/src/modules/discord/discord.module.ts index 518977c..a7a87ff 100644 --- a/src/modules/discord/discord.module.ts +++ b/src/modules/discord/discord.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; import { DiscordService } from './discord.service'; import { AppConfigModule } from '../../config/config.module'; -import { BirthdayEntryModule } from '../birthday/module/birthday-entry.module'; +import { BirthdayEntryModule } from '../models/birthday/module/birthday-entry.module'; @Module({ imports: [AppConfigModule, BirthdayEntryModule], diff --git a/src/modules/discord/discord.service.ts b/src/modules/discord/discord.service.ts index 72c9494..d21e2a9 100644 --- a/src/modules/discord/discord.service.ts +++ b/src/modules/discord/discord.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { Client, GatewayIntentBits } from 'discord.js'; import { AppConfigService } from '../../config/config.service'; import { CronScheduler } from '../cron-tasks/cron-scheduler'; -import { BirthdayEntryService } from '../birthday/service/birthday-entry.service'; +import { BirthdayEntryService } from '../models/birthday/service/birthday-entry.service'; @Injectable() export class DiscordService { diff --git a/src/modules/event/event.module.ts b/src/modules/event/event.module.ts index 4bef5c3..4f191b7 100644 --- a/src/modules/event/event.module.ts +++ b/src/modules/event/event.module.ts @@ -5,7 +5,7 @@ import { Interaction } from './services/interaction'; import { MessageEvent } from './services/messageEvent'; import { DiscordModule } from '../discord/discord.module'; import { CommandModule } from '../command/command.module'; -import { PollModule } from '../poll/module/poll.module'; +import { PollModule } from '../models/poll/module/poll.module'; @Module({ imports: [DiscordModule, CommandModule, PollModule], diff --git a/src/modules/event/services/interaction.spec.ts b/src/modules/event/services/interaction.spec.ts index 47febc8..622c56d 100644 --- a/src/modules/event/services/interaction.spec.ts +++ b/src/modules/event/services/interaction.spec.ts @@ -1,7 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { Interaction } from './interaction'; import { CommandService } from '../../command/command.service'; -import { PollService } from '../../poll/service/poll.service'; +import { PollService } from '../../models/poll/service/poll.service'; describe('Interaction', () => { let service: Interaction; diff --git a/src/modules/event/services/interaction.ts b/src/modules/event/services/interaction.ts index 89d855e..b2c3173 100644 --- a/src/modules/event/services/interaction.ts +++ b/src/modules/event/services/interaction.ts @@ -1,18 +1,11 @@ import { - ActionRowBuilder, - ButtonBuilder, - ButtonInteraction, - ButtonStyle, - CacheType, ClientEvents, - EmbedBuilder, Events, - Message, } from 'discord.js'; import { AEvent } from '../event.abstract'; import { CommandService } from '../../command/command.service'; -import { Inject, Injectable } from '@nestjs/common'; -import { PollService } from '../../poll/service/poll.service'; +import { Injectable } from '@nestjs/common'; +import { PollService } from '../../models/poll/service/poll.service'; @Injectable() export class Interaction extends AEvent { diff --git a/src/modules/models/birthday/controller/birthday-entry.controller.ts b/src/modules/models/birthday/controller/birthday-entry.controller.ts index fb37cc0..a0d94a6 100644 --- a/src/modules/models/birthday/controller/birthday-entry.controller.ts +++ b/src/modules/models/birthday/controller/birthday-entry.controller.ts @@ -18,10 +18,10 @@ import { ApiResponse, ApiTags, } from '@nestjs/swagger'; -import { ReS } from '../../../common/res.model'; import { BirthdayEntryService } from '../service/birthday-entry.service'; -import { BirthdayEntryDocument } from '../../../schemas/birthday-entry.schema'; import { CreateOrUpdateBirthdayEntryDto } from '../dto/create-or-update-birthday-entry.dto'; +import { ReS } from '../../../../common/res.model'; +import { BirthdayEntryDocument } from '../../../../schemas/birthday-entry.schema'; @Controller('birthday-entry') @ApiTags('birthday-entry') diff --git a/src/modules/models/birthday/module/birthday-entry.module.ts b/src/modules/models/birthday/module/birthday-entry.module.ts index e9a2eff..35de104 100644 --- a/src/modules/models/birthday/module/birthday-entry.module.ts +++ b/src/modules/models/birthday/module/birthday-entry.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; -import { BirthdayEntry, BirthdayEntrySchema } from '../../../schemas/birthday-entry.schema'; import { BirthdayEntryService } from '../service/birthday-entry.service'; import { BirthdayEntryController } from '../controller/birthday-entry.controller'; +import { BirthdayEntry, BirthdayEntrySchema } from '../../../../schemas/birthday-entry.schema'; @Module({ imports: [ diff --git a/src/modules/models/birthday/service/birthday-entry.service.ts b/src/modules/models/birthday/service/birthday-entry.service.ts index 157ef8a..1a7ae60 100644 --- a/src/modules/models/birthday/service/birthday-entry.service.ts +++ b/src/modules/models/birthday/service/birthday-entry.service.ts @@ -1,7 +1,7 @@ import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import { BirthdayEntryDocument } from '../../../schemas/birthday-entry.schema'; import { CreateOrUpdateBirthdayEntryDto } from '../dto/create-or-update-birthday-entry.dto'; +import { BirthdayEntryDocument } from '../../../../schemas/birthday-entry.schema'; export class BirthdayEntryService { constructor( diff --git a/src/modules/models/poll/module/poll.module.ts b/src/modules/models/poll/module/poll.module.ts index d9c629c..8932633 100644 --- a/src/modules/models/poll/module/poll.module.ts +++ b/src/modules/models/poll/module/poll.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; -import { Poll, PollSchema } from '../../../schemas/poll.schema'; import { DbPollService } from '../service/db-poll.service'; import { PollService } from '../service/poll.service'; +import { Poll, PollSchema } from '../../../../schemas/poll.schema'; @Module({ imports: [ diff --git a/src/modules/models/poll/service/db-poll.service.spec.ts b/src/modules/models/poll/service/db-poll.service.spec.ts index 09d8956..8a24e67 100644 --- a/src/modules/models/poll/service/db-poll.service.spec.ts +++ b/src/modules/models/poll/service/db-poll.service.spec.ts @@ -2,9 +2,9 @@ import { Test, TestingModule } from '@nestjs/testing'; import { getModelToken } from '@nestjs/mongoose'; import { Model, MongooseError } from 'mongoose'; import { DbPollService } from './db-poll.service'; -import { PollDocument } from '../../../schemas/poll.schema'; -import { PollEntity } from '../../../schemas/poll-entity.model'; import { UpdatePollDto } from '../dto/update-poll.dto'; +import { PollDocument } from '../../../../schemas/poll.schema'; +import { PollEntity } from '../../../../schemas/poll-entity.model'; // Mocking the pollModel const mockPollModel = () => ({ diff --git a/src/modules/models/poll/service/db-poll.service.ts b/src/modules/models/poll/service/db-poll.service.ts index f89492c..45bd9da 100644 --- a/src/modules/models/poll/service/db-poll.service.ts +++ b/src/modules/models/poll/service/db-poll.service.ts @@ -1,8 +1,8 @@ import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import { PollDocument } from '../../../schemas/poll.schema'; -import { PollEntity } from '../../../schemas/poll-entity.model'; import { UpdatePollDto } from '../dto/update-poll.dto'; +import { PollEntity } from '../../../../schemas/poll-entity.model'; +import { PollDocument } from '../../../../schemas/poll.schema'; export class DbPollService { constructor( diff --git a/src/modules/models/poll/service/poll.service.ts b/src/modules/models/poll/service/poll.service.ts index 8a177b7..c8615c7 100644 --- a/src/modules/models/poll/service/poll.service.ts +++ b/src/modules/models/poll/service/poll.service.ts @@ -11,7 +11,7 @@ import { } from 'discord.js'; import { DbPollService } from './db-poll.service'; import { Inject } from '@nestjs/common'; -import { PollDocument } from '../../../schemas/poll.schema'; +import { PollDocument } from '../../../../schemas/poll.schema'; export class PollService { constructor( diff --git a/src/modules/models/someone-once-said/module/someone-once-said.module.ts b/src/modules/models/someone-once-said/module/someone-once-said.module.ts index 20deb78..eaf49ce 100644 --- a/src/modules/models/someone-once-said/module/someone-once-said.module.ts +++ b/src/modules/models/someone-once-said/module/someone-once-said.module.ts @@ -1,10 +1,7 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { SomeoneOnceSaidService } from '../service/someone-once-said.service'; -import { - SomeoneOnceSaid, - SomeoneOnceSaidSchema, -} from '../../../schemas/someone-once-said.schema'; +import { SomeoneOnceSaid, SomeoneOnceSaidSchema } from '../../../../schemas/someone-once-said.schema'; @Module({ imports: [ diff --git a/src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts b/src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts index 1b683f5..553d060 100644 --- a/src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts +++ b/src/modules/models/someone-once-said/service/someone-once-said.service.spec.ts @@ -1,9 +1,9 @@ import { Test, TestingModule } from '@nestjs/testing'; import { Model, Error, MongooseError } from 'mongoose'; import { SomeoneOnceSaidService } from './someone-once-said.service'; -import { SomeoneOnceSaidEntity } from '../../../schemas/someone-once-said-entity.model'; -import { SomeoneOnceSaidDocument } from '../../../schemas/someone-once-said.schema'; import { getModelToken } from '@nestjs/mongoose'; +import { SomeoneOnceSaidDocument } from '../../../../schemas/someone-once-said.schema'; +import { SomeoneOnceSaidEntity } from '../../../../schemas/someone-once-said-entity.model'; describe('SomeoneOnceSaidService', () => { let service: SomeoneOnceSaidService; let modelMock: Model; diff --git a/src/modules/models/someone-once-said/service/someone-once-said.service.ts b/src/modules/models/someone-once-said/service/someone-once-said.service.ts index ee73d80..8494e05 100644 --- a/src/modules/models/someone-once-said/service/someone-once-said.service.ts +++ b/src/modules/models/someone-once-said/service/someone-once-said.service.ts @@ -1,7 +1,7 @@ import { InjectModel } from '@nestjs/mongoose'; -import { Model, Error } from 'mongoose'; -import { SomeoneOnceSaidEntity } from '../../../schemas/someone-once-said-entity.model'; -import { SomeoneOnceSaidDocument } from '../../../schemas/someone-once-said.schema'; +import { Model } from 'mongoose'; +import { SomeoneOnceSaidDocument } from '../../../../schemas/someone-once-said.schema'; +import { SomeoneOnceSaidEntity } from '../../../../schemas/someone-once-said-entity.model'; export class SomeoneOnceSaidService { constructor( diff --git a/src/modules/models/version/controller/version.controller.ts b/src/modules/models/version/controller/version.controller.ts index de4581d..3a3e39d 100644 --- a/src/modules/models/version/controller/version.controller.ts +++ b/src/modules/models/version/controller/version.controller.ts @@ -14,8 +14,8 @@ import { ApiResponse, ApiTags, } from '@nestjs/swagger'; -import { ReS } from '../../../common/res.model'; import { VersionService } from '../service/version.service'; +import { ReS } from '../../../../common/res.model'; @Controller('version') @ApiTags('version')