diff --git a/package-lock.json b/package-lock.json index 75866a306..01c14c53e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,7 @@ { "name": "genesis", "version": "2.12.1", - "lockfileVersion": 2, - "requires": true, + "lockfileVersion": 3, "packages": { "": { "name": "genesis", @@ -17,7 +16,7 @@ "cron": "^4.1.0", "dayjs": "^1.11.13", "decache": "^4.6.2", - "discord.js": "^13.17.1", + "discord.js": "^14.17.3", "flat-cache": "^3.2.0", "i18n-string-templates": "^1.0.7", "json-query": "^2.2.2", @@ -2300,9 +2299,9 @@ } }, "node_modules/@commitlint/top-level/node_modules/yocto-queue": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.0.tgz", - "integrity": "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, "license": "MIT", "engines": { @@ -2340,33 +2339,130 @@ } }, "node_modules/@discordjs/builders": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.16.0.tgz", - "integrity": "sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A==", - "deprecated": "no longer supported", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.10.0.tgz", + "integrity": "sha512-ikVZsZP+3shmVJ5S1oM+7SveUCK3L9fTyfA8aJ7uD9cNQlTqF+3Irbk2Y22KXTb3C3RNUahRkSInClJMkHrINg==", + "license": "Apache-2.0", "dependencies": { - "@sapphire/shapeshift": "^3.5.1", - "discord-api-types": "^0.36.2", + "@discordjs/formatters": "^0.6.0", + "@discordjs/util": "^1.1.1", + "@sapphire/shapeshift": "^4.0.0", + "discord-api-types": "^0.37.114", "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.1", - "tslib": "^2.4.0" + "ts-mixer": "^6.0.4", + "tslib": "^2.6.3" }, "engines": { - "node": ">=16.9.0" + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, - "node_modules/@discordjs/builders/node_modules/discord-api-types": { - "version": "0.36.3", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", - "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" - }, "node_modules/@discordjs/collection": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", - "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==", - "deprecated": "no longer supported", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.0.tgz", + "integrity": "sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "^0.37.114" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.2.tgz", + "integrity": "sha512-9bOvXYLQd5IBg/kKGuEFq3cstVxAMJ6wMxO2U3wjrgO+lHv8oNCT+BBRpuzVQh7BoXKvk/gpajceGvQUiRoJ8g==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.1", + "@discordjs/util": "^1.1.1", + "@sapphire/async-queue": "^1.5.3", + "@sapphire/snowflake": "^3.5.3", + "@vladfrangu/async_event_emitter": "^2.4.6", + "discord-api-types": "^0.37.114", + "magic-bytes.js": "^1.10.0", + "tslib": "^2.6.3", + "undici": "6.19.8" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/util": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz", + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.0.tgz", + "integrity": "sha512-QH5CAFe3wHDiedbO+EI3OOiyipwWd+Q6BdoFZUw/Wf2fw5Cv2fgU/9UEtJRmJa9RecI+TAhdGPadMaEIur5yJg==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.1.0", + "@discordjs/rest": "^2.4.1", + "@discordjs/util": "^1.1.0", + "@sapphire/async-queue": "^1.5.2", + "@types/ws": "^8.5.10", + "@vladfrangu/async_event_emitter": "^2.2.4", + "discord-api-types": "^0.37.114", + "tslib": "^2.6.2", + "ws": "^8.17.0" + }, + "engines": { + "node": ">=16.11.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz", + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==", + "license": "Apache-2.0", "engines": { - "node": ">=16.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" } }, "node_modules/@es-joy/jsdoccomment": { @@ -2730,22 +2826,33 @@ } }, "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz", + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" } }, "node_modules/@sapphire/shapeshift": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz", - "integrity": "sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz", + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", - "lodash.uniqwith": "^4.5.0" + "lodash": "^4.17.21" }, + "engines": { + "node": ">=v16" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "license": "MIT", "engines": { "node": ">=v14.0.0", "npm": ">=7.0.0" @@ -2853,10 +2960,11 @@ } }, "node_modules/@types/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -2891,30 +2999,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" }, - "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", - "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", @@ -2923,9 +3007,10 @@ "peer": true }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", + "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3217,6 +3302,16 @@ "dev": true, "peer": true }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz", + "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@wfcd/eslint-config": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/@wfcd/eslint-config/-/eslint-config-1.6.3.tgz", @@ -3633,6 +3728,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -4476,68 +4572,32 @@ "version": "0.37.119", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.119.tgz", "integrity": "sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==", - "dev": true, "license": "MIT" }, "node_modules/discord.js": { - "version": "13.17.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.17.1.tgz", - "integrity": "sha512-h13kUf+7ZaP5ZWggzooCxFutvJJvugcAO54oTEIdVr3zQWi0Sf/61S1kETtuY9nVAyYebXR/Ey4C+oWbsgEkew==", + "version": "14.17.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.17.3.tgz", + "integrity": "sha512-8/j8udc3CU7dz3Eqch64UaSHoJtUT6IXK4da5ixjbav4NAXJicloWswD/iwn1ImZEMoAV3LscsdO0zhBh6H+0Q==", + "license": "Apache-2.0", "dependencies": { - "@discordjs/builders": "^0.16.0", - "@discordjs/collection": "^0.7.0", - "@sapphire/async-queue": "^1.5.0", - "@types/node-fetch": "^2.6.3", - "@types/ws": "^8.5.4", - "discord-api-types": "^0.33.5", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "ws": "^8.13.0" + "@discordjs/builders": "^1.10.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.6.0", + "@discordjs/rest": "^2.4.2", + "@discordjs/util": "^1.1.1", + "@discordjs/ws": "^1.2.0", + "@sapphire/snowflake": "3.5.3", + "discord-api-types": "^0.37.114", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "^2.6.3", + "undici": "6.19.8" }, "engines": { "node": ">=16.6.0", "npm": ">=7.0.0" } }, - "node_modules/discord.js/node_modules/discord-api-types": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", - "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" - }, - "node_modules/discord.js/node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/discord.js/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4642,7 +4702,7 @@ "node_modules/erlpack": { "version": "0.1.3", "resolved": "git+ssh://git@github.com/discord/erlpack.git#936ba12231719af096fe1c37525e966f3690a225", - "integrity": "sha512-14mzWFIiaAJdo1nEgOsCZSc5nlH8Lzqfk/IG6P7IKPW9tBcCXVb4D2jGLa2D/1vdhsnn1e8w183sqRgR+3Um3A==", + "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { @@ -5629,6 +5689,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", "optional": true }, "node_modules/fill-range": { @@ -5758,6 +5819,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7122,6 +7184,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -7167,7 +7235,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true, "license": "MIT" }, "node_modules/lodash.startcase": { @@ -7184,11 +7251,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.uniqwith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", - "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" - }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", @@ -7453,6 +7515,12 @@ "node": ">=12" } }, + "node_modules/magic-bytes.js": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", + "license": "MIT" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -9311,9 +9379,10 @@ } }, "node_modules/ts-mixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", - "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" }, "node_modules/tsconfig-paths": { "version": "3.15.0", @@ -9342,9 +9411,10 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -9501,6 +9571,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -9605,20 +9684,6 @@ "request": "^2.69.0" } }, - "node_modules/utf-8-validate": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.4.tgz", - "integrity": "sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==", - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -9843,9 +9908,10 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9950,7059 +10016,12 @@ "resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.9.tgz", "integrity": "sha512-DinB43xCjVwIBDpaIvQqHbmDsnYnSt6HJ/yiB2MZQGTqgPcwBSZqLkimXwK8BvdjQ/MaZysb5uEenImncqvCqQ==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "nan": "^2.18.0" } } }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "peer": true - }, - "@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "requires": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", - "dev": true, - "peer": true - }, - "@babel/core": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", - "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", - "dev": true, - "peer": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.24.5", - "@babel/helpers": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - } - }, - "@babel/eslint-parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz", - "integrity": "sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ==", - "dev": true, - "peer": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - } - }, - "@babel/generator": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", - "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.24.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.15" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "peer": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "peer": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "peer": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.24.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.24.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", - "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.24.3", - "@babel/helper-simple-access": "^7.24.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/helper-validator-identifier": "^7.24.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", - "dev": true, - "peer": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - } - }, - "@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", - "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.24.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/types": "^7.24.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true, - "peer": true - }, - "@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "peer": true - }, - "@babel/helper-wrap-function": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", - "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-function-name": "^7.23.0", - "@babel/template": "^7.24.0", - "@babel/types": "^7.24.5" - } - }, - "@babel/helpers": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", - "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.5", - "@babel/types": "^7.24.5" - } - }, - "@babel/highlight": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", - "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.24.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - } - }, - "@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", - "dev": true, - "peer": true - }, - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" - } - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" - } - }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "peer": true, - "requires": {} - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true, - "peer": true - }, - "@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", - "dev": true, - "peer": true, - "requires": { - "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "peer": true - } - } - }, - "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - } - }, - "@babel/traverse": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", - "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "@babel/parser": "^7.24.5", - "@babel/types": "^7.24.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", - "to-fast-properties": "^2.0.0" - } - }, - "@commitlint/cli": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.0.tgz", - "integrity": "sha512-t/fCrLVu+Ru01h0DtlgHZXbHV2Y8gKocTR5elDOqIRUzQd0/6hpt2VIWOj9b3NDo7y4/gfxeR2zRtXq/qO6iUg==", - "dev": true, - "requires": { - "@commitlint/format": "^19.8.0", - "@commitlint/lint": "^19.8.0", - "@commitlint/load": "^19.8.0", - "@commitlint/read": "^19.8.0", - "@commitlint/types": "^19.8.0", - "tinyexec": "^0.3.0", - "yargs": "^17.0.0" - } - }, - "@commitlint/config-conventional": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.0.tgz", - "integrity": "sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "conventional-changelog-conventionalcommits": "^7.0.2" - } - }, - "@commitlint/config-validator": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.0.tgz", - "integrity": "sha512-+r5ZvD/0hQC3w5VOHJhGcCooiAVdynFlCe2d6I9dU+PvXdV3O+fU4vipVg+6hyLbQUuCH82mz3HnT/cBQTYYuA==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "ajv": "^8.11.0" - }, - "dependencies": { - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "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==", - "dev": true - } - } - }, - "@commitlint/ensure": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.0.tgz", - "integrity": "sha512-kNiNU4/bhEQ/wutI1tp1pVW1mQ0QbAjfPRo5v8SaxoVV+ARhkB8Wjg3BSseNYECPzWWfg/WDqQGIfV1RaBFQZg==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - } - }, - "@commitlint/execute-rule": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.0.tgz", - "integrity": "sha512-fuLeI+EZ9x2v/+TXKAjplBJWI9CNrHnyi5nvUQGQt4WRkww/d95oVRsc9ajpt4xFrFmqMZkd/xBQHZDvALIY7A==", - "dev": true - }, - "@commitlint/format": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.0.tgz", - "integrity": "sha512-EOpA8IERpQstxwp/WGnDArA7S+wlZDeTeKi98WMOvaDLKbjptuHWdOYYr790iO7kTCif/z971PKPI2PkWMfOxg==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "chalk": "^5.3.0" - }, - "dependencies": { - "chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true - } - } - }, - "@commitlint/is-ignored": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.0.tgz", - "integrity": "sha512-L2Jv9yUg/I+jF3zikOV0rdiHUul9X3a/oU5HIXhAJLE2+TXTnEBfqYP9G5yMw/Yb40SnR764g4fyDK6WR2xtpw==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "semver": "^7.6.0" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "@commitlint/lint": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.0.tgz", - "integrity": "sha512-+/NZKyWKSf39FeNpqhfMebmaLa1P90i1Nrb1SrA7oSU5GNN/lksA4z6+ZTnsft01YfhRZSYMbgGsARXvkr/VLQ==", - "dev": true, - "requires": { - "@commitlint/is-ignored": "^19.8.0", - "@commitlint/parse": "^19.8.0", - "@commitlint/rules": "^19.8.0", - "@commitlint/types": "^19.8.0" - } - }, - "@commitlint/load": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.0.tgz", - "integrity": "sha512-4rvmm3ff81Sfb+mcWT5WKlyOa+Hd33WSbirTVUer0wjS1Hv/Hzr07Uv1ULIV9DkimZKNyOwXn593c+h8lsDQPQ==", - "dev": true, - "requires": { - "@commitlint/config-validator": "^19.8.0", - "@commitlint/execute-rule": "^19.8.0", - "@commitlint/resolve-extends": "^19.8.0", - "@commitlint/types": "^19.8.0", - "chalk": "^5.3.0", - "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^6.1.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true - } - } - }, - "@commitlint/message": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.0.tgz", - "integrity": "sha512-qs/5Vi9bYjf+ZV40bvdCyBn5DvbuelhR6qewLE8Bh476F7KnNyLfdM/ETJ4cp96WgeeHo6tesA2TMXS0sh5X4A==", - "dev": true - }, - "@commitlint/parse": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.0.tgz", - "integrity": "sha512-YNIKAc4EXvNeAvyeEnzgvm1VyAe0/b3Wax7pjJSwXuhqIQ1/t2hD3OYRXb6D5/GffIvaX82RbjD+nWtMZCLL7Q==", - "dev": true, - "requires": { - "@commitlint/types": "^19.8.0", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" - } - }, - "@commitlint/read": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.0.tgz", - "integrity": "sha512-6ywxOGYajcxK1y1MfzrOnwsXO6nnErna88gRWEl3qqOOP8MDu/DTeRkGLXBFIZuRZ7mm5yyxU5BmeUvMpNte5w==", - "dev": true, - "requires": { - "@commitlint/top-level": "^19.8.0", - "@commitlint/types": "^19.8.0", - "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8", - "tinyexec": "^0.3.0" - } - }, - "@commitlint/resolve-extends": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.0.tgz", - "integrity": "sha512-CLanRQwuG2LPfFVvrkTrBR/L/DMy3+ETsgBqW1OvRxmzp/bbVJW0Xw23LnnExgYcsaFtos967lul1CsbsnJlzQ==", - "dev": true, - "requires": { - "@commitlint/config-validator": "^19.8.0", - "@commitlint/types": "^19.8.0", - "global-directory": "^4.0.1", - "import-meta-resolve": "^4.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@commitlint/rules": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.0.tgz", - "integrity": "sha512-IZ5IE90h6DSWNuNK/cwjABLAKdy8tP8OgGVGbXe1noBEX5hSsu00uRlLu6JuruiXjWJz2dZc+YSw3H0UZyl/mA==", - "dev": true, - "requires": { - "@commitlint/ensure": "^19.8.0", - "@commitlint/message": "^19.8.0", - "@commitlint/to-lines": "^19.8.0", - "@commitlint/types": "^19.8.0" - } - }, - "@commitlint/to-lines": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.0.tgz", - "integrity": "sha512-3CKLUw41Cur8VMjh16y8LcsOaKbmQjAKCWlXx6B0vOUREplp6em9uIVhI8Cv934qiwkbi2+uv+mVZPnXJi1o9A==", - "dev": true - }, - "@commitlint/top-level": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.0.tgz", - "integrity": "sha512-Rphgoc/omYZisoNkcfaBRPQr4myZEHhLPx2/vTXNLjiCw4RgfPR1wEgUpJ9OOmDCiv5ZyIExhprNLhteqH4FuQ==", - "dev": true, - "requires": { - "find-up": "^7.0.0" - }, - "dependencies": { - "find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "requires": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "yocto-queue": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.0.tgz", - "integrity": "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==", - "dev": true - } - } - }, - "@commitlint/types": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.0.tgz", - "integrity": "sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==", - "dev": true, - "requires": { - "@types/conventional-commits-parser": "^5.0.0", - "chalk": "^5.3.0" - }, - "dependencies": { - "chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true - } - } - }, - "@discordjs/builders": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.16.0.tgz", - "integrity": "sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A==", - "requires": { - "@sapphire/shapeshift": "^3.5.1", - "discord-api-types": "^0.36.2", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "discord-api-types": { - "version": "0.36.3", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz", - "integrity": "sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==" - } - } - }, - "@discordjs/collection": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.7.0.tgz", - "integrity": "sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA==" - }, - "@es-joy/jsdoccomment": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.42.0.tgz", - "integrity": "sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==", - "dev": true, - "peer": true, - "requires": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - } - }, - "@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, - "peer": true, - "requires": { - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "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, - "peer": true - } - } - }, - "@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, - "peer": true - }, - "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "peer": true, - "requires": { - "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" - }, - "dependencies": { - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true, - "peer": true - }, - "@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, - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - } - }, - "@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, - "peer": true - }, - "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true, - "peer": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "peer": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "peer": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "peer": true - }, - "@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==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "peer": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, - "@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, - "peer": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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, - "peer": true - }, - "@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, - "peer": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "peer": true - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==" - }, - "@sapphire/shapeshift": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz", - "integrity": "sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ==", - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash.uniqwith": "^4.5.0" - } - }, - "@sentry-internal/tracing": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.3.tgz", - "integrity": "sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==", - "requires": { - "@sentry/core": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" - } - }, - "@sentry/core": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.3.tgz", - "integrity": "sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==", - "requires": { - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" - } - }, - "@sentry/integrations": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.3.tgz", - "integrity": "sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==", - "requires": { - "@sentry/core": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3", - "localforage": "^1.8.1" - } - }, - "@sentry/node": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.120.3.tgz", - "integrity": "sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==", - "requires": { - "@sentry-internal/tracing": "7.120.3", - "@sentry/core": "7.120.3", - "@sentry/integrations": "7.120.3", - "@sentry/types": "7.120.3", - "@sentry/utils": "7.120.3" - } - }, - "@sentry/types": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.3.tgz", - "integrity": "sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==" - }, - "@sentry/utils": { - "version": "7.120.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.3.tgz", - "integrity": "sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==", - "requires": { - "@sentry/types": "7.120.3" - } - }, - "@spectacles/rest": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@spectacles/rest/-/rest-0.8.3.tgz", - "integrity": "sha512-nwXtkg8bNrwYfqdaTdPx41eQgQwGz0hTM/VtYZMa0YsWm9DItP1g8qBpS3PM6GBR9tAiwdQaOtoRgXOOYC5Fgw==", - "requires": { - "form-data": "^2.5.1", - "node-fetch": "^2.6.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@types/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/flat-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/flat-cache/-/flat-cache-2.0.2.tgz", - "integrity": "sha512-uZRK+n0d9JBzcEqjRJGD9SiPtDKUn4E5w4n6iFHqAdgylJFc2Eh2KK9UimvH/saz6dwGC36Jt1DzyKBvHiEIgA==", - "dev": true - }, - "@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==", - "dev": true, - "peer": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "peer": true - }, - "@types/luxon": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", - "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==" - }, - "@types/node": { - "version": "20.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", - "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" - }, - "@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", - "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35" - } - } - } - }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "peer": true - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "requires": { - "@types/node": "*" - } - }, - "@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, - "peer": true, - "requires": { - "@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" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "peer": true - } - } - }, - "@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, - "peer": true, - "requires": { - "@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" - } - }, - "@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, - "peer": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" - } - }, - "@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, - "peer": true, - "requires": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - } - }, - "@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, - "peer": true - }, - "@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, - "peer": true, - "requires": { - "@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" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "peer": true - } - } - }, - "@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, - "peer": true, - "requires": { - "@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" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "peer": true - } - } - }, - "@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, - "peer": true, - "requires": { - "@typescript-eslint/types": "7.8.0", - "eslint-visitor-keys": "^3.4.3" - }, - "dependencies": { - "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, - "peer": true - } - } - }, - "@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, - "peer": true - }, - "@wfcd/eslint-config": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@wfcd/eslint-config/-/eslint-config-1.6.3.tgz", - "integrity": "sha512-vkfjiPaMMQt7vWUEPwLVbFlf4bOhmUuzVJtnEMZdsvQgW53MftoK8RKTZWuFIyAbI6Api7VFZ5eIyGXu9vglsQ==", - "dev": true, - "requires": {} - }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "requires": {} - }, - "addressparser": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-0.1.3.tgz", - "integrity": "sha1-npq0PSV+GueE4d9fWAyfUkD1iHQ=" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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==", - "dev": true - }, - "ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dev": true, - "requires": { - "environment": "^1.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "peer": true - }, - "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 - }, - "array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - } - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - } - }, - "array-indexofobject": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-indexofobject/-/array-indexofobject-0.0.1.tgz", - "integrity": "sha1-qqEo5iybPDWAlFaMIZ/2T+SJ1Co=" - }, - "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, - "peer": true - }, - "array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "peer": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "peer": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dev": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "bufferutil": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", - "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "peer": true - }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001616", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", - "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", - "dev": true, - "peer": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", - "dev": true, - "requires": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "cli-color": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.2.tgz", - "integrity": "sha512-g4JYjrTW9MGtCziFNjkqp3IMpGhnJyeB0lOtRPjQkYhXzKYr6tYnXKyEVnMzITxhpbahsEW9KsxOYIDKwcsIBw==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.59", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" - } - }, - "cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "requires": { - "restore-cursor": "^5.0.0" - } - }, - "cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true - }, - "emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, - "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "requires": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "peer": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true, - "peer": true - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "requires": { - "compare-func": "^2.0.0" - } - }, - "conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dev": true, - "requires": { - "compare-func": "^2.0.0" - } - }, - "conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dev": true, - "requires": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - } - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", - "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", - "dev": true, - "peer": true, - "requires": { - "browserslist": "^4.23.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "requires": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - } - }, - "cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", - "dev": true, - "requires": { - "jiti": "^2.4.1" - } - }, - "cron": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-4.1.0.tgz", - "integrity": "sha512-wmcuXr2qP0UZStYgwruG6jC2AYSO9n5VMm2t93hmcEXEjWY3S2bsXe3sfGUrTs/uQ1AvRCrZ0Pp9Q032L/V9tw==", - "requires": { - "@types/luxon": "~3.4.0", - "luxon": "~3.5.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" - }, - "data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, - "dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" - }, - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, - "requires": { - "ms": "^2.1.3" - } - }, - "decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "requires": { - "callsite": "^1.0.0" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", - "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", - "dev": true - }, - "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, - "peer": true - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "peer": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" - }, - "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true - }, - "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, - "peer": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "discord-api-types": { - "version": "0.37.119", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.119.tgz", - "integrity": "sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==", - "dev": true - }, - "discord.js": { - "version": "13.17.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.17.1.tgz", - "integrity": "sha512-h13kUf+7ZaP5ZWggzooCxFutvJJvugcAO54oTEIdVr3zQWi0Sf/61S1kETtuY9nVAyYebXR/Ey4C+oWbsgEkew==", - "requires": { - "@discordjs/builders": "^0.16.0", - "@discordjs/collection": "^0.7.0", - "@sapphire/async-queue": "^1.5.0", - "@types/node-fetch": "^2.6.3", - "@types/ws": "^8.5.4", - "discord-api-types": "^0.33.5", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "ws": "^8.13.0" - }, - "dependencies": { - "discord-api-types": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.33.5.tgz", - "integrity": "sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg==" - }, - "form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - } - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.4.756", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz", - "integrity": "sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==", - "dev": true, - "peer": true - }, - "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==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true - }, - "erlpack": { - "version": "git+ssh://git@github.com/discord/erlpack.git#936ba12231719af096fe1c37525e966f3690a225", - "integrity": "sha512-14mzWFIiaAJdo1nEgOsCZSc5nlH8Lzqfk/IG6P7IKPW9tBcCXVb4D2jGLa2D/1vdhsnn1e8w183sqRgR+3Um3A==", - "from": "erlpack@github:discord/erlpack", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.15.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "peer": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - } - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "peer": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true - }, - "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==", - "dev": true - }, - "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "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, - "peer": true - }, - "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, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "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, - "peer": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, - "peer": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" - } - }, - "eslint-config-airbnb-typescript": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-18.0.0.tgz", - "integrity": "sha512-oc+Lxzgzsu8FQyFVa4QFaVKiitTYiiW3frB9KYW5OWdPrqFc7FzxgB20hP4cHMlr+MBzGcLl3jnCOVOydL9mIg==", - "dev": true, - "peer": true, - "requires": { - "eslint-config-airbnb-base": "^15.0.0" - } - }, - "eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "peer": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-jsdoc": { - "version": "48.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.3.tgz", - "integrity": "sha512-r9DMAmFs66VNvNqRLLjHejdnJtILrt3xGi+Qx0op0oRfFGVpOR1Hb3BC++MacseHx93d8SKYPhyrC9BS7Os2QA==", - "dev": true, - "peer": true, - "requires": { - "@es-joy/jsdoccomment": "~0.42.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.6.0", - "spdx-expression-parse": "^4.0.0" - }, - "dependencies": { - "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, - "peer": true - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-no-null": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-null/-/eslint-plugin-no-null-1.0.2.tgz", - "integrity": "sha1-EjaoEjkTkKGHetQAfCbnRTQclR8=", - "dev": true, - "peer": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", - "dev": true, - "peer": true, - "requires": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" - } - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "dependencies": { - "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, - "peer": true - } - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "peer": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "requires": { - "@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" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "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, - "peer": true - }, - "fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true - }, - "fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "peer": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "feedparser": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/feedparser/-/feedparser-1.1.4.tgz", - "integrity": "sha1-F4Rb6ErT/NmG2u4S/kIfi1TfDe8=", - "requires": { - "addressparser": "~0.1.3", - "array-indexofobject": "~0.0.1", - "readable-stream": "~1.0.17", - "sax": "~0.6.0" - } - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "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, - "peer": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", - "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35", - "safe-buffer": "^5.2.1" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "peer": true - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "requires": { - "is-property": "^1.0.2" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true - }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dev": true, - "requires": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "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" - } - }, - "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, - "peer": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dev": true, - "requires": { - "ini": "4.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "peer": true - }, - "globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "peer": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "peer": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "peer": true - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true - }, - "husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true - }, - "i18n-string-templates": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/i18n-string-templates/-/i18n-string-templates-1.0.7.tgz", - "integrity": "sha512-wEvpnCmoTZPVgYEWyynNgT3dnTyqhIsQhBZWsUBAd8DJhb8aOGdgF4iN4C/6dSWEk2AuE7GUJQbDs8AM3F8rRA==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "peer": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "peer": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true - }, - "install-peerdeps": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/install-peerdeps/-/install-peerdeps-3.0.3.tgz", - "integrity": "sha512-FpuvEiJul5oDPnNXtwIMhh4moLR445U+St77FFU5Su8++cHFUVQmRrWf+r9pZ64yN17nhUzz1crFhbBEoCeG5Q==", - "dev": true, - "requires": { - "@babel/polyfill": "^7.7.0", - "cli-color": "^2.0.0", - "commander": "^4.0.1", - "promptly": "^3.0.3", - "semver": "^6.3.0" - } - }, - "internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - } - }, - "is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "peer": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "peer": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "peer": true - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "peer": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "peer": true, - "requires": { - "is-typed-array": "^1.1.13" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "peer": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "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, - "peer": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7" - } - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dev": true, - "requires": { - "text-extensions": "^2.0.0" - } - }, - "is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "peer": true, - "requires": { - "which-typed-array": "^1.1.14" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "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==", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "peer": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "peer": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "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==", - "dev": true - }, - "json-query": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json-query/-/json-query-2.2.2.tgz", - "integrity": "sha1-tlWLijeUzNIXkmqjgCQyS3e0irE=" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "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==" - }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true, - "peer": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "peer": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "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, - "peer": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "requires": { - "immediate": "~3.0.5" - } - }, - "lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.0.tgz", - "integrity": "sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==", - "dev": true, - "requires": { - "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", - "execa": "^8.0.1", - "lilconfig": "^3.1.3", - "listr2": "^8.2.5", - "micromatch": "^4.0.8", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.7.0" - }, - "dependencies": { - "chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "dev": true - }, - "commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true - } - } - }, - "listr2": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", - "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", - "dev": true, - "requires": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, - "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "requires": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "requires": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - } - } - } - }, - "localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "requires": { - "lie": "3.1.1" - } - }, - "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, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "peer": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "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 - }, - "lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "lodash.uniqwith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz", - "integrity": "sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==" - }, - "lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "requires": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dev": true, - "requires": { - "get-east-asian-width": "^1.0.0" - } - }, - "slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dev": true, - "requires": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - } - }, - "string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "requires": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, - "requires": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - } - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loupe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", - "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", - "dev": true, - "requires": { - "get-func-name": "^2.0.1" - } - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==" - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" - } - }, - "meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "peer": true - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true - }, - "mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", - "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^10.4.5", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "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 - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "dependencies": { - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mysql2": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", - "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", - "requires": { - "denque": "^2.0.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.6.3", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - } - }, - "named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", - "requires": { - "lru-cache": "^4.1.3" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - } - } - }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "peer": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true, - "peer": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "numeral": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", - "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "peer": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "peer": true - }, - "object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - } - }, - "object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "peer": true, - "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "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, - "requires": { - "p-limit": "^3.0.2" - } - }, - "package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-duration": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.3.tgz", - "integrity": "sha512-MtbharL7Bets65qDBXuDOHHWyY1BxTJZmJ/xGmS90iEbKE0gZ6yZpZtCda7O79GeOi/f0NwBaplIuReExIoVsw==" - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "peer": true - }, - "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "peer": true - }, - "pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "ping": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/ping/-/ping-0.4.4.tgz", - "integrity": "sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==" - }, - "possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "peer": true - }, - "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, - "peer": true - }, - "prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", - "dev": true, - "peer": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "peer": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "promptly": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-3.2.0.tgz", - "integrity": "sha512-WnR9obtgW+rG4oUV3hSnNGl1pHm3V1H/qD9iJBumGSmVsSC5HpZOLuu8qdMb6yCItGfT7dcRszejr/5P3i9Pug==", - "dev": true, - "requires": { - "read": "^1.0.4" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, - "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, - "peer": true - }, - "random-reddit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/random-reddit/-/random-reddit-2.0.3.tgz", - "integrity": "sha512-pc0QR2sQO+PEo8w2HLjEW24PInKm5I5cWX2FkMDpLHLE1PU+15vPzOnFw/h/JBhBQh0ZU/XsM1wgzu41pp739g==", - "requires": { - "consola": "^2.15.3", - "node-fetch": "^2.6.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reddit-interfaces": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reddit-interfaces/-/reddit-interfaces-1.0.7.tgz", - "integrity": "sha512-jdTvcdJWc+DDtogqXkv796Y5oBx9YE4IEU4yRfnipdv3+F+9fsW6VEDJDmpPlTaZ6cZkFvKhdYV9/9ooYquU6A==", - "peer": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "peer": true - }, - "regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, - "peer": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - } - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "peer": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "peer": true - } - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "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==", - "dev": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "peer": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "requires": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "dependencies": { - "onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "requires": { - "mimic-function": "^5.0.0" - } - } - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "peer": true - }, - "rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rss-feed-emitter": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/rss-feed-emitter/-/rss-feed-emitter-3.2.3.tgz", - "integrity": "sha512-scgrKRbI2LYuzPIbjEKNAQxAj1Qj/NxHlGXLQIeMC8XescW9YwqbJccrd2U+qQVZthc8JlNmExYDU44FbvrzZA==", - "requires": { - "feedparser": "1.1.4", - "request": "^2.88.2" - } - }, - "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, - "peer": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "peer": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=" - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "peer": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "peer": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - } - } - }, - "spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "peer": true - }, - "spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "peer": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true, - "peer": true - }, - "split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true - }, - "sql-template-strings": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/sql-template-strings/-/sql-template-strings-2.2.2.tgz", - "integrity": "sha1-PxFQiiWt384hejBCqdMAwxk7lv8=" - }, - "sqlstring": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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==", - "dev": true, - "peer": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "peer": true - }, - "synckit": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", - "dev": true, - "peer": true, - "requires": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - } - }, - "text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true, - "peer": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "peer": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "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, - "peer": true, - "requires": {} - }, - "ts-mixer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", - "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "peer": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "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, - "peer": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "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, - "peer": true - }, - "typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "peer": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - } - }, - "typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - } - }, - "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "peer": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "peer": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "peer": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "peer": true - }, - "unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", - "dev": true, - "peer": true, - "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-exists": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/url-exists/-/url-exists-1.0.3.tgz", - "integrity": "sha1-BbKHW68ElQ4n71HphG8e/wRxaJM=", - "requires": { - "request": "^2.69.0" - } - }, - "utf-8-validate": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.4.tgz", - "integrity": "sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==", - "optional": true, - "peer": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "warframe-name-generator": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/warframe-name-generator/-/warframe-name-generator-2.0.2.tgz", - "integrity": "sha512-Psht/jyN3UclpVtU36dtaXs6qmoSnc3GpLC1L3I3u0coE6XBj/p01XQqqqQjoipg+zvSpdfXwpgaZhL0HVLcdg==" - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "peer": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "peer": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - } - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zlib-sync": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/zlib-sync/-/zlib-sync-0.1.9.tgz", - "integrity": "sha512-DinB43xCjVwIBDpaIvQqHbmDsnYnSt6HJ/yiB2MZQGTqgPcwBSZqLkimXwK8BvdjQ/MaZysb5uEenImncqvCqQ==", - "optional": true, - "requires": { - "nan": "^2.18.0" - } - } - } + "requires": true } diff --git a/package.json b/package.json index e5e43b951..396a2f63a 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "cron": "^4.1.0", "dayjs": "^1.11.13", "decache": "^4.6.2", - "discord.js": "^13.17.1", + "discord.js": "^14.17.3", "flat-cache": "^3.2.0", "i18n-string-templates": "^1.0.7", "json-query": "^2.2.2", diff --git a/src/bot.js b/src/bot.js index 7daa4b617..e31e4ed99 100644 --- a/src/bot.js +++ b/src/bot.js @@ -1,17 +1,10 @@ -import Discord from 'discord.js'; +import { Client, WebhookClient, GatewayIntentBits, Events, PresenceUpdateStatus } from 'discord.js'; import WorldStateClient from './utilities/WorldStateClient.js'; import EventHandler from './eventHandlers/EventHandler.js'; import Database from './settings/Database.js'; import logger from './utilities/Logger.js'; -const { - Client, - WebhookClient, - Intents, - Constants: { Events }, -} = Discord; - const unlog = { debug: ['WS_CONNECTION_TIMEOUT'], error: /^(Unknown Message)/gi, @@ -59,7 +52,7 @@ export default class Genesis { shards, shardCount: Number(process.env.SHARDS || 1), presence: { - status: 'dnd', + status: PresenceUpdateStatus.DoNotDisturb, afk: false, activities: [ { @@ -68,11 +61,11 @@ export default class Genesis { ], }, intents: [ - Intents.FLAGS.GUILD_MESSAGES, - Intents.FLAGS.GUILDS, - Intents.FLAGS.GUILD_INTEGRATIONS, - Intents.FLAGS.GUILD_MESSAGE_REACTIONS, - Intents.FLAGS.GUILD_VOICE_STATES, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildIntegrations, + GatewayIntentBits.GuildMessageReactions, + GatewayIntentBits.GuildVoiceStates, ], }); @@ -148,35 +141,35 @@ export default class Genesis { } async setupHandlers() { - this.client.on(Events.CLIENT_READY, async () => - this.eventHandler.handleEvent({ event: Events.CLIENT_READY, args: [] }) + this.client.on(Events.ClientReady, async () => + this.eventHandler.handleEvent({ event: Events.ClientReady, args: [] }) ); - this.client.on(Events.GUILD_CREATE, async (guild) => - this.eventHandler.handleEvent({ event: Events.GUILD_CREATE, args: [guild] }) + this.client.on(Events.GuildCreate, async (guild) => + this.eventHandler.handleEvent({ event: Events.GuildCreate, args: [guild] }) ); - this.client.on(Events.GUILD_DELETE, async (guild) => - this.eventHandler.handleEvent({ event: Events.GUILD_DELETE, args: [guild] }) + this.client.on(Events.GuildDelete, async (guild) => + this.eventHandler.handleEvent({ event: Events.GuildDelete, args: [guild] }) ); - this.client.on(Events.CHANNEL_CREATE, async (channel) => - this.eventHandler.handleEvent({ event: Events.CHANNEL_CREATE, args: [channel] }) + this.client.on(Events.ChannelCreate, async (channel) => + this.eventHandler.handleEvent({ event: Events.ChannelCreate, args: [channel] }) ); - this.client.on(Events.CHANNEL_DELETE, async (channel) => - this.eventHandler.handleEvent({ event: Events.CHANNEL_DELETE, args: [channel] }) + this.client.on(Events.ChannelDelete, async (channel) => + this.eventHandler.handleEvent({ event: Events.ChannelDelete, args: [channel] }) ); - this.client.on(Events.INTERACTION_CREATE, async (interaction) => - this.eventHandler.handleEvent({ event: Events.INTERACTION_CREATE, args: [interaction] }) + this.client.on(Events.InteractionCreate, async (interaction) => + this.eventHandler.handleEvent({ event: Events.InteractionCreate, args: [interaction] }) ); - this.client.on(Events.SHARD_DISCONNECT, (event) => { + this.client.on(Events.ShardDisconnect, (event) => { this.logger.error(`Disconnected with close event: ${event.code}`); }); - this.client.on(Events.ERROR, (error) => { + this.client.on(Events.Error, (error) => { if (!unlog.error.test(error.message)) this.logger.error(error); }); - this.client.on(Events.WARN, this.logger.warn); - this.client.on(Events.DEBUG, (message) => { + this.client.on(Events.Warn, this.logger.warn); + this.client.on(Events.Debug, (message) => { if (/(heartbeat|Latency of|voice|HELLO timeout|CONNECT|Spawning)/i.test(message)) { this.logger.silly(message); return; diff --git a/src/embeds/AcolyteEmbed.js b/src/embeds/AcolyteEmbed.js index f33e5cf34..90318eb4f 100644 --- a/src/embeds/AcolyteEmbed.js +++ b/src/embeds/AcolyteEmbed.js @@ -15,36 +15,36 @@ export default class AcolyteEmbed extends BaseEmbed { constructor(enemies, { platform, i18n, locale }) { super(locale); - this.thumbnail = { - url: acolyteThumb, - }; - this.title = i18n`[${platform.toUpperCase()}] Acolytes`; + this.setThumbnail(acolyteThumb); + this.setTitle(i18n`[${platform.toUpperCase()}] Acolytes`); if (Array.isArray(enemies) && enemies.length > 1) { - this.color = enemies.length > 2 ? 0x00ff00 : 0xff0000; - this.fields = enemies.map((e) => ({ - name: e.agentType, - value: i18n`Last discovered at ${e.lastDiscoveredAt}. + this.setColor(enemies.length > 2 ? 0x00ff00 : 0xff0000); + this.setFields( + enemies.map((e) => ({ + name: e.agentType, + value: i18n`Last discovered at ${e.lastDiscoveredAt}. It has ${(100 * Number(e.healthPercent)).toFixed(2)}% health remaining and is currently ${e.isDiscovered ? 'discovered' : 'not discovered'}`, - })); + })) + ); } else if (!Array.isArray(enemies) || enemies.length === 1) { const e = Array.isArray(enemies) ? enemies[0] : enemies; - this.title = i18n`[${platform.toUpperCase()}] ${e.agentType}`; - this.description = i18n`Enemy ${e.isDiscovered ? i18n`Discovered` : i18n`Hiding`}!`; - this.color = 0xaf5b4b; - this.fields = [ + this.setTitle(i18n`[${platform.toUpperCase()}] ${e.agentType}`); + this.setDescription(i18n`Enemy ${e.isDiscovered ? i18n`Discovered` : i18n`Hiding`}!`); + this.setColor(0xaf5b4b); + this.setFields([ { name: '\u200B', value: `**${e.isDiscovered ? '' : 'Last '}Discovered At:** ${e.lastDiscoveredAt}` }, { name: '\u200B', value: `**Health Remaining:** ${(100 * Number(e.healthPercent)).toFixed(2)}%` }, { name: '\u200B', value: `Will flee after ${e.fleeDamage} damage.\nGet after the Acolyte, Tenno!` }, - ]; + ]); } else { - this.color = 0xaf5b4b; - this.fields = [ + this.setColor(0xaf5b4b); + this.setFields([ { name: i18n`There are currently no enemies to combat`, value: '\u200B', }, - ]; + ]); } } } diff --git a/src/embeds/AlertEmbed.js b/src/embeds/AlertEmbed.js index 6d4d645b8..096865f02 100644 --- a/src/embeds/AlertEmbed.js +++ b/src/embeds/AlertEmbed.js @@ -15,50 +15,50 @@ export default class AlertEmbed extends BaseEmbed { constructor(alerts, { platform, i18n, locale }) { super(locale); - this.thumbnail = { - url: alertThumb, - }; - this.color = 0xf1c40f; + this.setThumbnail(alertThumb); + this.setColor(0xf1c40f); // compact if (Array.isArray(alerts) && alerts.length > 1) { - this.fields = alerts.map((a) => ({ - name: i18n`${a.mission.reward.asString} | ${a.eta} left`, - value: i18n`${a.mission.faction} ${a.mission.type} on ${a.mission.node}\nlevel ${a.mission.minEnemyLevel} - ${a.mission.maxEnemyLevel}\n\u200B`, - })); - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Alerts`; + this.setFields( + alerts.map((a) => ({ + name: i18n`${a.mission.reward.asString} | ${a.eta} left`, + value: i18n`${a.mission.faction} ${a.mission.type} on ${a.mission.node}\nlevel ${a.mission.minEnemyLevel} - ${a.mission.maxEnemyLevel}\n\u200B`, + })) + ); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Alerts`); } else { // divided const a = Array.isArray(alerts) ? alerts[0] : alerts; - this.title = i18n`[${platform.toUpperCase()}] ${ - a.mission.reward.itemString || i18n`${a.mission.reward.credits} Credits` - }`; - this.color = a.mission.reward.color; - this.thumbnail.url = a.mission.reward.thumbnail; + this.setTitle( + i18n`[${platform.toUpperCase()}] ${a.mission.reward.itemString || i18n`${a.mission.reward.credits} Credits`}` + ); + this.setColor(a.mission.reward.color); + this.setThumbnail(a.mission.reward.thumbnail); const summary = i18n`${a.mission.faction} ${a.mission.type} on ${a.mission.node}`; - this.description = a.description; + this.setDescription(a.description); - this.fields = []; + this.setFields([]); if (this.description !== summary) { - this.fields.push({ name: i18n`Mission`, value: i18n`${a.mission.faction} ${a.mission.type}`, inline: true }); - this.fields.push({ name: i18n`Location`, value: a.mission.node, inline: true }); + this.addFields([{ name: i18n`Mission`, value: i18n`${a.mission.faction} ${a.mission.type}`, inline: true }]); + this.addFields([{ name: i18n`Location`, value: a.mission.node, inline: true }]); } - this.fields.push({ + this.addFields({ name: 'Levels:', value: `${a.mission.minEnemyLevel} - ${a.mission.maxEnemyLevel}`, inline: true, }); - this.fields.push({ + this.addFields({ name: i18n`Archwing Required`, value: a.mission.archwingRequired ? i18n`Yes` : i18n`No`, inline: true, }); - if (this.title.indexOf('Cr') === -1) { - this.fields.push({ name: '\u200B', value: i18n`**Credits:** ${a.mission.reward.credits}`, inline: true }); + if (this.data.title.indexOf('Cr') === -1) { + this.addFields({ name: '\u200B', value: i18n`**Credits:** ${a.mission.reward.credits}`, inline: true }); } - this.footer.text = i18n`${a.eta} remaining • Expires `; - this.timestamp = a.expiry; + this.setFooter({ text: i18n`${a.eta} remaining • Expires ` }); + this.setTimestamp(a.expiry); } } } diff --git a/src/embeds/ArbitrationEmbed.js b/src/embeds/ArbitrationEmbed.js index 84228ae51..c2c01504d 100644 --- a/src/embeds/ArbitrationEmbed.js +++ b/src/embeds/ArbitrationEmbed.js @@ -14,14 +14,16 @@ export default class ArbitrationEmbed extends BaseEmbed { */ constructor(arbitration, { platform, i18n, locale }) { super(locale); - this.thumbnail.url = arbiThumb; - this.color = 0x742725; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Arbitration`; - this.fields.push({ - name: arbitration.node || '???', - value: arbitration.type || '???', - }); - this.footer.text = i18n`Expires`; - this.timestamp = arbitration.expiry; + this.setThumbnail(arbiThumb); + this.setColor(0x742725); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Arbitration`); + this.addFields([ + { + name: arbitration.node || '???', + value: arbitration.type || '???', + }, + ]); + this.setFooter({ text: i18n`Expires` }); + this.setTimestamp(arbitration.expiry); } } diff --git a/src/embeds/BaseEmbed.js b/src/embeds/BaseEmbed.js index 978a0ea14..1f7deab07 100644 --- a/src/embeds/BaseEmbed.js +++ b/src/embeds/BaseEmbed.js @@ -1,4 +1,4 @@ -import { MessageEmbed } from 'discord.js'; +import { EmbedBuilder } from 'discord.js'; const defaults = { url: process.env.EMBED_URL || 'https://warframestat.us', @@ -8,7 +8,7 @@ const defaults = { /** * Utility class for making rich embeds */ -export default class BaseEmbed extends MessageEmbed { +export default class BaseEmbed extends EmbedBuilder { constructor(locale) { super({ url: defaults.url, diff --git a/src/embeds/BuildEmbed.js b/src/embeds/BuildEmbed.js index ee747e213..3883864bc 100644 --- a/src/embeds/BuildEmbed.js +++ b/src/embeds/BuildEmbed.js @@ -10,12 +10,12 @@ export default class BuildEmbed extends BaseEmbed { constructor(build) { super(); const sections = build.body.split(';'); - this.color = 0xf1c40f; - this.title = build.title; - this.fields = []; + this.setColor(0xf1c40f); + this.setTitle(build.title); + this.setFields([]); sections.forEach((value, index) => { if (index === 0) { - this.description = value; + this.setDescription(value); } else { this.addFields({ name: '\u200B', @@ -23,9 +23,11 @@ export default class BuildEmbed extends BaseEmbed { }); } }); - this.image = { url: build.url || build.image }; - this.footer.text = `${build.id}${build.isPublic ? ' • Public' : ''} • Owned by ${ - typeof build.owner === 'object' ? build.owner.tag : build.owner - }`; + this.setImage({ url: build.url || build.image }); + this.setFooter({ + text: `${build.id}${build.isPublic ? ' • Public' : ''} • Owned by ${ + typeof build.owner === 'object' ? build.owner.tag : build.owner + }`, + }); } } diff --git a/src/embeds/CambionEmbed.js b/src/embeds/CambionEmbed.js index 8576e693e..8c40182cc 100644 --- a/src/embeds/CambionEmbed.js +++ b/src/embeds/CambionEmbed.js @@ -35,18 +35,16 @@ export default class CambionEmbed extends BaseEmbed { */ constructor(state, { i18n, locale }) { super(locale); - this.title = i18n`Cambion Drift Cycle - ${toTitleCase(state.active)}`; - this.color = state.active === 'fass' ? 0xc6733f : 0x415b9e; - this.thumbnail = { - url: state.active === 'fass' ? fass : vome, - }; + this.setTitle(i18n`Cambion Drift Cycle - ${toTitleCase(state.active)}`); + this.setColor(state.active === 'fass' ? 0xc6733f : 0x415b9e); + this.setThumbnail(state.active === 'fass' ? fass : vome); const next = toTitleCase(state.active === 'fass' ? 'vome' : 'fass'); const nextCtd = i18n`Time remaining until ${next}: ${rTime(state.expiry)}`; - this.description = `${state.bounty ? makeJobs(state.bounty, i18n) : ''}\n\n${nextCtd}`; + this.setDescription(`${state.bounty ? makeJobs(state.bounty, i18n) : ''}\n\n${nextCtd}`); - this.footer.text = i18n`${next} starts `; - this.timestamp = new Date(state.expiry).getTime(); + this.setFooter({ text: i18n`${next} starts ` }); + this.setTimestamp(new Date(state.expiry).getTime()); } } diff --git a/src/embeds/CompanionEmbed.js b/src/embeds/CompanionEmbed.js index 5ed9372ae..70cf45300 100644 --- a/src/embeds/CompanionEmbed.js +++ b/src/embeds/CompanionEmbed.js @@ -14,7 +14,7 @@ export default class CompanionEmbed extends BaseEmbed { .setURL(`https://warframe.fandom.com/wiki/${companion.name.replace(/\s/g, '_')}`) .setThumbnail(`https://cdn.warframestat.us/img/${companion.imageName}`) .setDescription(companion.description) - .addFields( + .addFields([ { name: i18n`Health`, value: `${companion.health}`, inline: true }, { name: i18n`Power`, value: `${companion.power}`, inline: true }, { name: i18n`Armor`, value: `${companion.armor}`, inline: true }, @@ -25,7 +25,7 @@ export default class CompanionEmbed extends BaseEmbed { inline: true, }, { name: `Build Price`, value: `${companion.buildPrice}${emojify('credits')}`, inline: true }, - { name: `Build Skip`, value: `${companion.skipBuildTimePrice}${emojify('p')}`, inline: true } - ); + { name: `Build Skip`, value: `${companion.skipBuildTimePrice}${emojify('p')}`, inline: true }, + ]); } } diff --git a/src/embeds/ComponentEmbed.js b/src/embeds/ComponentEmbed.js index 6a3dc94e9..b0d653d51 100644 --- a/src/embeds/ComponentEmbed.js +++ b/src/embeds/ComponentEmbed.js @@ -3,19 +3,21 @@ import BaseEmbed from './BaseEmbed.js'; export default class ComponentEmbed extends BaseEmbed { constructor(components, { i18n, locale }) { super(locale); - this.title = 'Components'; - this.color = 0xd3d3d3; - this.fields = components.map((component) => { - const tokens = []; - tokens.push(`_${component.description}_\n`); - tokens.push(component.itemCount ? i18n`**#:** ${component.itemCount}\n` : ''); - tokens.push(component.ducats ? i18n`**Ducats:** ${component.ducats}\n` : ''); - tokens.push(i18n`**Tradable:** ${component.ducats ? i18n`Yes` : i18n`No`}`); - tokens.push('\n\u200B\n'); - return { - name: component.name, - value: tokens.join(''), - }; - }); + this.setTitle('Components'); + this.setColor(0xd3d3d3); + this.setFields( + components.map((component) => { + const tokens = []; + tokens.push(`_${component.description}_\n`); + tokens.push(component.itemCount ? i18n`**#:** ${component.itemCount}\n` : ''); + tokens.push(component.ducats ? i18n`**Ducats:** ${component.ducats}\n` : ''); + tokens.push(i18n`**Tradable:** ${component.ducats ? i18n`Yes` : i18n`No`}`); + tokens.push('\n\u200B\n'); + return { + name: component.name, + value: tokens.join(''), + }; + }) + ); } } diff --git a/src/embeds/ConclaveChallengeEmbed.js b/src/embeds/ConclaveChallengeEmbed.js index f2a7aec23..164281eee 100644 --- a/src/embeds/ConclaveChallengeEmbed.js +++ b/src/embeds/ConclaveChallengeEmbed.js @@ -13,27 +13,27 @@ export default class ConclaveChallengeEmbed extends BaseEmbed { super(locale); const categoryInValues = category && values.indexOf(category.toLowerCase()) !== -1; - this.color = categoryInValues ? 0x00ff00 : 0xff0000; + this.setColor(categoryInValues ? 0x00ff00 : 0xff0000); if (categoryInValues) { - this.fields = challenges - .filter((c) => compareCCategory(c, category)) - .map((c) => ({ - name: c.mode, - value: `${c.description} expires in ${c.endString}`, - })); + this.setFields( + challenges + .filter((c) => compareCCategory(c, category)) + .map((c) => ({ + name: c.mode, + value: `${c.description} expires in ${c.endString}`, + })) + ); } else { - this.fields = [ + this.setFields([ { name: i18n`No such conclave category`, value: `Valid values: ${values.join(', ')}`, }, - ]; + ]); } - this.title = `${platform ? `[${platform.toUpperCase()}] ` : ''}Current Challenges for category: ${ - category || 'none' - }`; - this.thumbnail = { - url: conclaveThumb, - }; + this.setTitle( + `${platform ? `[${platform.toUpperCase()}] ` : ''}Current Challenges for category: ${category || 'none'}` + ); + this.setThumbnail(conclaveThumb); } } diff --git a/src/embeds/ConstructionEmbed.js b/src/embeds/ConstructionEmbed.js index 3465626c1..e7982d765 100644 --- a/src/embeds/ConstructionEmbed.js +++ b/src/embeds/ConstructionEmbed.js @@ -4,14 +4,14 @@ export default class ConstructionEmbed extends BaseEmbed { constructor(constructionProgress, { platform, i18n, locale }) { super(locale); - this.color = 0xff6961; - this.fields = [ + this.setColor(0xff6961); + this.setFields([ { name: i18n`[${platform.toUpperCase()}] Construction Status:`, value: i18n`\`Razorback: ${constructionProgress.razorbackProgress}\` \`Fomorian: ${constructionProgress.fomorianProgress}\` \`Unknown: ${constructionProgress.unknownProgress}\``, }, - ]; + ]); } } diff --git a/src/embeds/DarvoEmbed.js b/src/embeds/DarvoEmbed.js index 8a299f5c9..ece3ac32a 100644 --- a/src/embeds/DarvoEmbed.js +++ b/src/embeds/DarvoEmbed.js @@ -8,17 +8,15 @@ export default class DarvoEmbed extends BaseEmbed { constructor(deal, { platform, i18n, locale }) { super(locale); if (Array.isArray(deal)) [deal] = deal; - this.color = 0x0000ff; - this.title = i18n`[${platform.toUpperCase()}] Darvo Deal`; - this.thumbnail = { - url: darvo, - }; - this.fields = [ + this.setColor(0x0000ff); + this.setTitle(i18n`[${platform.toUpperCase()}] Darvo Deal`); + this.setThumbnail(darvo); + this.setFields([ { name: i18n`${deal.item}, ${deal.salePrice}p`, value: `Original price: ${deal.originalPrice}p, expires in ${deal.eta}`, }, - ]; - this.footer.text = i18n`${deal.total - deal.sold}/${deal.total} left`; + ]); + this.setFooter({ text: i18n`${deal.total - deal.sold}/${deal.total} left` }); } } diff --git a/src/embeds/DropsEmbed.js b/src/embeds/DropsEmbed.js index 3bd265775..a1c367c9a 100644 --- a/src/embeds/DropsEmbed.js +++ b/src/embeds/DropsEmbed.js @@ -6,7 +6,7 @@ export default class DropsEmbed extends BaseEmbed { constructor(drops, { i18n, locale }) { super(locale); if (!drops || !drops.length) { - this.description = i18n`No drops`; + this.setDescription(i18n`No drops`); return; } const longest = ( @@ -23,10 +23,12 @@ export default class DropsEmbed extends BaseEmbed { .filter((drop) => drop); const dropGroups = createGroupedArray(consolidated, 10); - this.fields = dropGroups.map((group) => ({ - name: '\u200B', - value: group.join('\n'), - inline: false, - })); + this.setFields( + dropGroups.map((group) => ({ + name: '\u200B', + value: group.join('\n'), + inline: false, + })) + ); } } diff --git a/src/embeds/EarthCycleEmbed.js b/src/embeds/EarthCycleEmbed.js index 06cd7858e..33646adb8 100644 --- a/src/embeds/EarthCycleEmbed.js +++ b/src/embeds/EarthCycleEmbed.js @@ -10,16 +10,15 @@ export default class EarthCycleEmbed extends BaseEmbed { constructor(state, { i18n, locale }) { super(locale); - this.title = `${state.isCetus ? 'PoE' : 'Earth'} - ${state.isDay ? 'Day' : 'Night'}`; - this.color = state.isDay ? 0xb64624 : 0x000066; - this.thumbnail = { - url: state.isCetus ? ostron : earth, - }; + this.setTitle(`${state.isCetus ? 'PoE' : 'Earth'} - ${state.isDay ? 'Day' : 'Night'}`); + this.setColor(state.isDay ? 0xb64624 : 0x000066); + this.setThumbnail(state.isCetus ? ostron : earth); const bountyExpiry = state.bountyExpiry ? rTime(state.bountyExpiry) : ''; - this.description = + this.setDescription( i18n`Time remaining until ${state.isDay ? 'Night' : 'Day'}: ${rTime(state.expiry)}` + - (state.bountyExpiry ? i18n`\nBounties expire in ${bountyExpiry}` : ''); - this.footer.text = i18n`${state.isDay ? i18n`Night` : i18n`Day`} starts `; - this.timestamp = new Date(state.expiry).getTime(); + (state.bountyExpiry ? i18n`\nBounties expire in ${bountyExpiry}` : '') + ); + this.setFooter({ text: i18n`${state.isDay ? i18n`Night` : i18n`Day`} starts ` }); + this.setTimestamp(new Date(state.expiry).getTime()); } } diff --git a/src/embeds/EnemyEmbed.js b/src/embeds/EnemyEmbed.js index bca3b24be..9048e82c7 100644 --- a/src/embeds/EnemyEmbed.js +++ b/src/embeds/EnemyEmbed.js @@ -6,15 +6,15 @@ export default class EnemyEmbed extends BaseEmbed { constructor(enemy, { i18n, locale }) { super(locale); if (!enemy || !enemy.health) { - this.title = i18n`Invalid Query`; - this.color = 0xff6961; - this.footer = undefined; + this.setTitle(i18n`Invalid Query`); + this.setColor(0xff6961); + this.data.footer = undefined; return; } - this.title = i18n`${enemy.name} • ${enemy.type}`; - this.description = enemy.description; - this.fields = [ + this.setTitle(i18n`${enemy.name} • ${enemy.type}`); + this.setDescription(enemy.description); + this.setFields([ { name: i18n`Health Base`, value: String(enemy.health), @@ -30,7 +30,7 @@ export default class EnemyEmbed extends BaseEmbed { value: String(enemy.armor), inline: true, }, - ]; + ]); enemy?.resistances?.forEach((resistance) => { const field = { @@ -49,7 +49,7 @@ export default class EnemyEmbed extends BaseEmbed { }); if (affectors.length) { field.value = affectors.join('\n'); - this.fields.push(field); + this.addFields([field]); } }); } diff --git a/src/embeds/EnhancementEmbed.js b/src/embeds/EnhancementEmbed.js index cb5e448a4..d3a139bbb 100644 --- a/src/embeds/EnhancementEmbed.js +++ b/src/embeds/EnhancementEmbed.js @@ -13,15 +13,13 @@ export default class EnhancementEmbed extends BaseEmbed { constructor(enhancement, { enhancements }) { super(); - this.thumbnail = { - url: arcaneThumb, - }; + this.setThumbnail(arcaneThumb); if (enhancement && typeof enhancement !== 'undefined') { - this.title = enhancement.name; - this.url = enhancement.info; - this.thumbnail.url = enhancement.thumbnail; - this.color = colors[enhancement.rarity.toLowerCase()]; - this.fields = [ + this.setTitle(enhancement.name); + this.setURL(enhancement.info); + this.setThumbnail(enhancement.thumbnail); + this.setColor(colors[enhancement.rarity.toLowerCase()]); + this.setFields([ { name: 'Effect', value: enhancement.effect, @@ -37,10 +35,10 @@ export default class EnhancementEmbed extends BaseEmbed { value: enhancement.location, inline: false, }, - ]; + ]); } else { - this.title = 'Available Enhancements'; - this.fields = [{ name: '\u200B', value: enhancements.map((profile) => profile.name).join('\n') }]; + this.setTitle('Available Enhancements'); + this.setFields([{ name: '\u200B', value: enhancements.map((profile) => profile.name).join('\n') }]); } } } diff --git a/src/embeds/ErrorEmbed.js b/src/embeds/ErrorEmbed.js index 691038387..38462c664 100644 --- a/src/embeds/ErrorEmbed.js +++ b/src/embeds/ErrorEmbed.js @@ -9,9 +9,9 @@ export default class BuildEmbed extends BaseEmbed { */ constructor(error) { super(); - this.color = 0xff0000; - this.title = `Error - ${process.env.SCOPE}`; - this.description = error.message || error; + this.setColor(0xff0000); + this.setTitle(`Error - ${process.env.SCOPE}`); + this.setDescription(error.message || error); if (error.stack) { const stack = error.stack.replace( new RegExp(process.cwd().replace('/src/notifications', '').replace(/\\/g, '\\'), 'ig'), @@ -19,7 +19,7 @@ export default class BuildEmbed extends BaseEmbed { ); this.addFields({ name: 'Stack Trace', value: `\`\`\`\n${stack}\n\`\`\`` }); } - this.footer.text = 'Occurred'; - this.timestamp = new Date().getTime(); + this.setFooter({ text: 'Occurred' }); + this.setTimestamp(new Date().getTime()); } } diff --git a/src/embeds/EventEmbed.js b/src/embeds/EventEmbed.js index 727e30795..a17cb5155 100644 --- a/src/embeds/EventEmbed.js +++ b/src/embeds/EventEmbed.js @@ -13,49 +13,57 @@ export default class EventEmbed extends BaseEmbed { constructor(event, { platform, i18n, locale }) { super(locale); - this.color = 0xfdec96; + this.setColor(0xfdec96); if (event) { - this.title = `[${platform.toUpperCase()}] ${event.description}`; - this.fields = []; - this.description = event.tooltip; + this.setTitle(`[${platform.toUpperCase()}] ${event.description}`); + this.setFields([]); + this.setDescription(event.tooltip); if (event.victimNode) { if (event.faction) { const faction = i18n` by attacking the ${event.faction}`; const node = i18n` at ${event.node}`; - this.fields.push({ - name: '\u200B', - value: i18n`Defend ${event.victimNode}${event.faction ? faction : ''}${event.node ? node : ''}.`, - }); + this.setFields([ + { + name: '\u200B', + value: i18n`Defend ${event.victimNode}${event.faction ? faction : ''}${event.node ? node : ''}.`, + }, + ]); } else { - this.fields.push({ - name: event.victimNode, - value: i18n`Fight for ${event.affiliatedWith}`, - }); + this.setFields([ + { + name: event.victimNode, + value: i18n`Fight for ${event.affiliatedWith}`, + }, + ]); } } if (event.rewards?.length > 0) { - this.fields.push({ - name: i18n`Rewards`, - value: event.rewards - ? event.rewards - .filter(Boolean) - .map((reward) => reward?.asString) - .join('; ') - : i18n`No Rewards`, - }); + this.setFields([ + { + name: i18n`Rewards`, + value: event.rewards + ? event.rewards + .filter(Boolean) + .map((reward) => reward?.asString) + .join('; ') + : i18n`No Rewards`, + }, + ]); } if (event.maximumScore && event.currentScore) { - this.fields.push({ - name: i18n`Progress`, - value: `${Number(event.currentScore / event.maximumScore).toFixed(2)}%`, - }); + this.setFields([ + { + name: i18n`Progress`, + value: `${Number(event.currentScore / event.maximumScore).toFixed(2)}%`, + }, + ]); } else { if (event.maximumScore) { - this.fields.push({ name: i18n`Completion Score`, value: String(event.maximumScore) }); + this.setFields([{ name: i18n`Completion Score`, value: String(event.maximumScore) }]); } if (event.currentScore) { - this.fields.push({ name: i18n`Current Score`, value: String(event.currentScore) }); + this.setFields([{ name: i18n`Current Score`, value: String(event.currentScore) }]); } } @@ -75,14 +83,14 @@ export default class EventEmbed extends BaseEmbed { }`; }) .join('\n'); - this.fields.push({ name: i18n`Jobs from ${event.affiliatedWith}`, value: jobString }); + this.setFields([{ name: i18n`Jobs from ${event.affiliatedWith}`, value: jobString }]); } if (event.health && event.health !== '0.00') { - this.footer.text = i18n`${event.health}% Remaining`; + this.setFooter({ text: i18n`${event.health}% Remaining` }); } } else { - this.title = 'No Current Events'; + this.setTitle('No Current Events'); } } } diff --git a/src/embeds/FissureEmbed.js b/src/embeds/FissureEmbed.js index f5f9d54db..59b300047 100644 --- a/src/embeds/FissureEmbed.js +++ b/src/embeds/FissureEmbed.js @@ -22,38 +22,38 @@ export default class FissureEmbed extends BaseEmbed { if (!Array.isArray(fissures)) fissures = [fissures]; if (fissures.length > 1) { - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Void Fissures`; + this.data.title = i18n`[${platform.toUpperCase()}] Worldstate - Void Fissures`; } if (era) { - this.title = i18n`[${platform.toUpperCase()}] ${era} Fissures`; + this.data.title = i18n`[${platform.toUpperCase()}] ${era} Fissures`; } - this.url = `${wikiBase}Void_Fissure`; - this.thumbnail = { + this.data.url = `${wikiBase}Void_Fissure`; + this.data.thumbnail = { url: fissureThumb, }; if (fissures.length > 1) { - this.description = '_ _'; + this.data.description = '_ _'; fissures.sort((a, b) => a.tierNum - b.tierNum); - this.fields = fissures.map((f) => ({ + this.data.fields = fissures.map((f) => ({ name: i18n`${f.missionType} ${era ? '' : f.tier}`, value: `${i18n`${f.node} against ${f.enemy}`}${i18n`\n**Expires ${rTime(f.expiry)}**`}`, })); } else if (fissures.length === 0) { - this.description = i18n`Currently no fissures`; + this.data.description = i18n`Currently no fissures`; } else { const f = fissures[0]; - this.title = i18n`[${platform.toUpperCase()}] ${f.missionType} ${f.tier}`; - this.description = `${i18n`${f.node} against ${f.enemy}`}${i18n`\n**Expires ${rTime(f.expiry)}**`}`; - if (f.isStorm) this.description += `\n${i18n`Void Storm - Archwing Required`}`; - this.footer.text = i18n`Expires `; - this.timestamp = new Date(f.expiry).getTime(); - this.thumbnail.url = fissureThumb; + this.data.title = i18n`[${platform.toUpperCase()}] ${f.missionType} ${f.tier}`; + this.data.description = `${i18n`${f.node} against ${f.enemy}`}${i18n`\n**Expires ${rTime(f.expiry)}**`}`; + if (f.isStorm) this.data.description += `\n${i18n`Void Storm - Archwing Required`}`; + this.data.footer.text = i18n`Expires `; + this.data.timestamp = new Date(f.expiry).getTime(); + this.data.thumbnail.url = fissureThumb; if (f.isHard) { this.setImage(steelPath); } } - this.color = 0x4aa1b2; + this.data.color = 0x4aa1b2; } } diff --git a/src/embeds/FrameEmbed.js b/src/embeds/FrameEmbed.js index 178de1fc2..2ccf316a5 100644 --- a/src/embeds/FrameEmbed.js +++ b/src/embeds/FrameEmbed.js @@ -15,19 +15,17 @@ export default class FrameEmbed extends BaseEmbed { constructor(frame, { frames = [], i18n, locale }) { super(locale); - this.thumbnail = { - url: `${assetBase}/img/arcane.png`, - }; + this.setThumbnail(`${assetBase}/img/arcane.png`); if (frame && typeof frame !== 'undefined') { - this.title = frame.name; - this.url = frame.wikiaUrl; - this.thumbnail.url = frame.wikiaThumbnail; - this.description = `_${frame.description}_`; + this.setTitle(frame.name); + this.setURL(frame.wikiaThumbnail); + this.setThumbnail(frame.wikiaThumbnail); + this.setDescription(`_${frame.description}_`); if (frame.location) { - this.footer = { text: i18n`Drops from: ${frame.location}` }; + this.setFooter({ text: i18n`Drops from: ${frame.location}` }); } - this.color = frame.color; - this.fields = [ + this.setColor(frame.color); + this.setFields([ frame.url || frame.prime_url ? { name: i18n`Profile`, @@ -90,15 +88,15 @@ export default class FrameEmbed extends BaseEmbed { name: i18n`Abilities`, value: '**=============**', }, - ]; + ]); - this.fields.push( + this.addFields( ...(frame?.abilities?.map((ability) => ({ name: ability.name, value: `_${ability.description}_` })) || []) ); - this.fields = this.fields.filter((field) => field && field?.value?.length); + this.setFields(this.data.fields.filter((field) => field && field?.value?.length)); } else { - this.title = i18n`Available Warframes`; - this.fields = [{ name: '\u200B', value: frames.map((stat) => stat.name).join('\n') }]; + this.setTitle(i18n`Available Warframes`); + this.setFields([{ name: '\u200B', value: frames.map((stat) => stat.name).join('\n') }]); } } } diff --git a/src/embeds/InvasionEmbed.js b/src/embeds/InvasionEmbed.js index e5e9774a9..5cc8ea321 100644 --- a/src/embeds/InvasionEmbed.js +++ b/src/embeds/InvasionEmbed.js @@ -18,22 +18,24 @@ export default class InvasionEmbed extends BaseEmbed { super(locale); if (!Array.isArray(invasions)) invasions = [invasions]; - this.color = 0x3498db; - this.url = `${wikiBase}Invasion`; + this.setColor(0x3498db); + this.setURL(`${wikiBase}Invasion`); if (invasions.length > 1) { - this.fields = invasions.map((i) => { - let rewards = i.defender.reward.asString; - if (!i.vsInfestation) { - rewards = i18n`${i.attacker.reward.asString} vs ${rewards}`; - } - const completion = Math.round(i.completion * 100) / 100; - return { - name: i18n`${rewards} - ${completion > 0 ? completion : 0}%`, - value: i18n`${i.desc} on ${i.node} - ETA ${i.eta}`, - }; - }); - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Invasions`; - this.description = i18n`Currently in-progress invasions:`; + this.setFields( + invasions.map((i) => { + let rewards = i.defender.reward.asString; + if (!i.vsInfestation) { + rewards = i18n`${i.attacker.reward.asString} vs ${rewards}`; + } + const completion = Math.round(i.completion * 100) / 100; + return { + name: i18n`${rewards} - ${completion > 0 ? completion : 0}%`, + value: i18n`${i.desc} on ${i.node} - ETA ${i.eta}`, + }; + }) + ); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Invasions`); + this.setDescription(i18n`Currently in-progress invasions:`); } else { const i = invasions[0]; let rewards = i.defender?.reward?.asString; @@ -41,14 +43,12 @@ export default class InvasionEmbed extends BaseEmbed { rewards = i18n`${i.attacker.reward.asString} vs ${rewards}`; } const completion = Math.round(i.completion * 100) / 100; - this.title = i18n`[${platform.toUpperCase()}] ${rewards} - ${completion > 0 ? completion : 0}%`; - this.description = i.desc; - this.fields = [{ name: i18n`Location`, value: i.node, inline: true }]; - this.footer.text = i18n`${i.eta.replace(/-?Infinityd/gi, '\u221E')} remaining`; + this.setTitle(i18n`[${platform.toUpperCase()}] ${rewards} - ${completion > 0 ? completion : 0}%`); + this.setDescription(i.desc); + this.setFields([{ name: i18n`Location`, value: i.node, inline: true }]); + this.setFooter({ text: i18n`${i.eta.replace(/-?Infinityd/gi, '\u221E')} remaining` }); } - this.thumbnail = { - url: invasionThumb, - }; + this.setThumbnail(invasionThumb); } } diff --git a/src/embeds/KuvaEmbed.js b/src/embeds/KuvaEmbed.js index b4d087eab..02626e090 100644 --- a/src/embeds/KuvaEmbed.js +++ b/src/embeds/KuvaEmbed.js @@ -17,22 +17,19 @@ export default class KuvaEmbed extends BaseEmbed { constructor(kuver, { platform, i18n, locale }) { super(locale); - this.thumbnail = { - url: kuvaThumb, - }; - this.color = 0x742725; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Kuva`; + this.setThumbnail(kuvaThumb); + this.setColor(0x742725); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Kuva`); const grouped = groupBy(kuver, 'enemy'); - this.fields = []; - Object.keys(grouped).forEach((enemy) => { - this.fields.push({ + this.setFields( + Object.keys(grouped).map((enemy) => ({ name: enemy, value: grouped[enemy].map((kuva) => i18n`${kuva.type} on ${kuva.node}`).join('\n'), inline: false, - }); - }); + })) + ); - this.footer.text = 'Expires'; - this.timestamp = kuver[0].expiry; + this.setFooter({ text: 'Expires' }); + this.setTimestamp(kuver[0].expiry); } } diff --git a/src/embeds/LFGEmbed.js b/src/embeds/LFGEmbed.js index a727fa08e..5c9d434f7 100644 --- a/src/embeds/LFGEmbed.js +++ b/src/embeds/LFGEmbed.js @@ -24,33 +24,37 @@ export default class LFGEmbed extends BaseEmbed { */ constructor(lfg, { i18n, locale }) { super(locale); - this.color = lfg.expiry ? activeC : expiredC; - this.title = i18n`${lfg.types.length ? lfg.types.join(' & ') : i18n`LFG`} Posted by ${lfg.author.tag}`; - this.fields = [ + this.setColor(lfg.expiry ? activeC : expiredC); + this.setTitle(i18n`${lfg.types.length ? lfg.types.join(' & ') : i18n`LFG`} Posted by ${lfg.author.tag}`); + this.setFields([ { name: i18n`Where`, value: lfg.location, inline: true }, { name: i18n`Time`, value: lfg.duration, inline: true }, { name: i18n`Farming For`, value: lfg.goal, inline: true }, { name: i18n`Platform`, value: lfg.platform.toUpperCase(), inline: true }, { name: i18n`Need`, value: `${lfg.membersNeeded - lfg.members.length}`, inline: true }, { name: i18n`Members`, value: lfg.members.map((id) => `<@!${id}>`).join(', '), inline: true }, - ]; + ]); if (lfg.vc.channel) { - this.fields.push({ - name: i18n`Voice Chat`, - value: `<#${lfg.vc.channel.id}>`, - inline: true, - }); + this.addFields([ + { + name: i18n`Voice Chat`, + value: `<#${lfg.vc.channel.id}>`, + inline: true, + }, + ]); } if (lfg.expiry !== 0) { - this.fields.push({ - name: '_ _', - value: i18n`Expires `, - inline: false, - }); + this.addFields([ + { + name: '_ _', + value: i18n`Expires `, + inline: false, + }, + ]); } const ed = lfg.edited ? i18n`Edited` : i18n`Posted`; - this.footer.text = lfg.expiry === 0 ? i18n`Expired • ${ed}` : ed; + this.setFooter({ text: lfg.expiry === 0 ? i18n`Expired • ${ed}` : ed }); } } diff --git a/src/embeds/LogEmbed.js b/src/embeds/LogEmbed.js index 1bf9d95a7..a3c8de384 100644 --- a/src/embeds/LogEmbed.js +++ b/src/embeds/LogEmbed.js @@ -15,9 +15,9 @@ export default class LogEmbed extends BaseEmbed { */ constructor(log) { super(); - this.color = log.color; - this.title = log.title; - this.fields = log.fields; - this.footer.text = log.footer; + this.setColor(log.color); + this.setTitle(log.title); + this.setFields(log.fields); + this.setFooter({ text: log.footer }); } } diff --git a/src/embeds/ModEmbed.js b/src/embeds/ModEmbed.js index fecd2a0c7..11c9dbd08 100644 --- a/src/embeds/ModEmbed.js +++ b/src/embeds/ModEmbed.js @@ -15,26 +15,25 @@ export default class ModEmbed extends BaseEmbed { constructor(modData, { i18n, locale }) { super(locale); - this.title = modData.name; - this.color = rarity[modData.rarity.toLowerCase()]; + this.setTitle(modData.name); + this.setColor(rarity[modData.rarity.toLowerCase()]); // If we have a description, show it. For stance mods, etc if (modData.description) { - this.description = `_${emojify(modData.description)}_`; + this.setDescription(`_${emojify(modData.description)}_`); } // If we have an effect, show the max rank effect const statsLength = modData.levelStats && modData.levelStats.length; if (statsLength > 0) { const stats = modData.levelStats[statsLength - 1].stats.join('\n'); - this.description = `_${emojify(stats)}_`; + this.setDescription(`_${emojify(stats)}_`); } - this.url = `${wikiBase}${modData.name.replace(/\s/gi, '_')}`; - this.image = { - url: `${apiCdnBase}img/${modData.imageName}`, - }; - this.fields = [ + this.setURL(`${wikiBase}${modData.name.replace(/\s/gi, '_')}`); + this.setImage(`${apiCdnBase}img/${modData.imageName}`); + + this.setFields([ { name: i18n`Polarity`, value: emojify(modData.polarity.toLowerCase()), @@ -65,6 +64,6 @@ export default class ModEmbed extends BaseEmbed { value: emojify(modData.tradable ? 'green_tick' : 'red_tick'), inline: true, }, - ]; + ]); } } diff --git a/src/embeds/NewsEmbed.js b/src/embeds/NewsEmbed.js index 6bbde459e..34e3767e8 100644 --- a/src/embeds/NewsEmbed.js +++ b/src/embeds/NewsEmbed.js @@ -26,7 +26,7 @@ export default class NewsEmbed extends BaseEmbed { if (!Array.isArray(news)) news = [news]; news.sort(newsSort); - this.color = news.length > 0 ? 0x779ecb : 0xff6961; + this.setColor(news.length > 0 ? 0x779ecb : 0xff6961); let value = createGroupedArray( news .filter((n) => { @@ -63,19 +63,19 @@ export default class NewsEmbed extends BaseEmbed { } const first = news[0]; if (news.length === 1) { - this.title = i18n`[${platform.toUpperCase()}] ${first.message}`; - this.fields = undefined; - this.footer.text = i18n`Published `; - this.timestamp = new Date(first.date); - this.url = first.link; + this.setTitle(i18n`[${platform.toUpperCase()}] ${first.message}`); + this.setFields([]); + this.setFooter(i18n`Published `); + this.setTimestamp(new Date(first.date)); + this.setURL(first.link); } else { if (Array.isArray(value[0])) { - this.fields = value.map((val) => ({ name: '\u200B', value: val.join('\n') })); + this.setFields(value.map((val) => ({ name: '\u200B', value: val.join('\n') }))); } else { - [this.description] = value; + this.setDescription(value); } - this.footer.text = platform.toUpperCase(); + this.setFooter({ text: platform.toUpperCase() }); } - this.image = { url: first ? first.imageLink : '' }; + this.setImage(first ? first.imageLink : ''); } } diff --git a/src/embeds/NightwaveEmbed.js b/src/embeds/NightwaveEmbed.js index 4791b2fa6..04de03d64 100644 --- a/src/embeds/NightwaveEmbed.js +++ b/src/embeds/NightwaveEmbed.js @@ -19,72 +19,78 @@ export default class NightwaveEmbed extends BaseEmbed { constructor(nightwave, { platform, i18n, locale }) { super(locale); - this.thumbnail = { - url: 'https://i.imgur.com/yVcWOPp.png', - }; - this.color = 0x663333; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Nightwave`; + this.setThumbnail('https://i.imgur.com/yVcWOPp.png'); + this.setColor(0x663333); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Nightwave`); const logicalSeason = nightwave.season + 1; const seasonDisplay = `${Math.floor(logicalSeason / 2)}${logicalSeason % 2 === 1 ? ' Intermission' : ''}`; if (nightwave.activeChallenges.length > 1) { - this.description = i18n`Season ${seasonDisplay} • Phase ${nightwave.phase + 1}`; - this.fields = []; - this.fields.push({ - name: i18n`Currently Active`, - value: String(nightwave.activeChallenges.length), - inline: false, - }); + this.setDescription(i18n`Season ${seasonDisplay} • Phase ${nightwave.phase + 1}`); + this.setFields([]); + this.addFields([ + { + name: i18n`Currently Active`, + value: String(nightwave.activeChallenges.length), + inline: false, + }, + ]); if (nightwave.activeChallenges.filter((challenge) => challenge.isDaily).length) { - this.fields.push({ - name: i18n`Daily`, - value: - nightwave.activeChallenges - .filter((challenge) => challenge.isDaily) - .map(chString) - .join('\n') || '__', - inline: false, - }); + this.addFields([ + { + name: i18n`Daily`, + value: + nightwave.activeChallenges + .filter((challenge) => challenge.isDaily) + .map(chString) + .join('\n') || '__', + inline: false, + }, + ]); } createGroupedArray( nightwave.activeChallenges.filter((challenge) => !challenge.isDaily && !challenge.isElite), 5 ).forEach((challengeGroup, index) => { - this.fields.push({ - name: index > 0 ? i18n`Weekly, ctd.` : i18n`Weekly`, - value: challengeGroup.map(chString).join('\n') || '__', - inline: false, - }); + this.addFields([ + { + name: index > 0 ? i18n`Weekly, ctd.` : i18n`Weekly`, + value: challengeGroup.map(chString).join('\n') || '__', + inline: false, + }, + ]); }); createGroupedArray( nightwave.activeChallenges.filter((challenge) => !challenge.isDaily && challenge.isElite), 4 ).forEach((challengeGroup, index) => { - this.fields.push({ - name: index > 0 ? i18n`Elite Weekly, ctd.` : i18n`Elite Weekly`, - value: challengeGroup.map(chString).join('\n') || '__', - inline: false, - }); + this.addFields([ + { + name: index > 0 ? i18n`Elite Weekly, ctd.` : i18n`Elite Weekly`, + value: challengeGroup.map(chString).join('\n') || '__', + inline: false, + }, + ]); }); - this.footer.text = i18n`${timeDeltaToString( - new Date(nightwave.expiry).getTime() - Date.now() - )} remaining • Expires `; - this.timestamp = nightwave.activeChallenges[0].expiry; + this.setFooter({ + text: i18n`${timeDeltaToString(new Date(nightwave.expiry).getTime() - Date.now())} remaining • Expires `, + }); + this.setTimestamp(nightwave.activeChallenges[0].expiry); } else { const challenge = nightwave.activeChallenges[0]; - this.description = chStringSingle(challenge); + this.setDescription(chStringSingle(challenge)); if (challenge.isElite) { - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Elite Nightwave`; + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Elite Nightwave`); } - this.footer.text = i18n`${timeDeltaToString( - new Date(challenge.expiry).getTime() - Date.now() - )} remaining • Expires `; - this.timestamp = challenge.expiry; + this.setFooter({ + text: i18n`${timeDeltaToString(new Date(challenge.expiry).getTime() - Date.now())} remaining • Expires `, + }); + this.setTimestamp(challenge.expiry); } } } diff --git a/src/embeds/PatchnotesEmbed.js b/src/embeds/PatchnotesEmbed.js index ce9387888..162fb304b 100644 --- a/src/embeds/PatchnotesEmbed.js +++ b/src/embeds/PatchnotesEmbed.js @@ -10,9 +10,9 @@ export default class PatchnotesEmbed extends BaseEmbed { */ constructor(patchlogs, { i18n }) { super(); - this.title = i18n`Patch Notes`; - this.color = 0x819eaa; - this.fields = patchlogs.map((patchlog) => { + this.setTitle(i18n`Patch Notes`); + this.setColor(0x819eaa); + const fields = patchlogs.map((patchlog) => { const tokens = []; tokens.push( i18n`**Published:** ${new Date(patchlog.date).toLocaleDateString('en-US', { timeZone: 'America/New_York' })}\n` @@ -29,6 +29,8 @@ export default class PatchnotesEmbed extends BaseEmbed { value: tokens.join(''), }; }); + + this.setFields(fields); if (patchlogs[0].imgUrl) { this.setImage(patchlogs[0].imgUrl); } diff --git a/src/embeds/RSSEmbed.js b/src/embeds/RSSEmbed.js index afb8786fd..030d35ecf 100644 --- a/src/embeds/RSSEmbed.js +++ b/src/embeds/RSSEmbed.js @@ -38,30 +38,30 @@ class RSSEmbed extends BaseEmbed { strippedDesc = strippedDesc.replace(/\*\*(.*)\*\*$/g, ''); } - this.description = strippedDesc; + this.setDescription(strippedDesc); } } catch (e) { logger.error(e); logger.debug(strippedDesc, 'WS'); } - this.url = feedItem.link; - this.timestamp = feedItem.pubdate; - this.title = feedItem.title; + this.setURL(feedItem.link); + this.setTimestamp(feedItem.pubdate); + this.setTitle(feedItem.title); - this.color = 0x993333; - this.footer.text = `${feedItem.meta.description} • Published`; + this.setColor(0x993333); + this.setFooter({ text: `${feedItem.meta.description} • Published` }); - this.thumbnail = { url: 'https://i.imgur.com/GGzVZPL.png', height: 50, width: 50 }; + this.setThumbnail('https://i.imgur.com/GGzVZPL.png'); if (feed.author) { - this.author = feed.author; + this.setAuthor({ name: feed.author }); } else { - this.author = { + this.setAuthor({ name: 'Warframe Forums', url: feedItem['rss:link']['#'], icon_url: 'https://i.imgur.com/hE2jdpv.png', - }; + }); } if (!Object.keys(feedItem.image).length) { @@ -69,18 +69,14 @@ class RSSEmbed extends BaseEmbed { if (first) { if (first.startsWith('//')) { first = first.replace('//', 'https://'); - this.image = { - url: first, - }; + this.setImage(first); } } else if (feed.defaultAttach) { - this.image = { - url: feed.defaultAttach, - }; + this.setImage(feed.defaultAttach); } } - if (!this.description?.length) this.description = '_ _'; + if (!this.data.description?.length) this.setDescription('_ _'); } } diff --git a/src/embeds/RaidEmbed.js b/src/embeds/RaidEmbed.js index ba228a1e5..09f50533a 100644 --- a/src/embeds/RaidEmbed.js +++ b/src/embeds/RaidEmbed.js @@ -13,21 +13,19 @@ export default class RaidStatEmbed extends BaseEmbed { */ constructor(userStats, { query, platform, i18n, locale }) { super(locale); - this.title = i18n`Raid statistics for ${query}`; - this.url = encodeURI(`https://${platform !== 'pc' ? `${platform}.` : ''}trials.wf/player/?user=${query}`); - this.color = 0xaf5b4b; - this.thumbnail = { - url: `${assetBase}/NightmareRaidSekhara.png`, - }; + this.setTitle(i18n`Raid statistics for ${query}`); + this.setURL(encodeURI(`https://${platform !== 'pc' ? `${platform}.` : ''}trials.wf/player/?user=${query}`)); + this.setColor(0xaf5b4b); + this.setThumbnail(`${assetBase}/NightmareRaidSekhara.png`); const stats = { lor: new RaidStat(userStats, 'lor'), lornm: new RaidStat(userStats, 'lornm'), jv: new RaidStat(userStats, 'jv'), totals: {}, }; - stats.total = new RaidStat(); - stats.total.makeTotals(stats.lor, stats.lornm, stats.jv); - this.fields = [ + stats.totals = new RaidStat(); + stats.totals.makeTotals(stats.lor, stats.lornm, stats.jv); + this.setFields([ { name: i18n`Law of Retribution`, value: stats.lor.toString(), @@ -45,11 +43,11 @@ export default class RaidStatEmbed extends BaseEmbed { }, { name: i18n`Totals`, - value: stats.total.toString(), + value: stats.totals.toString(), inline: true, }, - ]; + ]); - this.footer.text = i18n`Evaluated by Cephalon Genesis | Source: trials.wf`; + this.setFooter({ text: i18n`Evaluated by Cephalon Genesis | Source: trials.wf` }); } } diff --git a/src/embeds/RivenStatEmbed.js b/src/embeds/RivenStatEmbed.js index dd29b7d0d..29c82720b 100644 --- a/src/embeds/RivenStatEmbed.js +++ b/src/embeds/RivenStatEmbed.js @@ -8,107 +8,103 @@ export default class RivenStatEmbed extends BaseEmbed { */ constructor(rivenResult, { resultKey, i18n }) { super(); - this.thumbnail = { - url: 'https://i.imgur.com/luKxF3t.png', - }; - this.fields = []; + this.setThumbnail('https://i.imgur.com/luKxF3t.png'); + this.setFields([]); if (rivenResult.rerolled) { - this.fields.push( - ...[ - { - name: i18n`Rerolled`, - value: '\u200B', - inline: false, - }, - { - name: i18n`Average Cost`, - value: `${rivenResult.rerolled.avg}`, - inline: true, - }, - { - name: i18n`Standard Deviation`, - value: `${rivenResult.rerolled.stddev}`, - inline: true, - }, - { - name: i18n`Minimum Cost`, - value: `${rivenResult.rerolled.min}`, - inline: true, - }, - { - name: i18n`Maximum Cost`, - value: `${rivenResult.rerolled.max}`, - inline: true, - }, - { - name: i18n`Popularity`, - value: `${rivenResult.rerolled.pop}`, - inline: true, - }, - { - name: i18n`Median Cost`, - value: `${rivenResult.rerolled.median}`, - inline: true, - }, - ] - ); + this.addFields([ + { + name: i18n`Rerolled`, + value: '\u200B', + inline: false, + }, + { + name: i18n`Average Cost`, + value: `${rivenResult.rerolled.avg}`, + inline: true, + }, + { + name: i18n`Standard Deviation`, + value: `${rivenResult.rerolled.stddev}`, + inline: true, + }, + { + name: i18n`Minimum Cost`, + value: `${rivenResult.rerolled.min}`, + inline: true, + }, + { + name: i18n`Maximum Cost`, + value: `${rivenResult.rerolled.max}`, + inline: true, + }, + { + name: i18n`Popularity`, + value: `${rivenResult.rerolled.pop}`, + inline: true, + }, + { + name: i18n`Median Cost`, + value: `${rivenResult.rerolled.median}`, + inline: true, + }, + ]); } if (rivenResult.unrolled && rivenResult.rerolled) { - this.fields.push({ - name: '\u200B', - value: '\u200B', - inline: false, - }); + this.addFields([ + { + name: '\u200B', + value: '\u200B', + inline: false, + }, + ]); } if (rivenResult.unrolled) { - this.fields.push( - ...[ - { - name: i18n`Unrolled`, - value: '\u200B', - inline: false, - }, - { - name: i18n`Average Cost`, - value: `${rivenResult.unrolled.avg}`, - inline: true, - }, - { - name: i18n`Standard Deviation`, - value: `${rivenResult.unrolled.stddev}`, - inline: true, - }, - { - name: i18n`Minimum Cost`, - value: `${rivenResult.unrolled.min}`, - inline: true, - }, - { - name: i18n`Maximum Cost`, - value: `${rivenResult.unrolled.max}`, - inline: true, - }, - { - name: i18n`Popularity`, - value: `${rivenResult.unrolled.pop}`, - inline: true, - }, - { - name: i18n`Median Cost`, - value: `${rivenResult.unrolled.median}`, - inline: true, - }, - ] - ); + this.addFields([ + { + name: i18n`Unrolled`, + value: '\u200B', + inline: false, + }, + { + name: i18n`Average Cost`, + value: `${rivenResult.unrolled.avg}`, + inline: true, + }, + { + name: i18n`Standard Deviation`, + value: `${rivenResult.unrolled.stddev}`, + inline: true, + }, + { + name: i18n`Minimum Cost`, + value: `${rivenResult.unrolled.min}`, + inline: true, + }, + { + name: i18n`Maximum Cost`, + value: `${rivenResult.unrolled.max}`, + inline: true, + }, + { + name: i18n`Popularity`, + value: `${rivenResult.unrolled.pop}`, + inline: true, + }, + { + name: i18n`Median Cost`, + value: `${rivenResult.unrolled.median}`, + inline: true, + }, + ]); } - if (!this.fields.length) { - this.description = i18n`No data available`; + if (!this.data.fields.length) { + this.setDescription(i18n`No data available`); } - this.title = i18n`Riven: ${resultKey}`; - this.color = 0x84659f; + this.setTitle(i18n`Riven: ${resultKey}`); + this.setColor(0x84659f); } } diff --git a/src/embeds/SalesEmbed.js b/src/embeds/SalesEmbed.js index 782e43741..990d205ee 100644 --- a/src/embeds/SalesEmbed.js +++ b/src/embeds/SalesEmbed.js @@ -12,13 +12,13 @@ export default class SalesEmbed extends BaseEmbed { constructor(sales, { platform, i18n, locale }) { super(locale); - this.color = 0x0000ff; - this.title = (Array.isArray(sales) ? sales[0] : sales).isPopular - ? i18n`[${platform.toUpperCase()}] Popular Sales` - : i18n`[${platform.toUpperCase()}] Featured Deal`; - this.thumbnail = { - url: darvo, - }; - this.fields = Array.isArray(sales) ? sales.map((sale) => makeSale(sale, i18n)) : [makeSale(sales, i18n)]; + this.setColor(0x0000ff); + this.setTitle( + (Array.isArray(sales) ? sales[0] : sales).isPopular + ? i18n`[${platform.toUpperCase()}] Popular Sales` + : i18n`[${platform.toUpperCase()}] Featured Deal` + ); + this.setThumbnail(darvo); + this.setFields(Array.isArray(sales) ? sales.map((sale) => makeSale(sale, i18n)) : [makeSale(sales, i18n)]); } } diff --git a/src/embeds/ServerInfoEmbed.js b/src/embeds/ServerInfoEmbed.js index 5bb652727..4a38513b8 100644 --- a/src/embeds/ServerInfoEmbed.js +++ b/src/embeds/ServerInfoEmbed.js @@ -33,10 +33,10 @@ export default class ServerInfoEmbed extends BaseEmbed { constructor(guild) { super(); - this.title = guild.name; - this.color = verifications[guild.verificationLevel].color; - this.thumbnail = { url: `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png` }; - this.fields = [ + this.setTitle(guild.name); + this.setColor(verifications[guild.verificationLevel].color); + this.setThumbnail(`https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png`); + this.setFields([ { name: 'Created:', value: guild.createdAt.toLocaleString(), @@ -77,7 +77,7 @@ export default class ServerInfoEmbed extends BaseEmbed { value: `Count: ${guild.roles.cache.size}`, inline: true, }, - ]; - this.footer = { text: `Server ID: ${guild.id}` }; + ]); + this.setFooter({ text: `Server ID: ${guild.id}` }); } } diff --git a/src/embeds/SettingsEmbed.js b/src/embeds/SettingsEmbed.js index 44b15de31..8525e3328 100644 --- a/src/embeds/SettingsEmbed.js +++ b/src/embeds/SettingsEmbed.js @@ -1,3 +1,5 @@ +import { ChannelType } from 'discord.js'; + import BaseEmbed from './BaseEmbed.js'; /** @@ -11,16 +13,16 @@ export default class SettingsEmbed extends BaseEmbed { */ constructor(channel, { tokens, i18n }) { super(); - this.color = 0x77dd77; - if (channel.type === 'GUILD_TEXT') { - this.title = i18n`Settings for ${channel.name}`; + this.setColor(0x77dd77); + if (channel.type === ChannelType.GuildText) { + this.setTitle(i18n`Settings for ${channel.name}`); } else { - this.title = i18n`Settings for DM with ${channel.recipient.username}`; + this.setTitle(i18n`Settings for DM with ${channel.recipient.username}`); } - this.fields = []; + this.setFields([]); tokens.forEach((tokenGroup) => { - this.fields.push({ name: '\u200B', value: tokenGroup.join('\n') }); + this.addFields([{ name: '\u200B', value: tokenGroup.join('\n') }]); }); } } diff --git a/src/embeds/ShieldEmbed.js b/src/embeds/ShieldEmbed.js index 8518cc501..10aeede9c 100644 --- a/src/embeds/ShieldEmbed.js +++ b/src/embeds/ShieldEmbed.js @@ -15,29 +15,27 @@ export default class ShieldEmbed extends BaseEmbed { } constructor(params, { i18n }) { super(); - this.color = params && params.length > 3 ? 0x00ff00 : 0xff0000; - this.title = i18n`Warframe - Shields`; - this.url = 'https://warframe.com'; - this.thumbnail = { - url: ShieldEmbed.#corpus, - }; - this.fields = [ - { - name: '\u200B', - value: '', - }, - ]; + this.setColor(params && params.length > 3 ? 0x00ff00 : 0xff0000); + this.setTitle(i18n`Warframe - Shields`); + this.setURL('https://warframe.com'); + this.setThumbnail(ShieldEmbed.#corpus); + const field = { + name: '\u200B', + value: '', + }; if (params && params.length > 3) { const shields = params[1]; const baseLevel = params[2]; const currentLevel = params[3]; const calc = ShieldEmbed.#shieldCalc(shields, baseLevel, currentLevel); - this.fields[0].name = i18n`Shield calculation`; - this.fields[0].value = ShieldEmbed.#shieldString(calc, currentLevel, i18n); + field.name = i18n`Shield calculation`; + field.value = ShieldEmbed.#shieldString(calc, currentLevel, i18n); } else { - this.fields[0].value = '`shields (Base Shelds) (Base Level) (Current Level)` - calculate shields and stats.'; - this.fields[0].name = 'Possible uses include:'; + field.value = '`shields (Base Shelds) (Base Level) (Current Level)` - calculate shields and stats.'; + field.name = 'Possible uses include:'; } + + this.setFields([field]); } } diff --git a/src/embeds/SimarisEmbed.js b/src/embeds/SimarisEmbed.js index c3b5248b6..08e7f6f28 100644 --- a/src/embeds/SimarisEmbed.js +++ b/src/embeds/SimarisEmbed.js @@ -8,11 +8,9 @@ export default class SimarisEmbed extends BaseEmbed { constructor(simaris, { platform, i18n, locale }) { super(locale); - this.thumbnail = { - url: simarisThumb, - }; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Sanctuary`; - this.color = simaris.isTargetActive > 2 ? 0x00ff00 : 0xff0000; - this.description = simaris.asString; + this.setThumbnail(simarisThumb); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Sanctuary`); + this.setColor(simaris.isTargetActive > 2 ? 0x00ff00 : 0xff0000); + this.setDescription(simaris.asString); } } diff --git a/src/embeds/SolarisEmbed.js b/src/embeds/SolarisEmbed.js index cf7ffc5e7..81db89db8 100644 --- a/src/embeds/SolarisEmbed.js +++ b/src/embeds/SolarisEmbed.js @@ -28,15 +28,13 @@ export default class SolarisEmbed extends BaseEmbed { constructor(state, { i18n, locale }) { super(locale); - this.title = `Orb Vallis - ${state.isWarm ? 'Warm' : 'Cold'}`; - this.color = state.isWarm ? 0xb64624 : 0x000066; - this.thumbnail = { - url: solaris, - }; + this.setTitle(`Orb Vallis - ${state.isWarm ? 'Warm' : 'Cold'}`); + this.setColor(state.isWarm ? 0xb64624 : 0x000066); + this.setThumbnail(solaris); const warmstring = i18n`Time remaining until ${state.isWarm ? i18n`Cold` : i18n`Warm`}: ${rTime(state.expiry)}`; - this.description = `${state.bounty ? makeJobs(state.bounty) : ''}\n\n${warmstring}`; + this.setDescription(`${state.bounty ? makeJobs(state.bounty) : ''}\n\n${warmstring}`); - this.footer.text = `${state.isWarm ? i18n`Cold` : i18n`Warm`} starts `; - this.timestamp = new Date(state.expiry).getTime(); + this.setFooter({ text: `${state.isWarm ? i18n`Cold` : i18n`Warm`} starts ` }); + this.setTimestamp(new Date(state.expiry).getTime()); } } diff --git a/src/embeds/SortieEmbed.js b/src/embeds/SortieEmbed.js index acd24fcdd..bf70d9e9c 100644 --- a/src/embeds/SortieEmbed.js +++ b/src/embeds/SortieEmbed.js @@ -9,31 +9,29 @@ export default class SortieEmbed extends BaseEmbed { constructor(sortie, { platform, i18n, locale }) { super(locale); - this.color = 0xa84300; + this.setColor(0xa84300); if (typeof sortie !== 'undefined' && sortie) { - this.fields = sortie?.variants?.length - ? sortie.variants.map((v) => ({ - name: `${v.node} - ${v.missionType}`, - value: v.modifier, - })) - : sortie?.missions.map((m) => ({ - name: `${m.node} - ${m.type}`, - value: '_ _', - })); + this.setFields( + sortie?.variants?.length + ? sortie.variants.map((v) => ({ + name: `${v.node} - ${v.missionType}`, + value: v.modifier, + })) + : sortie?.missions.map((m) => ({ + name: `${m.node} - ${m.type}`, + value: '_ _', + })) + ); if (sortie?.variants?.length) { - this.description = i18n`Currently in-progress sortie: **${sortie.boss}**`; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Sortie`; - this.thumbnail = { - url: sortieThumb, - }; + this.setDescription(i18n`Currently in-progress sortie: **${sortie.boss}**`); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Sortie`); + this.setThumbnail(sortieThumb); } else { - this.description = i18n`Currently in-progress hunt: **${sortie.boss}**`; - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Archon Hunt`; - this.thumbnail = { - url: narmer, - }; + this.setDescription(i18n`Currently in-progress hunt: **${sortie.boss}**`); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Archon Hunt`); + this.setThumbnail(narmer); } - this.footer.text = i18n`${sortie.eta} remaining`; + this.setFooter({ text: i18n`${sortie.eta} remaining` }); } } } diff --git a/src/embeds/SteelPathEmbed.js b/src/embeds/SteelPathEmbed.js index afd8c7451..ab5495966 100644 --- a/src/embeds/SteelPathEmbed.js +++ b/src/embeds/SteelPathEmbed.js @@ -6,7 +6,7 @@ const steelPathThumb = `${assetBase}/img/steelpath.png`; export default class SteelPathEmbed extends BaseEmbed { constructor(offering, { isCommand = false, i18n, locale }) { super(locale); - this.description = `${i18n`**Rotating:**`} ${offering.currentReward.name || offering.currentReward}: ${ + this.setDescription(`${i18n`**Rotating:**`} ${offering.currentReward.name || offering.currentReward}: ${ offering.currentReward.cost || '???' }${isCommand ? emojify('steelessence') : i18n` essence`} @@ -16,12 +16,12 @@ export default class SteelPathEmbed extends BaseEmbed { (reward) => `:white_small_square: ${reward.name}: ${reward.cost}${isCommand ? emojify('steelessence') : i18n` essence`}` ) - .join('\n')}`; + .join('\n')}`); - this.footer.text = i18n`Cycles at`; - this.timestamp = offering.expiry; - this.title = i18n`Steel Path Offerings`; - this.thumbnail.url = steelPathThumb; - this.color = 0x43464b; + this.setFooter({ text: i18n`Cycles at` }); + this.setTimestamp(offering.expiry); + this.setTitle(i18n`Steel Path Offerings`); + this.setThumbnail(steelPathThumb); + this.setColor(0x43464b); } } diff --git a/src/embeds/SyndicateEmbed.js b/src/embeds/SyndicateEmbed.js index 569cca3f6..65ef22ec9 100644 --- a/src/embeds/SyndicateEmbed.js +++ b/src/embeds/SyndicateEmbed.js @@ -48,17 +48,15 @@ class SyndicateEmbed extends BaseEmbed { constructor(missions, { syndicate, platform, skipCheck, i18n, locale }) { super(locale); // Set default fields - this.color = 0xff0000; - this.fields = [ + this.setColor(0xff0000); + this.setFields([ { name: 'No such Syndicate', value: `Valid values: ${values.join(', ')}`, }, - ]; - this.url = `${wikiBase}${wikiBase.endsWith('/') ? '' : '/'}Syndicates`; - this.thumbnail = { - url: syndicateThumb, - }; + ]); + this.setURL(`${wikiBase}${wikiBase.endsWith('/') ? '' : '/'}Syndicates`); + this.setThumbnail(syndicateThumb); const foundSyndicate = missions.length && values.find((v) => syndicate && v.toLowerCase() === syndicate.toLowerCase()); @@ -70,36 +68,39 @@ class SyndicateEmbed extends BaseEmbed { syndMissions = missions; } if (syndMissions.length) { - this.title = i18n`[${platform.toUpperCase()}] Syndicates`; - this.color = 0x00ff00; + this.setTitle(i18n`[${platform.toUpperCase()}] Syndicates`); + this.setColor(0x00ff00); if (syndMissions.length < 2) { - this.title = `[${platform.toUpperCase()}] ${syndMissions[0].syndicate}`; - this.footer.text = i18n`Expires in ${syndMissions[0].eta}`; - this.timestamp = syndMissions[0].expiry; + this.setTitle(`[${platform.toUpperCase()}] ${syndMissions[0].syndicate}`); + this.setFooter({ text: i18n`Expires in ${syndMissions[0].eta}` }); + this.setTimestamp(syndMissions[0].expiry); } if (syndMissions.length < 2) { const missionValue = makeMissionValue(syndMissions[0], syndMissions); if (missionValue.length < 2000) { - this.description = missionValue; - this.fields = undefined; + this.setDescription(missionValue); + this.setFields([]); } else { - this.fields = missionValue.split('\n\n').map((spv) => ({ - name: '\u200B', - value: spv, - inline: false, - })); + this.setFields( + missionValue.split('\n\n').map((spv) => ({ + name: '\u200B', + value: spv, + inline: false, + })) + ); } } else { - this.fields = syndMissions.map((m) => ({ - name: syndMissions.length < 2 ? '\u200B' : m.syndicate, - value: makeMissionValue(m, syndMissions), - inline: !(m.jobs.length > 0), - })); + this.setFields( + syndMissions.map((m) => ({ + name: syndMissions.length < 2 ? '\u200B' : m.syndicate, + value: makeMissionValue(m, syndMissions), + inline: !(m.jobs.length > 0), + })) + ); } } } - this.bot = undefined; } } diff --git a/src/embeds/SynthesisTargetEmbed.js b/src/embeds/SynthesisTargetEmbed.js index c28b6f0cd..f8db75107 100644 --- a/src/embeds/SynthesisTargetEmbed.js +++ b/src/embeds/SynthesisTargetEmbed.js @@ -8,20 +8,20 @@ export default class SynthesisTargetEmbed extends BaseEmbed { constructor(synthTargets, { query, i18n }) { super(); - this.thumbnail = { - url: scannerThumb, - }; + this.setThumbnail(scannerThumb); if (synthTargets.length === 1) { - this.title = synthTargets[0].name; - this.fields = synthTargets[0].locations.map((loc) => ({ - name: i18n`${loc.mission}, ${loc.planet}`, - value: i18n`Faction: ${loc.faction}, Level: ${loc.level}, Spawn: ${loc.spawn_rate}`, - inline: false, - })); + this.setTitle(synthTargets[0].name); + this.setFields( + synthTargets[0].locations.map((loc) => ({ + name: i18n`${loc.mission}, ${loc.planet}`, + value: i18n`Faction: ${loc.faction}, Level: ${loc.level}, Spawn: ${loc.spawn_rate}`, + inline: false, + })) + ); } else { - this.title = i18n`Multiple targets matching "${query}"`; - this.fields = [{ name: '\u200B', value: synthTargets.map((t) => t.name).join('\n') }]; - this.footer.text = i18n`Search through the results using the arrows below.`; + this.setTitle(i18n`Multiple targets matching "${query}"`); + this.setFields([{ name: '\u200B', value: synthTargets.map((t) => t.name).join('\n') }]); + this.setFooter({ text: i18n`Search through the results using the arrows below.` }); } } } diff --git a/src/embeds/TweetEmbed.js b/src/embeds/TweetEmbed.js index a98017c08..9d0f24ed1 100644 --- a/src/embeds/TweetEmbed.js +++ b/src/embeds/TweetEmbed.js @@ -3,41 +3,43 @@ import BaseEmbed from './BaseEmbed.js'; export default class TweetEmbed extends BaseEmbed { constructor(tweet, { i18n, locale }) { super(locale); - this.color = 33972; - this.description = tweet.text; - this.timestamp = new Date(tweet.createdAt); - this.url = tweet.url; + this.setColor(33972); + this.setDescription(tweet.text); + this.setTimestamp(new Date(tweet.createdAt)); + this.setURL(tweet.url); if (tweet.mediaUrl) { - this.image = { - url: `${tweet.mediaUrl}`, - }; + this.setImage(`${tweet.mediaUrl}`); } if (tweet.isReply) { - this.title = i18n`${tweet.author.name} replied to a Tweet`; + this.setTitle(i18n`${tweet.author.name} replied to a Tweet`); } else if (tweet.quote) { - this.title = i18n`${tweet.author.name} retweeted a Tweet from ${tweet.quote.author.name} (@${tweet.quote.author.handle})`; - this.fields.push({ + this.setTitle( + i18n`${tweet.author.name} retweeted a Tweet from ${tweet.quote.author.name} (@${tweet.quote.author.handle})` + ); + this.addFields({ name: `${tweet.quote.author.name}`, value: tweet.quote.text, }); } else if (tweet.retweet) { - this.title = i18n`${tweet.author.name} retweeted a Tweet from ${tweet.retweet.author.name} (@${tweet.retweet.author.handle})`; - this.description = tweet.retweet.text; + this.setTitle( + i18n`${tweet.author.name} retweeted a Tweet from ${tweet.retweet.author.name} (@${tweet.retweet.author.handle})` + ); + this.setDescription(tweet.retweet.text); } else { - this.title = i18n`${tweet.author.name} Tweeted`; + this.setTitle(i18n`${tweet.author.name} Tweeted`); } - this.footer = { + this.setFooter({ text: i18n`From @${tweet.author.handle}`, icon_url: 'https://i.imgur.com/CwIRKhh.png', - }; + }); - this.author = { + this.setAuthor({ name: tweet.author.handle, icon_url: tweet.author.avatar, url: tweet.author.url, - }; + }); } } diff --git a/src/embeds/TwitchEmbed.js b/src/embeds/TwitchEmbed.js index 478d3ec07..3ff22528d 100644 --- a/src/embeds/TwitchEmbed.js +++ b/src/embeds/TwitchEmbed.js @@ -3,32 +3,28 @@ import BaseEmbed from './BaseEmbed.js'; export default class TwitchEmbed extends BaseEmbed { constructor(streamData, { i18n, locale }) { super(locale); - this.title = streamData.title; - this.url = `https://www.twitch.tv/${streamData.user_login}`; + this.setTitle(streamData.title); + this.setURL(`https://www.twitch.tv/${streamData.user_login}`); - this.image = { - url: `${streamData.thumbnail_url.replace('{width}', '1280').replace('{height}', '720')}?${Date.now()}`, - }; + this.setImage(`${streamData.thumbnail_url.replace('{width}', '1280').replace('{height}', '720')}?${Date.now()}`); - this.color = 6570405; - this.footer = { + this.setColor(6570405); + this.setFooter({ text: i18n`Live @`, icon_url: 'https://i.imgur.com/urcKWLO.png', - }; + }); if (streamData.user) { - this.author = { + this.setAuthor({ name: streamData.user.display_name, icon_url: streamData.user.profile_image_url, - }; + }); - this.description = streamData.user.description; + this.setDescription(streamData.user.description); } if (streamData.game) { - this.thumbnail = { - url: streamData.game.box_art_url.replace('{width}', '288').replace('{height}', '384'), - }; + this.setThumbnail(streamData.game.box_art_url.replace('{width}', '288').replace('{height}', '384')); } } } diff --git a/src/embeds/VoidTraderEmbed.js b/src/embeds/VoidTraderEmbed.js index 1ccac0aa2..7996a28c8 100644 --- a/src/embeds/VoidTraderEmbed.js +++ b/src/embeds/VoidTraderEmbed.js @@ -10,28 +10,30 @@ export default class VoidTraderEmbed extends BaseEmbed { constructor(voidTrader, { platform, onDemand, i18n, locale }) { super(locale); - this.color = voidTrader?.active ? 0x0ec9ff : 0xff6961; + this.setColor(voidTrader?.active ? 0x0ec9ff : 0xff6961); if (voidTrader?.active && voidTrader?.inventory?.length > 0) { - this.fields = voidTrader?.inventory.map((i) => { - const d = `${n(i.ducats).format('0a')}${onDemand ? emojify('ducats') : 'ducats'}`; - const cr = `${n(i.credits).format('0a')}${onDemand ? emojify('credits') : '*cr*'}`; - return { - name: i.item, - value: `${d} + ${cr}`, - inline: true, - }; - }); + this.setFields( + voidTrader?.inventory.map((i) => { + const d = `${n(i.ducats).format('0a')}${onDemand ? emojify('ducats') : 'ducats'}`; + const cr = `${n(i.credits).format('0a')}${onDemand ? emojify('credits') : '*cr*'}`; + return { + name: i.item, + value: `${d} + ${cr}`, + inline: true, + }; + }) + ); } else { - this.fields = []; + this.setFields([]); } - this.fields.push({ - name: i18n`Time until ${voidTrader.active ? i18n`departure from` : i18n`arrival at`} ${voidTrader.location}`, - value: `${voidTrader?.active ? voidTrader.endString : voidTrader.startString}` || i18n`Data Pending`, - }); - this.title = i18n`[${platform.toUpperCase()}] Worldstate - Void Trader`; - this.thumbnail = { - url: baroThumb, - }; + this.addFields([ + { + name: i18n`Time until ${voidTrader.active ? i18n`departure from` : i18n`arrival at`} ${voidTrader.location}`, + value: `${voidTrader?.active ? voidTrader.endString : voidTrader.startString}` || i18n`Data Pending`, + }, + ]); + this.setTitle(i18n`[${platform.toUpperCase()}] Worldstate - Void Trader`); + this.setThumbnail(baroThumb); } } diff --git a/src/embeds/WeaponEmbed.js b/src/embeds/WeaponEmbed.js index 7d94ef2cf..230889443 100644 --- a/src/embeds/WeaponEmbed.js +++ b/src/embeds/WeaponEmbed.js @@ -25,18 +25,14 @@ export default class WeaponEmbed extends BaseEmbed { constructor(weapon, { i18n, locale }) { super(locale); if (weapon && typeof weapon !== 'undefined') { - this.title = weapon.name; - this.url = weapon.wikiaUrl || ''; - this.thumbnail = { url: weapon.wikiaThumbnail || '' }; - this.description = `${weapon.type} • ${weapon.masteryReq} ${emojify('mastery_rank')}`; - this.color = weapon.color || 0x7c0a02; - this.fields = []; + this.setTitle(weapon.name); + this.setURL(weapon.wikiaUrl || ''); + this.setThumbnail(weapon.wikiaThumbnail || ''); + this.setDescription(`${weapon.type} • ${weapon.masteryReq} ${emojify('mastery_rank')}`); + this.setColor(weapon.color || 0x7c0a02); + this.setFields([]); - if (weapon.color) { - this.color = weapon.color; - } - - this.fields.push( + this.addFields([ { name: i18n`Rate`, value: `${String((weapon.fireRate || 0).toFixed(0) || '-')} unit\\s`, @@ -70,14 +66,16 @@ export default class WeaponEmbed extends BaseEmbed { name: i18n`Polarities`, value: emojify(weapon.polarities && weapon.polarities.length ? weapon.polarities.join(' ') : '-'), inline: true, - } - ); + }, + ]); if (weapon.stancePolarity) { - this.fields.push({ - name: i18n`Stance Polarity`, - value: emojify(weapon.stancePolarity || '-'), - inline: true, - }); + this.addFields([ + { + name: i18n`Stance Polarity`, + value: emojify(weapon.stancePolarity || '-'), + inline: true, + }, + ]); } if (weapon.secondary) { @@ -125,82 +123,102 @@ export default class WeaponEmbed extends BaseEmbed { values.push(i18n`**Status Chance:** ${((weapon.secondary.status_chance || 0) * 100).toFixed(2) || '-'}%`); } - this.fields.push({ - name: weapon.secondary.name || i18n`Secondary Fire`, - value: values.join('\n') || '--', - inline: true, - }); + this.addFields([ + { + name: weapon.secondary.name || i18n`Secondary Fire`, + value: values.join('\n') || '--', + inline: true, + }, + ]); } if (weapon.noise) { - this.fields.push({ - name: i18n`Noise Level`, - value: String(weapon.noise), - inline: true, - }); + this.addFields([ + { + name: i18n`Noise Level`, + value: String(weapon.noise), + inline: true, + }, + ]); } if (weapon.projectile) { - this.fields.push({ - name: i18n`Projectile`, - value: String(weapon.projectile), - inline: true, - }); + this.addFields([ + { + name: i18n`Projectile`, + value: String(weapon.projectile), + inline: true, + }, + ]); } if (weapon.trigger) { - this.fields.push({ - name: i18n`Trigger Type`, - value: weapon.trigger, - inline: true, - }); + this.addFields([ + { + name: i18n`Trigger Type`, + value: weapon.trigger, + inline: true, + }, + ]); } if (weapon.flight) { - this.fields.push({ - name: i18n`Flight Speed`, - value: `${weapon.flight || '0'}m\\s`, - inline: true, - }); + this.addFields([ + { + name: i18n`Flight Speed`, + value: `${weapon.flight || '0'}m\\s`, + inline: true, + }, + ]); } if (weapon.magazineSize) { - this.fields.push({ - name: i18n`Magazine Size`, - value: String(weapon.magazineSize), - inline: true, - }); + this.addFields([ + { + name: i18n`Magazine Size`, + value: String(weapon.magazineSize), + inline: true, + }, + ]); } if (weapon.ammo) { - this.fields.push({ - name: i18n`Ammo Max`, - value: String(weapon.ammo), - inline: true, - }); + this.addFields([ + { + name: i18n`Ammo Max`, + value: String(weapon.ammo), + inline: true, + }, + ]); } if (weapon.accuracy) { - this.fields.push({ - name: i18n`Accuracy`, - value: String(weapon.accuracy), - inline: true, - }); + this.addFields([ + { + name: i18n`Accuracy`, + value: String(weapon.accuracy), + inline: true, + }, + ]); } if (weapon.reload) { - this.fields.push({ - name: i18n`Reload Speed`, - value: `${(weapon.reloadTime || 0).toFixed(1) || '-'}s`, - inline: true, - }); + this.addFields([ + { + name: i18n`Reload Speed`, + value: `${(weapon.reloadTime || 0).toFixed(1) || '-'}s`, + inline: true, + }, + ]); } if (weapon.disposition) { - this.fields.push({ - name: i18n`Riven Disposition`, - value: `${dispositions[weapon.disposition]} (${Number(weapon.omegaAttenuation).toFixed(2)})`, - inline: true, - }); + this.addFields([ + { + name: i18n`Riven Disposition`, + value: `${dispositions[weapon.disposition]} (${Number(weapon.omegaAttenuation).toFixed(2)})`, + inline: true, + }, + ]); } } else { - this.title = i18n`Invalid Query`; - this.color = 0xff6961; - this.footer = undefined; + this.setTitle(i18n`Invalid Query`); + this.setColor(0xff6961); + this.data.footer = undefined; } } } diff --git a/src/embeds/WhatsinEmbed.js b/src/embeds/WhatsinEmbed.js index 7fe3b33ef..5f6beae9d 100644 --- a/src/embeds/WhatsinEmbed.js +++ b/src/embeds/WhatsinEmbed.js @@ -39,8 +39,8 @@ export default class WhatsinEmbed extends BaseEmbed { tokens.push(`${rewardName.padEnd(longest.length + 1, '\u2003')} ${qualities.join('/')}%`); }); - this.title = `${tier} ${type}`; - this.color = 0x3498db; - this.description = tokens.map((token) => `\`${token}\``).join('\n'); + this.setTitle(`${tier} ${type}`); + this.setColor(0x3498db); + this.setDescription(tokens.map((token) => `\`${token}\``).join('\n')); } } diff --git a/src/embeds/WhereisEmbed.js b/src/embeds/WhereisEmbed.js index 91991be77..9555660c5 100644 --- a/src/embeds/WhereisEmbed.js +++ b/src/embeds/WhereisEmbed.js @@ -21,13 +21,13 @@ export default class WhereisEmbed extends BaseEmbed { const value = mappedResults.join('\n'); if (index > 0) { - this.fields.push({ name: '\u200B', value }); + this.addFields([{ name: '\u200B', value }]); } else { - this.description = value; + this.setDescription(value); } }); - this.title = `${query}`; - this.color = 0x3498db; + this.setTitle(`${query}`); + this.setColor(0x3498db); } } diff --git a/src/eventHandlers/AddChannelToDatabase.js b/src/eventHandlers/AddChannelToDatabase.js index 2baa166da..79d166cd8 100644 --- a/src/eventHandlers/AddChannelToDatabase.js +++ b/src/eventHandlers/AddChannelToDatabase.js @@ -1,29 +1,27 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ export default class AddChannelToDatabase extends Handler { constructor(bot) { - super(bot, 'handlers.addChannel', Events.CHANNEL_CREATE); + super(bot, 'handlers.addChannel', Events.ChannelCreate); } // eslint-disable-next-line valid-jsdoc /** * add the guild to the Database - * @param {Discord.Channel} channel channel to add to the database + * @param {Discord.channel} channel channel to add to the database */ async execute(...[channel]) { this.logger.debug(`Running ${this.id} for ${this.event}`); - if (channel.type === 'GUILD_VOICE') { + if (channel.type === ChannelType.GuildVoice) { return; } - if (channel.type === 'GUILD_TEXT') { + if (channel.type === ChannelType.GuildText) { try { await this.settings.addGuildTextChannel(channel); this.logger.debug( @@ -34,7 +32,7 @@ export default class AddChannelToDatabase extends Handler { await this.settings.addGuild(channel.guild); this.settings.addGuildTextChannel(channel); } - } else if (channel.type === 'GUILD_PUBLIC_THREAD' || channel.type === 'GUILD_PRIVATE_THREAD') { + } else if (channel.type === ChannelType.PublicThread || channel.type === ChannelType.PrivateThread) { if (channel.parentId) { await this.settings.addGuildTextChannel({ id: channel.parentId, guild: { id: channel.guild.id } }); } diff --git a/src/eventHandlers/AddGuildToDatabase.js b/src/eventHandlers/AddGuildToDatabase.js index 799069485..c693a24da 100644 --- a/src/eventHandlers/AddGuildToDatabase.js +++ b/src/eventHandlers/AddGuildToDatabase.js @@ -1,9 +1,7 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -13,7 +11,7 @@ export default class AddGuildToDatabase extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.addGuild', Events.GUILD_CREATE); + super(bot, 'handlers.addGuild', Events.GuildCreate); this.channelTimeout = 60000; } @@ -28,6 +26,6 @@ export default class AddGuildToDatabase extends Handler { return; } await this.settings.addGuild([guild]); - this.logger.debug(`Joined guild ${guild} (${guild.id}`); + this.logger.debug(`Joined guild ${guild} (${guild.id})`); } } diff --git a/src/eventHandlers/AssignDefaultRoles.js b/src/eventHandlers/AssignDefaultRoles.js index f02e46439..191467043 100644 --- a/src/eventHandlers/AssignDefaultRoles.js +++ b/src/eventHandlers/AssignDefaultRoles.js @@ -1,10 +1,8 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -14,12 +12,12 @@ export default class AssignDefaultRolesHandle extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.assignDefaultRoles', Events.GUILD_MEMBER_ADD); + super(bot, 'handlers.assignDefaultRoles', Events.GuildMemberAdd); } /** * add the guild to teh Database - * @param {Discord.Member} member member to add roles to + * @param {Discord.GuildMember} member member to add roles to */ async execute(...[member]) { if (!games.includes('UTIL')) return; diff --git a/src/eventHandlers/BulkMessageDeleteHandle.js b/src/eventHandlers/BulkMessageDeleteHandle.js index a5aaa1b3f..9ae2c221b 100644 --- a/src/eventHandlers/BulkMessageDeleteHandle.js +++ b/src/eventHandlers/BulkMessageDeleteHandle.js @@ -1,12 +1,10 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import LogEmbed from '../embeds/LogEmbed.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default import { games } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -16,7 +14,7 @@ export default class LogMessageDelete extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.logMessageDeleteBulk', Events.MESSAGE_DELETE_BULK); + super(bot, 'handlers.logMessageDeleteBulk', Events.MessageBulkDelete); } /** @@ -34,7 +32,7 @@ export default class LogMessageDelete extends Handler { } else { channel = undefined; } - if (channel?.type === 'text') { + if (channel?.type === ChannelType.GuildText) { const log = new LogEmbed(this.bot, { color: 0xff5a36, title: 'Message Deleted', diff --git a/src/eventHandlers/DeleteChannel.js b/src/eventHandlers/DeleteChannel.js index c33c0f5ad..f7d876a5a 100644 --- a/src/eventHandlers/DeleteChannel.js +++ b/src/eventHandlers/DeleteChannel.js @@ -1,9 +1,7 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -13,7 +11,7 @@ export default class DeleteChannel extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.deleteChannel', Events.CHANNEL_DELETE); + super(bot, 'handlers.deleteChannel', Events.ChannelDelete); } /** @@ -23,7 +21,7 @@ export default class DeleteChannel extends Handler { async execute(...[channel]) { this.logger.debug(`Running ${this.id} for ${this.event}`); - if (channel.type === 'GUILD_VOICE') { + if (channel.type === ChannelType.GuildVoice) { return; } await this.settings.deleteChannel(channel); diff --git a/src/eventHandlers/DeleteGuild.js b/src/eventHandlers/DeleteGuild.js index 051e195c4..a875ec0c4 100644 --- a/src/eventHandlers/DeleteGuild.js +++ b/src/eventHandlers/DeleteGuild.js @@ -1,9 +1,7 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -13,7 +11,7 @@ export default class DeleteGuild extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.deleteGuild', Events.GUILD_DELETE); + super(bot, 'handlers.deleteGuild', Events.GuildDelete); } /** diff --git a/src/eventHandlers/DynamicVoiceHandler.js b/src/eventHandlers/DynamicVoiceHandler.js index a45f2f6b2..2dffda86f 100644 --- a/src/eventHandlers/DynamicVoiceHandler.js +++ b/src/eventHandlers/DynamicVoiceHandler.js @@ -1,11 +1,7 @@ -import Discord from 'discord.js'; +import { Events, PermissionsBitField } from 'discord.js'; import Generator from 'warframe-name-generator'; -const { - Constants: { Events }, - Permissions, -} = Discord; -const requiredVCPerms = [Permissions.FLAGS.MANAGE_CHANNELS, Permissions.FLAGS.MOVE_MEMBERS]; +const requiredVCPerms = [PermissionsBitField.Flags.ManageChannels, PermissionsBitField.Flags.MoveMembers]; const relays = [ 'Larunda Relay', 'Vesper Relay', @@ -82,14 +78,14 @@ export default class DynamicVoiceHandler { /** @type Database */ this.settings = settings; - client.on(Events.VOICE_STATE_UPDATE, async (oldMember, newMember) => { + client.on(Events.VoiceStateUpdate, async (oldMember, newMember) => { const applicable = await this.checkManagementApplicable(oldMember, newMember); if (applicable) { await this.checkAllChannels(oldMember.guild, newMember.member); } }); - client.on(Events.CHANNEL_DELETE, async (channel) => { + client.on(Events.ChannelDelete, async (channel) => { await this.removeChannel(channel); }); diff --git a/src/eventHandlers/InteractionHandler.js b/src/eventHandlers/InteractionHandler.js index c7405f36f..2119b3937 100644 --- a/src/eventHandlers/InteractionHandler.js +++ b/src/eventHandlers/InteractionHandler.js @@ -3,7 +3,7 @@ import path from 'node:path'; import I18n from 'i18n-string-templates'; import decache from 'decache'; -import Discord from 'discord.js'; +import { CommandInteraction, Events, PermissionsBitField, ApplicationCommandOptionType } from 'discord.js'; import Interaction from '../models/Interaction.js'; import WorldStateClient from '../utilities/WorldStateClient.js'; @@ -12,11 +12,6 @@ import BaseHandler from '../models/BaseEventHandler.js'; import logger from '../utilities/Logger.js'; import { i18n, locales } from '../resources/index.js'; -const { CommandInteraction } = Discord; -const { - Permissions: { FLAGS: Permissions }, - Constants: { Events }, -} = Discord; const whitelistedGuilds = []; // (process.env.WHITELISTED_GUILDS || '').split(','); const ws = new WorldStateClient(logger); @@ -56,7 +51,7 @@ export default class InteractionHandler extends BaseHandler { * @param {boolean} skipInit Whether to skip initialization */ constructor(bot, skipInit) { - super(bot, 'handlers.interactions', Events.INTERACTION_CREATE); + super(bot, 'handlers.interactions', Events.InteractionCreate); this.#loadedCommands = []; this.#customCommands = []; this.ready = false; @@ -120,10 +115,10 @@ export default class InteractionHandler extends BaseHandler { rolesOverride || guild.roles.cache.every((role) => role.permissions.has([ - Permissions.MANAGE_GUILD, - Permissions.ADMINISTRATOR, - Permissions.MANAGE_CHANNELS, - Permissions.MANAGE_ROLES, + PermissionsBitField.Flags.ManageGuild, + PermissionsBitField.Flags.Administrator, + PermissionsBitField.Flags.ManageChannels, + PermissionsBitField.Flags.ManageRoles, ]) ); const roles = (rolesOverride || (await this.settings.getGuildSetting(guild, 'elevatedRoles')) || '') @@ -142,18 +137,18 @@ export default class InteractionHandler extends BaseHandler { permissions: [ { id: guild.roles.everyone.id, - type: 'ROLE', + type: ApplicationCommandOptionType.Role, permission: false, }, { id: owner, - type: 'USER', + type: ApplicationCommandOptionType.User, permission: true, }, ...(roles?.length ? roles.map((id) => ({ id, - type: 'ROLE', + type: ApplicationCommandOptionType.Role, permission: true, })) : []), @@ -167,7 +162,7 @@ export default class InteractionHandler extends BaseHandler { permissions: [ { id: this.client.application.owner.id, - type: 'USER', + type: ApplicationCommandOptionType.User, permission: true, }, ], @@ -179,7 +174,7 @@ export default class InteractionHandler extends BaseHandler { permissions: [ { id: member.id, - type: 'USER', + type: ApplicationCommandOptionType.User, permission: true, }, ], @@ -253,7 +248,7 @@ export default class InteractionHandler extends BaseHandler { async loadCustomCommands(guildId) { const rawCustomCommands = await this.settings.getRawCustomCommands(guildId); if (guildId) this.#customCommands = this.#customCommands.filter((cc) => cc.guildId !== guildId); - const added = rawCustomCommands.map((raw) => CustomInteraction(raw)); + const added = rawCustomCommands?.map((raw) => CustomInteraction(raw)) ?? []; this.#customCommands.push(...added); if (guildId) { const guild = await this.client.guilds.fetch(guildId); @@ -322,7 +317,7 @@ export default class InteractionHandler extends BaseHandler { ); const noAccess = - (match?.elevated && !interaction.member.permissions.has(Permissions.MANAGE_GUILD, false)) || + (match?.elevated && !interaction.member.permissions.has(PermissionsBitField.Flags.ManageGuild, false)) || (match?.ownerOnly && interaction.user.id !== this.bot.owner); if (noAccess) { diff --git a/src/eventHandlers/JoinNotify.js b/src/eventHandlers/JoinNotify.js index 0b1de7590..05a46498d 100644 --- a/src/eventHandlers/JoinNotify.js +++ b/src/eventHandlers/JoinNotify.js @@ -1,17 +1,15 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - export default class JoinNotify extends Handler { /** * Base class for bot commands * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.server.join', Events.GUILD_CREATE); + super(bot, 'handlers.server.join', Events.GuildCreate); } /** diff --git a/src/eventHandlers/LeaveNotify.js b/src/eventHandlers/LeaveNotify.js index 0279ee0de..a25f5e9f8 100644 --- a/src/eventHandlers/LeaveNotify.js +++ b/src/eventHandlers/LeaveNotify.js @@ -1,17 +1,15 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - export default class LeaveNotify extends Handler { /** * Base class for bot commands * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.server.leave', Events.GUILD_DELETE); + super(bot, 'handlers.server.leave', Events.GuildDelete); } /** diff --git a/src/eventHandlers/LogMemberBan.js b/src/eventHandlers/LogMemberBan.js index c74d91991..16230f39a 100644 --- a/src/eventHandlers/LogMemberBan.js +++ b/src/eventHandlers/LogMemberBan.js @@ -1,12 +1,10 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import LogEmbed from '../embeds/LogEmbed.js'; import { games } from '../utilities/CommonFunctions.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -16,7 +14,7 @@ export default class LogMemberBan extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.logBanAdd', Events.GUILD_BAN_ADD); + super(bot, 'handlers.logBanAdd', Events.GuildBanAdd); } /** @@ -32,7 +30,7 @@ export default class LogMemberBan extends Handler { } else { logChannel = undefined; } - if (logChannel && logChannel.type === 'GUILD_TEXT') { + if (logChannel && logChannel.type === ChannelType.GuildText) { const log = new LogEmbed(this.bot, { color: 0xcc0000, title: 'Member Banned', diff --git a/src/eventHandlers/LogMemberRemove.js b/src/eventHandlers/LogMemberRemove.js index 16b5343b1..afac76ca3 100644 --- a/src/eventHandlers/LogMemberRemove.js +++ b/src/eventHandlers/LogMemberRemove.js @@ -1,12 +1,10 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import LogEmbed from '../embeds/LogEmbed.js'; import { games } from '../utilities/CommonFunctions.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -16,7 +14,7 @@ export default class LogMemberRemove extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.logMemberRemove', Events.GUILD_MEMBER_REMOVE); + super(bot, 'handlers.logMemberRemove', Events.GuildMemberRemove); } /** @@ -32,7 +30,7 @@ export default class LogMemberRemove extends Handler { } else { logChannel = undefined; } - if (logChannel && logChannel.type === 'GUILD_TEXT') { + if (logChannel && logChannel.type === ChannelType.GuildText) { const log = new LogEmbed(this.bot, { color: 0xffa500, title: 'Member Left/Kicked', diff --git a/src/eventHandlers/LogMemberUnban.js b/src/eventHandlers/LogMemberUnban.js index 37e2d991a..152026163 100644 --- a/src/eventHandlers/LogMemberUnban.js +++ b/src/eventHandlers/LogMemberUnban.js @@ -1,12 +1,10 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import LogEmbed from '../embeds/LogEmbed.js'; import { games } from '../utilities/CommonFunctions.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -16,7 +14,7 @@ export default class LogMemberUnban extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.logBanRemove', Events.GUILD_BAN_REMOVE); + super(bot, 'handlers.logBanRemove', Events.GuildBanRemove); } /** @@ -33,7 +31,7 @@ export default class LogMemberUnban extends Handler { } else { logChannel = undefined; } - if (logChannel && logChannel.type === 'GUILD_TEXT') { + if (logChannel && logChannel.type === ChannelType.GuildText) { const log = new LogEmbed(this.bot, { color: 0x009900, title: 'Member Unbanned', diff --git a/src/eventHandlers/MessageDeleteHandle.js b/src/eventHandlers/MessageDeleteHandle.js index d1f671c79..9528bcdf3 100644 --- a/src/eventHandlers/MessageDeleteHandle.js +++ b/src/eventHandlers/MessageDeleteHandle.js @@ -1,18 +1,16 @@ -import Discord from 'discord.js'; +import { ChannelType, Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import LogEmbed from '../embeds/LogEmbed.js'; import { games } from '../utilities/CommonFunctions.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default -const { Events } = Discord.Constants; - /** * Describes a handler */ export default class LogMessageDelete extends Handler { constructor(bot) { - super(bot, 'handlers.logMessageDelete', Events.MESSAGE_DELETE); + super(bot, 'handlers.logMessageDelete', Events.MessageDelete); } /** @@ -29,7 +27,7 @@ export default class LogMessageDelete extends Handler { } else { logChannel = undefined; } - if (logChannel && logChannel.type === 'GUILD_TEXT') { + if (logChannel && logChannel.type === ChannelType.GuildText) { let msg; if (message.content.length > 1024) { msg = `${message.content.slice(1020, message.content.length)}...`; diff --git a/src/eventHandlers/NotifyOwnerJoin.js b/src/eventHandlers/NotifyOwnerJoin.js index 995212b12..9f4a10969 100644 --- a/src/eventHandlers/NotifyOwnerJoin.js +++ b/src/eventHandlers/NotifyOwnerJoin.js @@ -1,10 +1,8 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - /** * Describes a handler */ @@ -14,7 +12,7 @@ export default class NotifyOwnerJoin extends Handler { * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.notifyowner', Events.GUILD_CREATE); + super(bot, 'handlers.notifyowner', Events.GuildCreate); this.channelTimeout = 60000; } @@ -29,19 +27,22 @@ export default class NotifyOwnerJoin extends Handler { if (!guild.available) { return; } + + const owner = await guild.fetchOwner(); const bots = guild.members.cache.filter((member) => member.user.bot); const isOverLimit = (bots.size / guild.memberCount) * 100 >= 80; try { if (!isOverLimit) { const prefix = await this.settings.getChannelSetting(guild.channels.cache.first(), 'prefix'); - guild.owner.send( + + owner.send( `${this.client.user.username} has been added ` + `to ${guild.name} and is ready\n Type ` + `\`${prefix}help\` for help` ); } else { - guild.owner.send( + owner.send( `Your guild **${guild.name}** is over the bot-to-user ratio.\nGenesis will now leave.\nIf you want to keep using ${this.client.user.username} please invite more people or kick some bots.` ); guild.leave(); diff --git a/src/eventHandlers/NotifyVulgarName.js b/src/eventHandlers/NotifyVulgarName.js index 48343beb7..f7a56b729 100644 --- a/src/eventHandlers/NotifyVulgarName.js +++ b/src/eventHandlers/NotifyVulgarName.js @@ -1,18 +1,16 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games, isVulgarCheck } from '../utilities/CommonFunctions.js'; import webhook from '../utilities/Webhook.js'; // eslint-disable-line import/no-named-as-default -const { Events } = Discord.Constants; - export default class VulgarNameHandle extends Handler { /** * Base class for bot commands * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.vulgarCheck', Events.GUILD_MEMBER_ADD); + super(bot, 'handlers.vulgarCheck', Events.GuildMemberAdd); } /** diff --git a/src/eventHandlers/Ready.js b/src/eventHandlers/Ready.js index aee074aa0..e0f278937 100644 --- a/src/eventHandlers/Ready.js +++ b/src/eventHandlers/Ready.js @@ -1,14 +1,10 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import { fromNow, games, timeDeltaToMinutesString } from '../utilities/CommonFunctions.js'; import Handler from '../models/BaseEventHandler.js'; import DynamicVoiceHandler from './DynamicVoiceHandler.js'; -const { - Constants: { Events }, -} = Discord; - const max = { cetus: { day: 6000000, @@ -26,7 +22,7 @@ const startupTimeout = Number.parseInt(process.env.READY_FORCE || '3600000', 10) export default class OnReadyHandle extends Handler { constructor(bot) { - super(bot, 'handlers.onReady', Events.CLIENT_READY); + super(bot, 'handlers.onReady', Events.ClientReady); setTimeout(() => { this.logger.info(`[Cluster] Forcing readiness...`); this.execute.bind(this)(); diff --git a/src/eventHandlers/UpdateGuildStatistics.js b/src/eventHandlers/UpdateGuildStatistics.js index 0228fdbdf..8d5c93e86 100644 --- a/src/eventHandlers/UpdateGuildStatistics.js +++ b/src/eventHandlers/UpdateGuildStatistics.js @@ -1,13 +1,11 @@ -import Discord from 'discord.js'; +import { Events, PermissionsBitField } from 'discord.js'; import { games } from '../utilities/CommonFunctions.js'; import Handler from '../models/BaseEventHandler.js'; -const { Events } = Discord.Constants; - export default class UpdateGuildStatistics extends Handler { constructor(bot) { - super(bot, 'handlers.statsupdate', Events.GUILD_MEMBER_UPDATE); + super(bot, 'handlers.statsupdate', Events.GuildMemberUpdate); } async execute(...[, newMember]) { @@ -21,7 +19,11 @@ export default class UpdateGuildStatistics extends Handler { .filter((r) => Object.keys(mappedRoles).includes(r.id)) .each((role) => { const channel = guild.channels.cache.get(mappedRoles[role.id]); - if (channel.permissionsFor(this.bot.client.user).has(['MANAGE_CHANNELS', 'MANAGE_ROLES'])) { + if ( + channel + .permissionsFor(this.bot.client.user) + .has([PermissionsBitField.Flags.ManageChannels, PermissionsBitField.Flags.ManageRoles]) + ) { channel.setName(`${role.name} :: ${role.members.size}`); } else { this.logger.debug(`bot doesn't have permissions to update ${channel.id}`); diff --git a/src/eventHandlers/WelcomeHandler.js b/src/eventHandlers/WelcomeHandler.js index f51403ee7..091d23872 100644 --- a/src/eventHandlers/WelcomeHandler.js +++ b/src/eventHandlers/WelcomeHandler.js @@ -1,17 +1,15 @@ -import Discord from 'discord.js'; +import { Events } from 'discord.js'; import Handler from '../models/BaseEventHandler.js'; import { games, getRandomWelcome, isVulgarCheck } from '../utilities/CommonFunctions.js'; -const { Events } = Discord.Constants; - export default class WelcomeHandler extends Handler { /** * Base class for bot commands * @param {Genesis} bot The bot object */ constructor(bot) { - super(bot, 'handlers.welcome', Events.GUILD_MEMBER_ADD); + super(bot, 'handlers.welcome', Events.GuildMemberAdd); } /** diff --git a/src/interactions/channels/Rooms.js b/src/interactions/channels/Rooms.js index eb648fec7..1f52112e2 100644 --- a/src/interactions/channels/Rooms.js +++ b/src/interactions/channels/Rooms.js @@ -1,16 +1,10 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType, PermissionsBitField, EmbedBuilder, ChannelType } from 'discord.js'; import { games, isVulgarCheck } from '../../utilities/CommonFunctions.js'; import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; import logger from '../../utilities/Logger.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, - Permissions, - MessageEmbed, -} = Discord; - const GuildChannelOverwriteOptionsType = { ROLE: 0, MEMBER: 1, @@ -34,8 +28,8 @@ const makeOverwrites = (guild, options) => { const overwrites = []; if (options.isPublic) { const everyoneOverwrites = []; - everyoneOverwrites.push(Permissions.FLAGS.CONNECT); - if (!options.shown) everyoneOverwrites.push(Permissions.FLAGS.VIEW_CHANNEL); + everyoneOverwrites.push(PermissionsBitField.Flags.Connect); + if (!options.shown) everyoneOverwrites.push(PermissionsBitField.Flags.ViewChannel); overwrites.push({ id: guild.roles.everyone.id, deny: everyoneOverwrites, @@ -45,11 +39,11 @@ const makeOverwrites = (guild, options) => { overwrites.push({ id: user.id, allow: [ - Permissions.FLAGS.VIEW_CHANNEL, - Permissions.FLAGS.SEND_MESSAGES, - Permissions.FLAGS.CONNECT, - Permissions.FLAGS.SPEAK, - Permissions.FLAGS.USE_VAD, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.Speak, + PermissionsBitField.Flags.UseVAD, ], type: 'user', }); @@ -57,20 +51,20 @@ const makeOverwrites = (guild, options) => { } else { overwrites.push({ id: guild.roles.everyone.id, - allow: [Permissions.FLAGS.VIEW_CHANNEL, Permissions.FLAGS.CONNECT], + allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.Connect], }); } overwrites.push( { allow: [ - Permissions.FLAGS.VIEW_CHANNEL, - Permissions.FLAGS.SEND_MESSAGES, - Permissions.FLAGS.CONNECT, - Permissions.FLAGS.MUTE_MEMBERS, - Permissions.FLAGS.DEAFEN_MEMBERS, - Permissions.FLAGS.MOVE_MEMBERS, - Permissions.FLAGS.MANAGE_ROLES, - Permissions.FLAGS.MANAGE_CHANNELS, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.MuteMembers, + PermissionsBitField.Flags.DeafenMembers, + PermissionsBitField.Flags.MoveMembers, + PermissionsBitField.Flags.ManageRoles, + PermissionsBitField.Flags.ManageChannels, ], id: guild.me.id, type: 'user', @@ -78,12 +72,12 @@ const makeOverwrites = (guild, options) => { { id: options.author.id, allow: [ - Permissions.FLAGS.VIEW_CHANNEL, - Permissions.FLAGS.SEND_MESSAGES, - Permissions.FLAGS.CONNECT, - Permissions.FLAGS.SPEAK, - Permissions.FLAGS.USE_VAD, - Permissions.FLAGS.MANAGE_MESSAGES, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.Speak, + PermissionsBitField.Flags.UseVAD, + PermissionsBitField.Flags.ManageMessages, ], type: 'user', } @@ -92,14 +86,14 @@ const makeOverwrites = (guild, options) => { overwrites.push({ id: options?.modRole?.id, allow: [ - Permissions.FLAGS.VIEW_CHANNEL, - Permissions.FLAGS.SEND_MESSAGES, - Permissions.FLAGS.CONNECT, - Permissions.FLAGS.SPEAK, - Permissions.FLAGS.USE_VAD, - Permissions.FLAGS.MANAGE_MESSAGES, - Permissions.FLAGS.DEAFEN_MEMBERS, - Permissions.FLAGS.MOVE_MEMBERS, + PermissionsBitField.Flags.ViewChannel, + PermissionsBitField.Flags.SendMessages, + PermissionsBitField.Flags.Connect, + PermissionsBitField.Flags.Speak, + PermissionsBitField.Flags.UseVAD, + PermissionsBitField.Flags.ManageMessages, + PermissionsBitField.Flags.DeafenMembers, + PermissionsBitField.Flags.MoveMembers, ], type: 'role', }); @@ -131,7 +125,7 @@ const blockOverwrite = { * * @param {Guild} guild guild to create channel in * @param {RoomOption} options options provided by user to populate - * @returns {Promise} + * @returns {Promise} */ const create = async (guild, options) => { if (options.userHasRoom) { @@ -146,14 +140,14 @@ const create = async (guild, options) => { options.category || (await guild.channels.create(options.name, { name: options.name, - type: 'GUILD_CATEGORY', + type: ChannelType.GuildCategory, permissionOverwrites: overwrites, })); let textChannel = options.useText && !options.category ? await guild.channels.create(cleanedName, { name: cleanedName, - type: 'GUILD_TEXT', + type: ChannelType.GuildText, parent: category.id, permissionOverwrites: overwrites, }) @@ -163,7 +157,7 @@ const create = async (guild, options) => { } const voiceChannel = await guild.channels.create(options.name, { name: options.name, - type: 'GUILD_VOICE', + type: ChannelType.GuildVoice, parent: category, permissionOverwrites: overwrites, userLimit: typeof options.limit !== 'undefined' ? options.limit : undefined, @@ -177,7 +171,7 @@ const create = async (guild, options) => { options.author ); // send invites - if (voiceChannel.permissionsFor(guild.me).has(Permissions.FLAGS.CREATE_INSTANT_INVITE)) { + if (voiceChannel.permissionsFor(guild.me).has(PermissionsBitField.Flags.CreateInstantInvite)) { await Promise.all( options.invites.map(async (user) => { await user.createDM().then((dmChannel) => @@ -191,7 +185,7 @@ const create = async (guild, options) => { }) ); } - return new MessageEmbed({ + return new EmbedBuilder({ title: 'Channels created', fields: [ { @@ -229,73 +223,73 @@ export default class Rooms extends Interaction { options: [ { ...cmds['rooms.create'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'type', - type: Types.NUMBER, + type: ApplicationCommandOptionType.Number, description: 'What kind of room should this be?', required: true, choices: roomSizes, }, { name: 'locked', - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, description: 'Should this channel be locked on creation?', }, { name: 'text', - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, description: 'Should we make a text channel too?', }, { name: 'shown', - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, description: 'Should this channel be visible to everyone?', }, { name: 'name', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'What should the channel you create be called?', }, { name: 'invites', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Who do you want to have access', }, ], }, { ...cmds['rooms.destroy'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.hide'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.show'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.lock'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.unlock'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.lurkable'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['rooms.rename'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'name', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'What do you want to rename your room to?', required: true, }, @@ -303,11 +297,11 @@ export default class Rooms extends Interaction { }, { ...cmds['rooms.invite'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'who', - type: Types.USER, + type: ApplicationCommandOptionType.User, description: 'Who do you want to add to your channel?', required: true, }, @@ -315,11 +309,11 @@ export default class Rooms extends Interaction { }, { ...cmds['rooms.block'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'user', - type: Types.USER, + type: ApplicationCommandOptionType.User, description: 'Who do you want to block from your channel?', required: true, }, @@ -327,11 +321,11 @@ export default class Rooms extends Interaction { }, { ...cmds['rooms.resize'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'type', - type: Types.NUMBER, + type: ApplicationCommandOptionType.Number, description: 'What kind of room should this be?', required: true, choices: roomSizes, @@ -385,17 +379,17 @@ export default class Rooms extends Interaction { options.shown = typeof options.shown === 'undefined' ? ctx.defaultShown : options.shown; const { everyone } = interaction.guild.roles; - let show = options?.room?.voiceChannel?.permissionsFor(everyone).has(Permissions.FLAGS.VIEW_CHANNEL); - let connect = options?.room?.voiceChannel?.permissionsFor(everyone)?.has(Permissions.FLAGS.CONNECT); + let show = options?.room?.voiceChannel?.permissionsFor(everyone).has(PermissionsBitField.Flags.ViewChannel); + let connect = options?.room?.voiceChannel?.permissionsFor(everyone)?.has(PermissionsBitField.Flags.Connect); if ( options?.category && !options.category .permissionsFor(interaction.client.user.id) - .has([Permissions.FLAGS.MANAGE_CHANNELS, Permissions.FLAGS.MANAGE_GUILD]) + .has([PermissionsBitField.Flags.ManageChannels, PermissionsBitField.Flags.ManageGuild]) ) { - return interaction.reply({ content: 'Bot missing manage channels perms', ephemeral: ctx.ephemerate }); + return interaction.reply({ content: 'Bot missing manage channels perms', flags: ctx.flags }); } - await interaction.deferReply({ ephemeral: ctx.ephemerate }); + await interaction.deferReply({ flags: ctx.flags }); try { switch (subcommand) { case 'create': @@ -404,8 +398,8 @@ export default class Rooms extends Interaction { // eslint-disable-next-line no-case-declarations const msg = await create(interaction.guild, options); return typeof msg === 'string' - ? interaction.editReply({ content: msg, ephemeral: ctx.ephemerate }) - : interaction.editReply({ embeds: [msg], ephemeral: ctx.ephemerate }); + ? interaction.editReply({ content: msg, flags: ctx.flags }) + : interaction.editReply({ embeds: [msg], flags: ctx.flags }); case 'destroy': if (options.userHasRoom) { const { room } = options; @@ -415,9 +409,9 @@ export default class Rooms extends Interaction { await room.category.delete(); } await ctx.settings.deletePrivateRoom(room); - return interaction.editReply({ content: 'Private room deleted', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Private room deleted', flags: ctx.flags }); } - return interaction.editReply({ content: 'Nothing to destroy', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Nothing to destroy', flags: ctx.flags }); case 'hide': show = false; return this.#roomUpdate(options, connect, show, interaction, ctx); @@ -451,9 +445,9 @@ export default class Rooms extends Interaction { type: GuildChannelOverwriteOptionsType.MEMBER, }; await this.#assignRoomOverwrites(room, overwrite, audit); - return interaction.editReply({ content: 'Private room updated', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Private room updated', flags: ctx.flags }); } - return interaction.editReply({ content: 'Nothing to update', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Nothing to update', flags: ctx.flags }); case 'rename': if (options.userHasRoom && options.name) { if (options.room?.textChannel?.manageable) { @@ -468,15 +462,15 @@ export default class Rooms extends Interaction { if (options.room?.category) { await options.room.category.setName(options.name, `New name for ${options.room.category.name}.`); } - return interaction.editReply({ content: 'Done', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Done', flags: ctx.flags }); } - return interaction.editReply({ content: 'Nothing to rename', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Nothing to rename', flags: ctx.flags }); case 'resize': if (options.userHasRoom && typeof options.limit !== 'undefined' && options.room.voiceChannel.manageable) { await options.room.voiceChannel.setUserLimit(options.limit); - return interaction.editReply({ content: 'Voice channel resized', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Voice channel resized', flags: ctx.flags }); } - return interaction.editReply({ content: "Couldn't resize nothingness!", ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: "Couldn't resize nothingness!", flags: ctx.flags }); case 'invite': if (options.userHasRoom && options.invite) { const { room, invite } = options; @@ -485,7 +479,7 @@ export default class Rooms extends Interaction { type: GuildChannelOverwriteOptionsType.MEMBER, }; await this.#assignRoomOverwrites(room, invitedOverwrite, audit, invite); - return interaction.editReply({ content: `invited ${invite.tag}`, ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: `invited ${invite.tag}`, flags: ctx.flags }); } return interaction.editReply({ content: "Couldn't invite someone to nothingness!", @@ -499,7 +493,7 @@ export default class Rooms extends Interaction { type: GuildChannelOverwriteOptionsType.MEMBER, }; await this.#assignRoomOverwrites(room, blockOverwrite, audit, invite); - return interaction.editReply({ content: `blocked ${invite.tag}`, ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: `blocked ${invite.tag}`, flags: ctx.flags }); } return interaction.editReply({ content: "Couldn't invite someone to nothingness!", @@ -513,7 +507,7 @@ export default class Rooms extends Interaction { return interaction.editReply('unable to act. feature requires Administrator permission on bot. Thanks discord.'); } - return interaction.editReply({ content: ctx.i18n`naaah`, ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: ctx.i18n`naaah`, flags: ctx.flags }); } static async #roomUpdate(options, connect, show, interaction, ctx) { @@ -540,9 +534,9 @@ export default class Rooms extends Interaction { this.#logger.error(e); return interaction.editReply({ content: "Couldn't update permissions", ephemeral: true }); } - return interaction.editReply({ content: 'Private room updated', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Private room updated', flags: ctx.flags }); } - return interaction.editReply({ content: 'Nothing to update', ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'Nothing to update', flags: ctx.flags }); } /** diff --git a/src/interactions/channels/Templates.js b/src/interactions/channels/Templates.js index 22b40c6e6..3559b023f 100644 --- a/src/interactions/channels/Templates.js +++ b/src/interactions/channels/Templates.js @@ -1,17 +1,13 @@ -import Discord, { Permissions } from 'discord.js'; +import { ApplicationCommandOptionType, ChannelType, PermissionsBitField } from 'discord.js'; import BaseEmbed from '../../embeds/BaseEmbed.js'; import { games } from '../../utilities/CommonFunctions.js'; import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; - const tc = { ...cmds['templates.tc'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, required: true, }; @@ -19,37 +15,37 @@ export default class Templates extends Interaction { static enabled = games.includes('ROOMS'); static command = { ...cmds.templates, - defaultMemberPermissions: Permissions.FLAGS.MANAGE_GUILD, + defaultMemberPermissions: PermissionsBitField.Flags.ManageGuild, options: [ { ...cmds['templates.add'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [tc], }, { ...cmds['templates.delete'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [tc], }, { ...cmds['templates.list'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['templates.set'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ tc, { ...cmds['templates.fmt'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ], }, { ...cmds['templates.clear'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [tc], }, ], @@ -60,23 +56,23 @@ export default class Templates extends Interaction { const channel = interaction?.options?.getChannel?.('template_channel'); const template = interaction?.options?.getString('template'); - if (channel && channel.type !== 'GUILD_VOICE') { - return interaction.reply({ content: ctx.i18n`Template must be a voice channel`, ephemeral: ctx.ephemerate }); + if (channel && channel.type !== ChannelType.GuildVoice) { + return interaction.reply({ content: ctx.i18n`Template must be a voice channel`, flags: ctx.flags }); } switch (subcommand) { case 'add': if (await ctx.settings.isTemplate(channel)) { - return interaction.reply({ content: ctx.i18n`That is already a template`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`That is already a template`, flags: ctx.flags }); } await ctx.settings.addTemplate(channel, false); - return interaction.reply({ content: ctx.i18n`${channel} added as a template.`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`${channel} added as a template.`, flags: ctx.flags }); case 'delete': if (!(await ctx.settings.isTemplate(channel))) { - return interaction.reply({ content: ctx.i18n`That is not a template`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`That is not a template`, flags: ctx.flags }); } await ctx.settings.deleteTemplate(channel); - return interaction.reply({ content: ctx.i18n`${channel} removed as a template.`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`${channel} removed as a template.`, flags: ctx.flags }); case 'list': /* eslint-disable no-case-declarations */ const templateIds = await ctx.settings.getTemplates([interaction.guild]); @@ -104,21 +100,21 @@ export default class Templates extends Interaction { }) ) ).join('\n'); - return interaction.reply({ embeds: [embed], ephemeral: ctx.ephemerate }); + return interaction.reply({ embeds: [embed], flags: ctx.flags }); case 'clear': if (!(await ctx.settings.isTemplate(channel))) { - return interaction.reply({ content: ctx.i18n`That is not a template`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`That is not a template`, flags: ctx.flags }); } await ctx.settings.setDynTemplate(channel.id, undefined); - return interaction.reply({ content: ctx.i18n`${channel}'s name template cleared.`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`${channel}'s name template cleared.`, flags: ctx.flags }); case 'set': if (!(await ctx.settings.isTemplate(channel))) { - return interaction.reply({ content: ctx.i18n`That is not a template`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`That is not a template`, flags: ctx.flags }); } await ctx.settings.setDynTemplate(channel.id, template); return interaction.reply({ content: ctx.i18n`\`${template}\` set as ${channel}'s name template.`, - ephemeral: ctx.ephemerate, + flags: ctx.flags, }); default: break; diff --git a/src/interactions/core/About.js b/src/interactions/core/About.js index 43a28632a..6c1880877 100644 --- a/src/interactions/core/About.js +++ b/src/interactions/core/About.js @@ -1,3 +1,5 @@ +import { MessageFlags } from 'discord.js'; + import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; @@ -45,7 +47,7 @@ export default class About extends Interaction { }, }, ], - ephemeral: true, + flags: MessageFlags.Ephemeral, }); } } diff --git a/src/interactions/core/Ping.js b/src/interactions/core/Ping.js index 3c23c8b97..8894fb3f8 100644 --- a/src/interactions/core/Ping.js +++ b/src/interactions/core/Ping.js @@ -1,4 +1,4 @@ -import { MessageEmbed } from 'discord.js'; +import { EmbedBuilder, EmbedType, MessageFlags } from 'discord.js'; import ping from 'ping'; import { emojify, games, timeDeltaToString } from '../../utilities/CommonFunctions.js'; @@ -17,7 +17,7 @@ export default class Ping extends Interaction { if (!interaction.isCommand()) return undefined; const now = Date.now(); - await interaction.reply({ content: 'Testing Ping', ephemeral: true }); + await interaction.reply({ content: 'Testing Ping', flags: MessageFlags.Ephemeral }); const afterSend = Date.now(); const hosts = ['discordapp.com'] @@ -40,9 +40,9 @@ export default class Ping extends Interaction { name: 'Discord WS', value: `${emojify('green_tick')} ${interaction.client.ws.ping.toFixed(2)}ms`, }); - const updated = new MessageEmbed({ + const updated = new EmbedBuilder({ title: 'PONG', - type: 'rich', + type: EmbedType.Rich, fields: [ { name: ctx.i18n`Response time (shard ${interaction.inGuild() ? interaction.guild.shardId + 1 : 1})`, @@ -51,7 +51,7 @@ export default class Ping extends Interaction { ...results, ], footer: { - thumbnail_url: '\u200B', + icon_url: '\u200B', text: `Uptime: ${timeDeltaToString(interaction.client.uptime)}`, }, }); diff --git a/src/interactions/core/Settings.js b/src/interactions/core/Settings.js index 11f0e0500..a191890f4 100644 --- a/src/interactions/core/Settings.js +++ b/src/interactions/core/Settings.js @@ -1,4 +1,4 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType, EmbedBuilder, PermissionsBitField } from 'discord.js'; import logger from '../../utilities/Logger.js'; import Collectors from '../../utilities/Collectors.js'; @@ -16,12 +16,6 @@ import { import { cmds, localeMap, platformMap } from '../../resources/index.js'; import Interaction from '../../models/Interaction.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, - MessageEmbed, - Permissions, -} = Discord; - export default class Settings extends Interaction { static #negate = '✘'; static #affirm = '✓'; @@ -29,7 +23,7 @@ export default class Settings extends Interaction { static #xmark = emojify('red_tick'); static #empty = emojify('empty'); static #globalable = { - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, name: 'global', description: 'Should this value be set for every channel in the server?', }; @@ -47,55 +41,55 @@ export default class Settings extends Interaction { static #rooms = [ { ...cmds['settings.allow_rooms'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.allow_rooms.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, ], }, { ...cmds['settings.auto_locked'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.auto_locked.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, ], }, { ...cmds['settings.auto_text'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.auto_text.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, ], }, { ...cmds['settings.auto_shown'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.auto_shown.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, ], }, { ...cmds['settings.temp_category'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.temp_category.channel'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, required: true, }, ], @@ -104,11 +98,11 @@ export default class Settings extends Interaction { ...cmds['settings.temp_channel'], name: 'temp_channel', description: 'Set the channel for creating threads in for private rooms', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.temp_channel.channel'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, required: true, }, ], @@ -116,16 +110,16 @@ export default class Settings extends Interaction { ]; static #setLFG = { ...cmds['settings.lfg'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.lfg.channel'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, required: true, }, { ...cmds.platform, - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, choices: platformMap, }, @@ -134,11 +128,11 @@ export default class Settings extends Interaction { static #custom = [ { ...cmds['settings.allow_custom'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.allow_custom.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, Settings.#globalable, @@ -146,11 +140,11 @@ export default class Settings extends Interaction { }, { ...cmds['settings.allow_inline'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.allow_inline.bool'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: true, }, Settings.#globalable, @@ -160,11 +154,11 @@ export default class Settings extends Interaction { static #settingsCommands = [ { ...cmds['settings.language'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['settings.language.str'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: localeMap, required: true, }, @@ -172,11 +166,11 @@ export default class Settings extends Interaction { }, { ...cmds['settings.platform'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds.platform, - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: platformMap, required: true, }, @@ -184,10 +178,10 @@ export default class Settings extends Interaction { }, { ...cmds['settings.ephemerate'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, name: 'value', description: 'Make replies from interactions show in this channel?', required: true, @@ -233,7 +227,7 @@ export default class Settings extends Interaction { * @returns {Promise>} */ static async #gather(ctx, channel, thread) { - const page = new MessageEmbed(embedDefaults); + const page = new EmbedBuilder(embedDefaults); const settings = await ctx.settings.getChannelSettings(channel, [ 'language', 'platform', @@ -384,7 +378,7 @@ export default class Settings extends Interaction { const stats = await ctx.settings.getGuildStats(channel.guild); embeds.push( - new MessageEmbed({ + new EmbedBuilder({ title: ctx.i18n`Most Used Commands`, color: 0x444444, description: stats @@ -408,41 +402,41 @@ export default class Settings extends Interaction { static elevated = true; static command = { ...cmds.settings, - defaultMemberPermissions: Permissions.FLAGS.MANAGE_GUILD, + defaultMemberPermissions: PermissionsBitField.Flags.ManageGuild, options: [ { ...cmds['settings.set'], - type: Types.SUB_COMMAND_GROUP, + type: ApplicationCommandOptionType.SubcommandGroup, options: this.#settingsCommands, }, { ...cmds['settings.clear'], - type: Types.SUB_COMMAND_GROUP, + type: ApplicationCommandOptionType.SubcommandGroup, options: [ { name: 'pings', description: 'Clear tracking pings', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { name: 'temp_category', description: 'Clear temp category for private channels', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { name: 'all', description: 'Clear all settings on the bot for this server', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, ], }, { ...cmds['settings.get'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { ...cmds['settings.diag'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, ], }; @@ -452,17 +446,10 @@ export default class Settings extends Interaction { const { options } = interaction; const ephemeral = ctx.ephemerate; await interaction.deferReply(); - let action; - try { - action = options?.getSubcommandGroup(); - } catch (e) { - try { - action = options?.getSubcommand(); - } catch (ex) { - ctx.logger.error(ex); - return undefined; - } - } + let action = options.getSubcommandGroup(); + if (!action) action = options.getSubcommand(); + if (!action) return undefined; + let field = options.getSubcommand(); let value = (options?.get?.('value') || options?.get?.('channel') || options.get?.('platform'))?.value; const platform = options.get?.('platform')?.value; @@ -528,7 +515,7 @@ export default class Settings extends Interaction { const pages = await this.#gather(ctx, channel, thread); return Collectors.paged(interaction, pages, ctx); case 'diag': - const embed = new MessageEmbed(); + const embed = new EmbedBuilder(); embed.setTitle(`Diagnostics for Shard ${interaction.guild.shardId + 1}/${interaction.client.ws.shards.size}`); embed.addFields([ { @@ -545,9 +532,9 @@ export default class Settings extends Interaction { /** @type string[] */ const rolePermTokens = []; rolePermTokens.push( - `${perms.has(Permissions.FLAGS.MANAGE_ROLES) ? this.#check : this.#xmark} Permission Present` + `${perms.has(PermissionsBitField.Flags.ManageRoles) ? this.#check : this.#xmark} Permission Present` ); - rolePermTokens.push(`${this.#empty} Bot role position: ${interaction.guild.me.roles.highest.position}`); + rolePermTokens.push(`${this.#empty} Bot role position: ${interaction.guild.members.me.roles.highest.position}`); /** @type Discord.EmbedField[] */ const fields = chunkFields(rolePermTokens, 'Can Manage Roles', '\n'); @@ -556,7 +543,7 @@ export default class Settings extends Interaction { // Tracking const trackingReadinessTokens = [ `${ - perms.has(Permissions.FLAGS.MANAGE_WEBHOOKS) ? `${this.#check} Can` : `${this.#xmark} Cannot` + perms.has(PermissionsBitField.Flags.ManageWebhooks) ? `${this.#check} Can` : `${this.#xmark} Cannot` } Manage Webhooks`, ]; @@ -593,7 +580,7 @@ export default class Settings extends Interaction { embed.setTimestamp(new Date()); embed.setFooter({ text: `Uptime: ${timeDeltaToString(interaction.client.uptime)}` }); - return interaction.editReply({ embeds: [embed], ephemeral: ctx.ephemerate }); + return interaction.editReply({ embeds: [embed], flags: ctx.flags }); default: break; } diff --git a/src/interactions/core/su.js b/src/interactions/core/su.js index 1af140f1b..19e092277 100644 --- a/src/interactions/core/su.js +++ b/src/interactions/core/su.js @@ -1,4 +1,4 @@ -import Discord, { Permissions } from 'discord.js'; +import { ApplicationCommandOptionType, EmbedBuilder, PermissionsBitField } from 'discord.js'; import InteractionHandler from '../../eventHandlers/InteractionHandler.js'; import logger from '../../utilities/Logger.js'; @@ -6,11 +6,6 @@ import ServerInfoEmbed from '../../embeds/ServerInfoEmbed.js'; import Collectors from '../../utilities/Collectors.js'; import Interaction from '../../models/Interaction.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, - MessageEmbed, -} = Discord; - export default class Settings extends Interaction { static elevated = true; static ownerOnly = true; @@ -18,26 +13,26 @@ export default class Settings extends Interaction { name: 'su', description: 'Super User', ownerOnly: true, - defaultMemberPermissions: Permissions.FLAGS.ADMINISTRATOR, + defaultMemberPermissions: PermissionsBitField.Flags.Administrator, options: [ { name: 'restart', description: 'Restart Bot', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { name: 'reload', description: 'Reload Commands', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, { name: 'server', description: 'Get server info', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'server_id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Guild Id to look up', required: true, }, @@ -46,11 +41,11 @@ export default class Settings extends Interaction { { name: 'leave', description: 'Force bot to leave specified server', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'server_id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Guild Id to leave', required: true, }, @@ -59,11 +54,11 @@ export default class Settings extends Interaction { { name: 'stats', description: 'Get Stats for a given command across servers', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'command_id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Command identifier (derived by command:subcommandgroup:subcommand)', required: true, }, @@ -72,16 +67,16 @@ export default class Settings extends Interaction { { name: 'clear', description: 'Clear something from a channel', - type: Types.SUB_COMMAND_GROUP, + type: ApplicationCommandOptionType.SubcommandGroup, options: [ { name: 'webhook', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Clear a webhook in a channel', options: [ { name: 'channel', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Channel Id for the channel to clear of webhooks', required: true, }, @@ -129,7 +124,7 @@ export default class Settings extends Interaction { onConfirm = async () => interaction.editReply({ content: undefined, - embeds: [new MessageEmbed(new ServerInfoEmbed(undefined, guild))], + embeds: [new EmbedBuilder(new ServerInfoEmbed(undefined, guild))], components: [], }); onDeny = async () => @@ -150,10 +145,9 @@ export default class Settings extends Interaction { if (clear && interaction.client.channels.cache.get(interaction.options.getString('channel'))) { onConfirm = async () => { await ctx.settings.deleteWebhooksForChannel(interaction.options.getString('channel')); - return interaction.editReply({ content: 'buhleted', components: [], ephemeral: ctx.ephemerate }); + return interaction.editReply({ content: 'buhleted', components: [], flags: ctx.flags }); }; - onDeny = async () => - interaction.editReply({ content: 'canceled', components: [], ephemeral: ctx.ephemerate }); + onDeny = async () => interaction.editReply({ content: 'canceled', components: [], flags: ctx.flags }); return Collectors.confirmation(interaction, onConfirm, onDeny, ctx); } default: diff --git a/src/interactions/custom/CustomCommands.js b/src/interactions/custom/CustomCommands.js index ba3242fb4..f0ea1f0a8 100644 --- a/src/interactions/custom/CustomCommands.js +++ b/src/interactions/custom/CustomCommands.js @@ -1,14 +1,10 @@ -import Discord, { Permissions } from 'discord.js'; +import { PermissionsBitField, ApplicationCommandOptionType } from 'discord.js'; import { createGroupedArray } from '../../utilities/CommonFunctions.js'; import Collectors from '../../utilities/Collectors.js'; import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; - const nameReg = /^[\w-]{1,32}$/u; export default class CustomCommands extends Interaction { @@ -16,45 +12,45 @@ export default class CustomCommands extends Interaction { static command = { ...cmds.cc, - defaultMemberPermissions: Permissions.FLAGS.MANAGE_GUILD, + defaultMemberPermissions: PermissionsBitField.Flags.ManageGuild, options: [ { ...cmds['cc.add'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['cc.add.call'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, { ...cmds['cc.add.response'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ], }, { ...cmds['cc.remove'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['cc.remove.call'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ], }, { ...cmds['cc.list'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, }, ], }; static async commandHandler(interaction, ctx) { const { options } = interaction; - const ephemeral = ctx.ephemerate; + const { flags } = ctx; const action = options?.getSubcommand(false); const call = options.getString('call', false); const response = options.getString('response', false); @@ -64,11 +60,11 @@ export default class CustomCommands extends Interaction { if (nameReg.test(call) && !(await ctx.settings.getCustomCommandRaw(interaction.guild, call))) { await ctx.settings.addCustomCommand(interaction.guild, call, response, interaction.user.id); await ctx.handler.loadCustomCommands(interaction.guild.id); - return interaction.reply({ content: 'Added & reloaded guild commands', ephemeral }); + return interaction.reply({ content: 'Added & reloaded guild commands', flags }); } return interaction.reply({ content: 'Not possible, command name is either invalid, or another with the same name exists', - ephemeral, + flags, }); case 'remove': const onConfirm = async () => { @@ -94,7 +90,7 @@ export default class CustomCommands extends Interaction { fields: metaGroup, title: ctx.i18n`Custom Commands`, })); - return interaction.reply({ embeds, ephemeral }); + return interaction.reply({ embeds, flags }); } return undefined; } diff --git a/src/interactions/fun/8ball.js b/src/interactions/fun/8ball.js index de7e6bddc..25c366b1f 100644 --- a/src/interactions/fun/8ball.js +++ b/src/interactions/fun/8ball.js @@ -1,12 +1,8 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType } from 'discord.js'; import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; - const jokes = [ "Joke's on you. Try again next time", 'Lotus says it is certain', @@ -39,7 +35,7 @@ export default class EightBall extends Interaction { options: [ { ...cmds['8ball.question'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ], diff --git a/src/interactions/fun/Corgi.js b/src/interactions/fun/Corgi.js index c80104b30..679277d34 100644 --- a/src/interactions/fun/Corgi.js +++ b/src/interactions/fun/Corgi.js @@ -12,12 +12,7 @@ export default class Corgi extends Interaction { const corgi = await fetch('https://dog.ceo/api/breed/corgi/cardigan/images/random').then((d) => d.json()); if (corgi) { return interaction.reply({ - files: [ - { - attachment: corgi.message, - name: `corgi.${corgi.message.split('.').pop()}`, - }, - ], + files: [corgi.message], }); } return interaction.reply(ctx.i18n`couldn't find a corgi... :(`); diff --git a/src/interactions/fun/Hug.js b/src/interactions/fun/Hug.js index 352c89722..2912f48a6 100644 --- a/src/interactions/fun/Hug.js +++ b/src/interactions/fun/Hug.js @@ -9,6 +9,6 @@ export default class Hug extends Interaction { static command = cmds.hug; static async commandHandler(interaction, ctx) { - return interaction.reply({ content, ephemeral: ctx.ephemerate }); + return interaction.reply({ content, flags: ctx.flags }); } } diff --git a/src/interactions/fun/Joke.js b/src/interactions/fun/Joke.js index e4e56a770..911c3fe82 100644 --- a/src/interactions/fun/Joke.js +++ b/src/interactions/fun/Joke.js @@ -9,7 +9,7 @@ export default class Joke extends Interaction { static async commandHandler(interaction, ctx) { return interaction.reply({ content: `\`\`\`haskell\n${this.jokes[Math.floor(Math.random() * this.jokes.length)]}\n\`\`\``, - ephemeral: ctx.ephemerate, + flags: ctx.flags, }); } @@ -36,7 +36,7 @@ export default class Joke extends Interaction { "Wukong. WHY WON'T YOU FINISH?!", 'Nezha. Not to be confused with Hatsune Miku.', 'Ivara. Tugging on your hips with these dashwires.', - 'Opticor, Lanka, Snipetron, Punchthrough. Maximum penetration.', + 'Opticor, Qorvex, Snipetron, Punchthrough. Maximum penetration.', "Phage. Several strokes and your ultimate weapon's ready to go again.", "Braton. A first timer's best friend.", 'Vectis. Top quality wood.', diff --git a/src/interactions/tracking/Tracking.js b/src/interactions/tracking/Tracking.js index 427c8ee1a..aa6d76b21 100644 --- a/src/interactions/tracking/Tracking.js +++ b/src/interactions/tracking/Tracking.js @@ -1,4 +1,15 @@ -import Discord, { MessageButton, Permissions } from 'discord.js'; +import { + ApplicationCommandOptionType, + ActionRowBuilder, + StringSelectMenuBuilder, + InteractionCollector, + PermissionsBitField, + ButtonBuilder, + ButtonStyle, + ComponentType, + Utils, + ChannelType, +} from 'discord.js'; import Interaction from '../../models/Interaction.js'; import { @@ -11,13 +22,6 @@ import { } from '../../utilities/CommonFunctions.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types, InteractionTypes, MessageComponentTypes, MessageButtonStyles }, - MessageActionRow, - MessageSelectMenu, - InteractionCollector, -} = Discord; - /** * Generate tracking message strings * @param {TrackingOptions} track tracking options @@ -36,49 +40,49 @@ export default class Tracking extends Interaction { static elevated = true; static command = { ...cmds.tracking, - defaultMemberPermissions: Permissions.FLAGS.MANAGE_GUILD, + defaultMemberPermissions: PermissionsBitField.Flags.ManageGuild, options: [ { ...cmds['tracking.manage'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['tracking.manage.channel'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, }, { ...cmds['tracking.manage.thread'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, }, ], }, { ...cmds['tracking.custom'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [ { ...cmds['tracking.custom.add'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, }, { ...cmds['tracking.custom.remove'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, }, { ...cmds['tracking.custom.prepend'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, }, { ...cmds['tracking.custom.channel'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, }, { ...cmds['tracking.custom.clear-prepend'], - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, }, { ...cmds['tracking.custom.thread'], - type: Types.CHANNEL, + type: ApplicationCommandOptionType.Channel, }, ], }, @@ -86,16 +90,16 @@ export default class Tracking extends Interaction { }; static async commandHandler(interaction, ctx) { - await interaction?.deferReply({ ephemeral: false }); + await interaction?.deferReply(); const { options } = interaction; const action = options?.getSubcommand(); let channel; let thread; let isThread; if (options?.getChannel('channel')) { - if (options?.getChannel('channel').type !== 'GUILD_TEXT') { + if (options?.getChannel('channel').type !== ChannelType.GuildText) { return interaction.editReply({ - ephemeral: ctx.ephemerate, + flags: ctx.flags, content: `:warning: ${options.getChannel('channel')} is not a text channel. :warning:`, }); } @@ -110,13 +114,13 @@ export default class Tracking extends Interaction { thread = options.getChannel('thread'); if (thread.parent.id !== channel.id) { return interaction.editReply({ - ephemeral: ctx.ephemerate, + flags: ctx.flags, content: `:warning: ${thread} is not a thread in ${channel} :warning:`, }); } } else if (options.getChannel('thread')) { return interaction.editReply({ - ephemeral: ctx.ephemerate, + flags: ctx.flags, content: `:warning: ${options.getChannel('thread')} is not a thread channel :warning:`, }); } @@ -201,18 +205,18 @@ export default class Tracking extends Interaction { return [ // paginator chunks.length > 1 - ? new MessageActionRow({ + ? new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Previous', customId: 'previous', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, disabled: chunks.length < 1, }), - new MessageButton({ + new ButtonBuilder({ label: 'Next', customId: 'next', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, disabled: chunks.length < 1, }), ], @@ -220,9 +224,9 @@ export default class Tracking extends Interaction { : undefined, // group selection groups?.length - ? new MessageActionRow({ + ? new ActionRowBuilder({ components: [ - new MessageSelectMenu({ + new StringSelectMenuBuilder({ minValues: 0, maxValues: 1, customId: 'select_group', @@ -234,9 +238,9 @@ export default class Tracking extends Interaction { : undefined, // subgroup selection subgrouped.includes(currentGroup) - ? new MessageActionRow({ + ? new ActionRowBuilder({ components: [ - new MessageSelectMenu({ + new StringSelectMenuBuilder({ minValues: 0, maxValues: 1, customId: 'select_sub_group', @@ -248,9 +252,9 @@ export default class Tracking extends Interaction { : undefined, // discrete trackable selection groupOptions.length - ? new MessageActionRow({ + ? new ActionRowBuilder({ components: [ - new MessageSelectMenu({ + new StringSelectMenuBuilder({ maxValues: groupOptions.length, customId: 'select_trackables', placeholder: ctx.i18n`Select Trackables`, @@ -261,32 +265,32 @@ export default class Tracking extends Interaction { }) : undefined, // actions (save, all, reset, cancel, clear) - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Save', customId: 'save', - style: MessageButtonStyles.PRIMARY, + style: ButtonStyle.Primary, }), - new MessageButton({ + new ButtonBuilder({ label: 'All', customId: 'all', - style: MessageButtonStyles.PRIMARY, + style: ButtonStyle.Primary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Reset', customId: 'reset', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Cancel', customId: 'cancel', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Clear', customId: 'clear', - style: MessageButtonStyles.DANGER, + style: ButtonStyle.Danger, }), ], }), @@ -299,8 +303,8 @@ export default class Tracking extends Interaction { }); const groupCollector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.SELECT_MENU, + interactionType: interaction.MESSAGE_COMPONENT, + componentType: ComponentType.StringSelect, message, guild: interaction.guild, channel: interaction.channel, @@ -354,8 +358,8 @@ export default class Tracking extends Interaction { groupCollector.on('collect', groupSelectionHandler); const buttonCollector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.BUTTON, + interactionType: interaction.MESSAGE_COMPONENT, + componentType: ComponentType.Button, message, guild: interaction.guild, channel: interaction.channel, @@ -375,10 +379,10 @@ export default class Tracking extends Interaction { return message.edit({ content: chunks[page], components: [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ - style: MessageButtonStyles.SUCCESS, + new ButtonBuilder({ + style: ButtonStyle.Success, customId: 'success', label: 'Tracking Saved!', disabled: true, @@ -396,13 +400,13 @@ export default class Tracking extends Interaction { return message.edit({ content: chunks[page], components: [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Canceled', customId: 'done', disabled: true, - style: MessageButtonStyles.SUCCESS, + style: ButtonStyle.Success, }), ], }), @@ -478,7 +482,7 @@ export default class Tracking extends Interaction { buttonCollector.on('collect', buttonHandler); } if (action === 'custom') { - await interaction?.editReply({ content: 'Analyzing...', ephemeral: ctx.ephemerate }); + await interaction?.editReply({ content: 'Analyzing...', flags: ctx.flags }); const add = trackablesFromParameters( (options.getString('add') || '') .split(',') @@ -502,13 +506,13 @@ export default class Tracking extends Interaction { ); return interaction?.editReply?.({ content: ctx.i18n`Removed pings for ${remove.events.length + remove.items.length} trackables.`, - ephemeral: ctx.ephemerate, + flags: ctx.flags, }); } if (clear && !remove?.length) { return interaction?.editReply?.({ content: ctx.i18n`Specify trackables to remove the prepend for.`, - ephemeral: ctx.ephemerate, + flags: ctx.flags, }); } if (add?.events?.length) await ctx.settings.trackEventTypes(channel, add.events, thread); @@ -517,15 +521,15 @@ export default class Tracking extends Interaction { if (remove?.events?.length) await ctx.settings.untrackEventTypes(channel, remove.events, thread); if (remove?.items?.length && !clear) await ctx.settings.untrackItems(channel, remove.items, thread); const removeString = ctx.i18n`Removed ${remove?.events?.length} events, ${remove?.items?.length} items`; - await interaction.editReply({ content: `${addString}\n${removeString}`, ephemeral: ctx.ephemerate }); + await interaction.editReply({ content: `${addString}\n${removeString}`, flags: ctx.flags }); if (prepend && (add.items.length || add.events.length)) { await ctx.settings.addPings(interaction.guild, add, prepend); - const pingsString = ctx.i18n`Adding \`${Discord.Util.escapeMarkdown( - Discord.Util.removeMentions(prepend) + const pingsString = ctx.i18n`Adding \`${Utils.escapeMarkdown( + Utils.removeMentions(prepend) )}\` for ${add?.events?.length || 0} events, ${add?.items?.length || 0} items`; await interaction.editReply({ - ephemeral: ctx.ephemerate, + flags: ctx.flags, content: `${addString}\n${removeString}\n${pingsString}`, }); } @@ -542,7 +546,7 @@ export default class Tracking extends Interaction { */ static async #generateWebhook(interaction, ctx, channel, thread) { channel = channel || interaction.channel; - if (channel.permissionsFor(interaction.client.user).has('MANAGE_WEBHOOKS')) { + if (channel.permissionsFor(interaction.client.user).has(PermissionsBitField.Flags.ManageWebhooks)) { let webhook; let existingWebhooks; let setupMsg; @@ -573,7 +577,8 @@ export default class Tracking extends Interaction { } } else { try { - webhook = await channel.createWebhook(ctx.settings.defaults.username, { + webhook = await channel.createWebhook({ + name: ctx.settings.defaults.username, avatar: ctx.settings.defaults.avatar, reason: 'Automated Webhook setup for Notifications', }); diff --git a/src/interactions/warframe/Builds.js b/src/interactions/warframe/Builds.js index c3faabf6d..69049f45a 100644 --- a/src/interactions/warframe/Builds.js +++ b/src/interactions/warframe/Builds.js @@ -1,4 +1,14 @@ -import Discord from 'discord.js'; +import { + ActionRowBuilder, + StringSelectMenuBuilder, + InteractionCollector, + ButtonBuilder, + ApplicationCommandOptionType, + ComponentType, + ButtonStyle, + InteractionType, + EmbedBuilder, +} from 'discord.js'; import Build from '../../models/Build.js'; import BuildEmbed from '../../embeds/BuildEmbed.js'; @@ -8,14 +18,6 @@ import Collectors from '../../utilities/Collectors.js'; import Interaction from '../../models/Interaction.js'; import { createGroupedArray, games } from '../../utilities/CommonFunctions.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types, InteractionTypes, MessageComponentTypes, MessageButtonStyles }, - MessageActionRow, - MessageSelectMenu, - InteractionCollector, - MessageButton, -} = Discord; - const buildParts = [ { name: 'title', @@ -136,17 +138,17 @@ export default class Builds extends Interaction { options: [ { name: 'list', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Get all of my builds', }, { name: 'get', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Search builds or get a specific id.', options: [ { name: 'query', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Search string', required: true, }, @@ -154,30 +156,30 @@ export default class Builds extends Interaction { }, { name: 'add', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Add a new build', options: buildParts.map((bp) => ({ name: bp.name, - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: bp.description, choices: bp.choices, })), }, { name: 'update', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Update a build', options: [ { name: 'id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Build Identifier', required: true, }, ].concat( buildParts.map((bp) => ({ name: bp.name, - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: bp.description, choices: bp.choices, })) @@ -185,31 +187,31 @@ export default class Builds extends Interaction { }, { name: 'remove', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Remove a build', options: [ { name: 'id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Build Identifier', required: true, }, ].concat( buildParts.map((bp) => ({ name: bp.name, - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, description: bp.description, })) ), }, { name: 'mod', - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, description: 'Set Mods for a build', options: [ { name: 'id', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'Build Identifier', required: true, }, @@ -266,7 +268,7 @@ export default class Builds extends Interaction { } pages.push(prism); } else { - const operator = new Discord.MessageEmbed({ title: ctx.i18n`Operator`, description: focus }); + const operator = new EmbedBuilder({ title: ctx.i18n`Operator`, description: focus }); pages.push(operator); } } @@ -348,7 +350,7 @@ export default class Builds extends Interaction { }); return Collectors.dynamic(interaction, pages, ctx); } - return interaction.reply({ content: ctx.i18n`No builds found`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`No builds found`, flags: ctx.flags }); case 'update': case 'add': await interaction.deferReply({ ephemeral: true }); @@ -377,14 +379,14 @@ export default class Builds extends Interaction { }); if (!thereWasAPart) await ctx.settings.deleteBuild(id); else await ctx.settings.saveBuild(build); - return interaction.reply({ content: 'buhleted', ephemeral: ctx.ephemerate }); + return interaction.reply({ content: 'buhleted', flags: ctx.flags }); } break; case 'mod': if (!build) { return interaction.reply(ctx.i18n`Can't add mods when you haven't got a build.`); } - await interaction.deferReply({ ephemeral: ctx.ephemerate }); + await interaction.deferReply({ flags: ctx.flags }); const populatedKeys = Object.keys(build.toJson()) .filter((p) => !unmodable.includes(p)) .filter((k) => build.toJson()[k]); @@ -416,9 +418,9 @@ export default class Builds extends Interaction { .join('\n') || ctx.i18n`No Mods`; const selectPartRow = () => - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageSelectMenu({ + new StringSelectMenuBuilder({ minValues: 0, maxValues: 1, customId: 'select_part', @@ -435,31 +437,31 @@ export default class Builds extends Interaction { }); const availableMods = () => (current ? createGroupedArray(ctx.ws.modsByType(current.compat), 25) : undefined); let modPage = 0; - const navComponents = new MessageActionRow({ + const navComponents = new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Previous', customId: 'previous', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Save', customId: 'save', - style: MessageButtonStyles.PRIMARY, + style: ButtonStyle.Primary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Next', customId: 'next', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), ], }); const modChoices = () => { const available = availableMods(); return [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageSelectMenu({ + new StringSelectMenuBuilder({ minValues: 0, maxValues: available?.[modPage]?.length || 1, customId: 'select_mods', @@ -511,8 +513,8 @@ export default class Builds extends Interaction { components: [selectPartRow(), ...modChoices()], }); const modCollector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.SELECT_MENU, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.StringSelect, message, guild: interaction.guild, channel: interaction.channel, @@ -520,14 +522,14 @@ export default class Builds extends Interaction { modCollector.on('collect', modSelectionHandler); const modPageCollector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.BUTTON, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.Button, message, guild: interaction.guild, channel: interaction.channel, }); const modPageHandler = async (button) => { - await button.deferUpdate({ ephemeral: ctx.ephemerate }); + await button.deferUpdate({ flags: ctx.flags }); switch (button.customId) { case 'previous': if (modPage > 1) modPage -= 1; @@ -553,12 +555,12 @@ export default class Builds extends Interaction { content: currentMods(), ephemeral: ctx.ephemerate, components: [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Saved', customId: 'save', - style: MessageButtonStyles.SUCCESS, + style: ButtonStyle.Success, disabled: true, }), ], @@ -581,6 +583,6 @@ export default class Builds extends Interaction { modPageCollector.on('collect', modPageHandler); return undefined; } - return interaction.reply({ content: ctx.i18n`Nah.`, ephemeral: ctx.ephemerate }); + return interaction.reply({ content: ctx.i18n`Nah.`, flags: ctx.flags }); } } diff --git a/src/interactions/warframe/Calculator.js b/src/interactions/warframe/Calculator.js index 402194dfe..407b8bec1 100644 --- a/src/interactions/warframe/Calculator.js +++ b/src/interactions/warframe/Calculator.js @@ -1,28 +1,24 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType } from 'discord.js'; import { games } from '../../utilities/CommonFunctions.js'; import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; - const levels = [ { - type: Types.INTEGER, + type: ApplicationCommandOptionType.Integer, name: 'base_level', description: "Enemy's base level", required: true, }, { - type: Types.INTEGER, + type: ApplicationCommandOptionType.Integer, name: 'current_level', description: "Enemy's current level", required: true, }, { - type: Types.INTEGER, + type: ApplicationCommandOptionType.Integer, name: 'base', description: 'Base value for the current calculation', }, @@ -44,17 +40,17 @@ export default class Calculator extends Interaction { options: [ { ...cmds['calc.shields'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: levels, }, { ...cmds['calc.armor'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: levels, }, { ...cmds['calc.health'], - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: levels, }, ], @@ -109,7 +105,7 @@ export default class Calculator extends Interaction { ephemeral: ctx.ephemerate, }); default: - return interaction.reply({ content: 'ok', ephemeral: ctx.ephemerate }); + return interaction.reply({ content: 'ok', flags: ctx.flags }); } } } diff --git a/src/interactions/warframe/LFG.js b/src/interactions/warframe/LFG.js index c872e448a..f476c3adc 100644 --- a/src/interactions/warframe/LFG.js +++ b/src/interactions/warframe/LFG.js @@ -1,17 +1,18 @@ -import Discord from 'discord.js'; +import { + ApplicationCommandOptionType, + ButtonStyle, + InteractionType, + ComponentType, + ActionRowBuilder, + ButtonBuilder, + InteractionCollector, +} from 'discord.js'; import dehumanize from 'parse-duration'; import { cmds, platformMap as platformChoices } from '../../resources/index.js'; import LFGEmbed from '../../embeds/LFGEmbed.js'; import Interaction from '../../models/Interaction.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types, MessageButtonStyles, InteractionTypes, MessageComponentTypes }, - MessageActionRow, - MessageButton, - InteractionCollector, -} = Discord; - const places = [ { name: 'Void', @@ -119,29 +120,29 @@ export default class LFG extends Interaction { options: [ { ...cmds.platform, - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: platformChoices, required: true, }, { ...cmds['lfg.place'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: places, required: false, }, { ...cmds['lfg.place.custom'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: false, }, { ...cmds['lfg.time'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: false, }, { ...cmds['lfg.members'], - type: Types.INTEGER, + type: ApplicationCommandOptionType.Integer, required: false, choices: [ { name: '1', value: 1 }, @@ -152,23 +153,23 @@ export default class LFG extends Interaction { }, { ...cmds['lfg.for'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: target, required: false, }, { ...cmds['lfg.for.custom'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: false, }, { ...cmds['lfg.duration'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: false, }, { ...cmds['lfg.type'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: [ { name: 'Hosting', @@ -206,21 +207,21 @@ export default class LFG extends Interaction { const embed = new LFGEmbed(lfg, ctx); const rawChn = ctx.lfg?.[lfg.platform] || ctx.lfg?.[Object.keys(ctx.lfg)?.[0]]; - if (!rawChn) return interaction.reply({ content: ctx.i18n`Couldn't find channel.`, ephemeral: ctx.ephemerate }); + if (!rawChn) return interaction.reply({ content: ctx.i18n`Couldn't find channel.`, flags: ctx.flags }); const chn = interaction.guild.channels.resolve(rawChn.id); - if (!chn) return interaction.reply({ content: ctx.i18n`Couldn't find channel.`, ephemeral: ctx.ephemerate }); + if (!chn) return interaction.reply({ content: ctx.i18n`Couldn't find channel.`, flags: ctx.flags }); const buttons = [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ - style: MessageButtonStyles.PRIMARY, + new ButtonBuilder({ + style: ButtonStyle.Primary, customId: 'lfg_add', emoji: '🔰', label: 'Join', }), - new MessageButton({ - style: MessageButtonStyles.DANGER, + new ButtonBuilder({ + style: ButtonStyle.Danger, customId: 'lfg_end', emoji: '❌', label: 'End', @@ -239,8 +240,8 @@ export default class LFG extends Interaction { let deleteTimeout = setTimeout(message.delete, dehumanize(lfg.expiry)); const collector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.BUTTON, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.Button, message, guild: interaction.guild, channel: interaction.channel, @@ -287,6 +288,6 @@ export default class LFG extends Interaction { }; collector.on('collect', reactionHandler); - return interaction.reply({ content: 'gl;hf', ephemeral: ctx.ephemerate }); + return interaction.reply({ content: 'gl;hf', flags: ctx.flags }); } } diff --git a/src/interactions/warframe/Lookup.js b/src/interactions/warframe/Lookup.js index 82541a78b..5197d8b1a 100644 --- a/src/interactions/warframe/Lookup.js +++ b/src/interactions/warframe/Lookup.js @@ -1,4 +1,4 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType } from 'discord.js'; import WorldStateClient from '../../utilities/WorldStateClient.js'; import Interaction from '../../models/Interaction.js'; @@ -15,20 +15,16 @@ import { cmds } from '../../resources/index.js'; import CompanionEmbed from '../../embeds/CompanionEmbed.js'; const { ENDPOINTS } = WorldStateClient; - -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; const queryOpt = [ { ...cmds.query, - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ]; const patchnotes = { ...cmds.patchnotes, - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, required: false, }; const companionTypes = ['Pets', 'Sentinel']; @@ -41,33 +37,33 @@ export default class Lookup extends Interaction { options: [ { ...cmds.arcane, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: queryOpt, }, { ...cmds.warframe, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [...queryOpt, patchnotes], }, { ...cmds.weapon, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [...queryOpt, patchnotes], }, { ...cmds.riven, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: queryOpt, }, { ...cmds.mod, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [...queryOpt, patchnotes], }, { ...cmds.companion, - type: Types.SUB_COMMAND, + type: ApplicationCommandOptionType.Subcommand, options: [...queryOpt, patchnotes], }, ], @@ -89,7 +85,7 @@ export default class Lookup extends Interaction { let data; let pages = []; - await interaction.deferReply({ ephemeral: ctx.ephemerate }); + await interaction.deferReply({ flags: ctx.flags }); switch (subcommand) { case 'arcane': data = await ctx.ws.search(ENDPOINTS.SEARCH.ARCANES, query); diff --git a/src/interactions/warframe/PriceCheck.js b/src/interactions/warframe/PriceCheck.js index 1bc48a359..0d616603e 100644 --- a/src/interactions/warframe/PriceCheck.js +++ b/src/interactions/warframe/PriceCheck.js @@ -1,12 +1,8 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType } from 'discord.js'; import { cmds, platformMap } from '../../resources/index.js'; import Interaction from '../../models/Interaction.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; - export default class PriceCheck extends Interaction { static enabled = true; @@ -15,12 +11,12 @@ export default class PriceCheck extends Interaction { options: [ { ...cmds.query, - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, { ...cmds.platform, - type: Types.STRING, + type: ApplicationCommandOptionType.String, choices: platformMap, }, ], @@ -31,8 +27,8 @@ export default class PriceCheck extends Interaction { const platform = options?.get('platform')?.value || ctx.platform || 'pc'; const query = options?.get('query')?.value; - await interaction.deferReply({ ephemeral: ctx.ephemerate }); + await interaction.deferReply({ flags: ctx.flags }); const embeds = await ctx.ws.pricecheck(query, { platform }); - return interaction.editReply({ embeds, ephemeral: ctx.ephemerate }); + return interaction.editReply({ embeds, flags: ctx.flags }); } } diff --git a/src/interactions/warframe/WhatsIn.js b/src/interactions/warframe/WhatsIn.js index e512643d6..4747a5077 100644 --- a/src/interactions/warframe/WhatsIn.js +++ b/src/interactions/warframe/WhatsIn.js @@ -1,17 +1,14 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType } from 'discord.js'; import WhatsInEmbed from '../../embeds/WhatsinEmbed.js'; import Interaction from '../../models/Interaction.js'; import { games, toTitleCase } from '../../utilities/CommonFunctions.js'; import { cmds } from '../../resources/index.js'; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; const queryOpt = [ { ...cmds['whatsin.query'], - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ]; @@ -27,7 +24,7 @@ export default class WhatsIn extends Interaction { options: [ { name: 'relic_era', - type: Types.STRING, + type: ApplicationCommandOptionType.String, description: 'What relic tier is the relic from?', required: true, choices: [ @@ -70,6 +67,6 @@ export default class WhatsIn extends Interaction { const data = await ctx.ws.relic(tier, tier.toLowerCase() === 'requiem' ? query.toUpperCase() : query); if (!data || !Object.keys(data).length) return interaction.reply(ctx.i18n`Sorry, no such relic`); const embed = new WhatsInEmbed(data, tier, query); - return interaction.reply({ embeds: [embed], ephemeral: ctx.ephemerate }); + return interaction.reply({ embeds: [embed], flags: ctx.flags }); } } diff --git a/src/interactions/warframe/WhereIs.js b/src/interactions/warframe/WhereIs.js index 875ae8f3e..f7533e076 100644 --- a/src/interactions/warframe/WhereIs.js +++ b/src/interactions/warframe/WhereIs.js @@ -1,4 +1,4 @@ -import Discord from 'discord.js'; +import { ApplicationCommandOptionType, EmbedBuilder } from 'discord.js'; import WhereisEmbed from '../../embeds/WhereisEmbed.js'; import Collectors from '../../utilities/Collectors.js'; @@ -8,13 +8,10 @@ import Interaction from '../../models/Interaction.js'; import { cmds } from '../../resources/index.js'; const { ENDPOINTS } = WorldStateClient; -const { - Constants: { ApplicationCommandOptionTypes: Types }, -} = Discord; const queryOpt = [ { ...cmds.query, - type: Types.STRING, + type: ApplicationCommandOptionType.String, required: true, }, ]; @@ -95,8 +92,8 @@ export default class WhereIs extends Interaction { const relics = createGroupedArray(results, 20) .map((rg) => new WhereisEmbed(createGroupedArray(rg, 10), query, longestName.length, longestRelic.length)) - .map((e) => new Discord.MessageEmbed(e)); - await interaction.deferReply({ ephemeral: ctx.ephemerate }); + .map((e) => new EmbedBuilder(e)); + await interaction.deferReply({ flags: ctx.flags }); return Collectors.paged(interaction, relics, ctx); } } diff --git a/src/interactions/warframe/Worldstate.js b/src/interactions/warframe/Worldstate.js index 2b631144f..43173192d 100644 --- a/src/interactions/warframe/Worldstate.js +++ b/src/interactions/warframe/Worldstate.js @@ -1,4 +1,4 @@ -import { Constants, MessageEmbed } from 'discord.js'; +import { ApplicationCommandOptionType, EmbedBuilder } from 'discord.js'; import Collectors from '../../utilities/Collectors.js'; import { createGroupedArray, games } from '../../utilities/CommonFunctions.js'; @@ -24,8 +24,6 @@ import Outposts from '../../embeds/SentientOutpostEmbed.js'; import SteelPath from '../../embeds/SteelPathEmbed.js'; import { cmds, platformMap as platformChoices, syndicates as syndicateOptions } from '../../resources/index.js'; -const { ApplicationCommandOptionTypes: Types } = Constants; - const aliases = { arbi: 'arbitration', baro: 'voidTrader', @@ -67,7 +65,7 @@ const embeds = { }; const platformable = [ { - type: Types.STRING, + type: ApplicationCommandOptionType.String, name: 'platform', description: 'Platform to check for data', choices: platformChoices, @@ -98,7 +96,7 @@ const syndicates = syndicateOptions.map((s) => ({ const compactable = [ ...platformable, { - type: Types.BOOLEAN, + type: ApplicationCommandOptionType.Boolean, name: 'compact', description: 'Should all data be in one embed?', }, @@ -129,7 +127,7 @@ export default class WorldState extends Interaction { ...cmds.conclave, options: [ { - type: Types.STRING, + type: ApplicationCommandOptionType.String, name: 'category', description: 'Which conclave challenge category?', choices: [ @@ -158,7 +156,7 @@ export default class WorldState extends Interaction { ...cmds.cycle, options: [ { - type: Types.STRING, + type: ApplicationCommandOptionType.String, name: 'place', description: 'Where do you want to know about?', choices: places, @@ -187,7 +185,7 @@ export default class WorldState extends Interaction { ...cmds.news, options: [ { - type: Types.STRING, + type: ApplicationCommandOptionType.String, name: 'category', description: 'Which news do you want?', required: true, @@ -237,7 +235,7 @@ export default class WorldState extends Interaction { ...cmds.syndicate, options: [ { - type: Types.STRING, + type: ApplicationCommandOptionType.String, name: 'syndicate', description: 'Which syndicate?', required: true, @@ -332,13 +330,13 @@ export default class WorldState extends Interaction { if (!data?.length && !Object.keys(data).length) { return interaction.editReply(ctx.i18n`No ${field.charAt(0).toUpperCase() + field.slice(1)} Active`); } - embed = new MessageEmbed(new embeds[field](data, { platform, i18n: ctx.i18n })); + embed = new EmbedBuilder(new embeds[field](data, { platform, i18n: ctx.i18n })); return interaction.editReply({ embeds: [embed] }); case 'voidTrader': if (!data.length && !Object.keys(data).length) { return interaction.editReply(ctx.i18n`No ${field.charAt(0).toUpperCase() + field.slice(1)} Active`); } - embed = new MessageEmbed( + embed = new EmbedBuilder( new embeds[field](data, { platform, onDemand: true, @@ -365,7 +363,7 @@ export default class WorldState extends Interaction { if (!data.length && !Object.keys(data).length) { return interaction.editReply(ctx.i18n`No ${field.charAt(0).toUpperCase() + field.slice(1)} Active`); } - pages = data.map((datum) => new MessageEmbed(new embeds[field](datum, { platform, i18n: ctx.i18n }))); + pages = data.map((datum) => new EmbedBuilder(new embeds[field](datum, { platform, i18n: ctx.i18n }))); return interaction.editReply({ embeds: pages }); case 'steelPath': if (!data.length && !Object.keys(data).length) { diff --git a/src/models/Interaction.js b/src/models/Interaction.js index a362d9df0..b7d7a07b0 100644 --- a/src/models/Interaction.js +++ b/src/models/Interaction.js @@ -1,9 +1,3 @@ -import Discord from 'discord.js'; - -/* eslint-disable no-unused-vars */ -const { Message, APIMessage, CommandInteraction } = Discord; -/* eslint-enable no-unused-vars */ - export default class Interaction { static enabled = true; @@ -25,9 +19,9 @@ export default class Interaction { /** * Handle a command interaction - * @param {CommandInteraction} interaction interaction to handle - * @param {CommandContext} ctx command context - * @returns {Promise} + * @param {Discord.CommandInteraction} interaction interaction to handle + * @param {Discord.CommandContext} ctx command context + * @returns {Promise} */ // eslint-disable-next-line no-unused-vars,no-empty-function static async commandHandler(interaction, ctx) {} diff --git a/src/notifications/Broadcaster.js b/src/notifications/Broadcaster.js index 418a0ac45..9f3ed0b79 100644 --- a/src/notifications/Broadcaster.js +++ b/src/notifications/Broadcaster.js @@ -38,7 +38,7 @@ export default class Broadcaster { /** * Broadcast embed to all channels for a platform and type - * @param {Discord.MessageEmbed} embed Embed to send to a channel + * @param {Discord.EmbedBuilder} embed Embed to send to a channel * @param {string} platform Platform of worldstate * @param {string} type Type of new data to notify * @param {string} locale locale string diff --git a/src/utilities/Collectors.js b/src/utilities/Collectors.js index af8e1eefb..233aa6ed1 100644 --- a/src/utilities/Collectors.js +++ b/src/utilities/Collectors.js @@ -1,50 +1,48 @@ -import Discord from 'discord.js'; - -/* eslint-disable no-unused-vars */ -const { - MessageEmbed, - CommandInteraction, - MessageButton, - MessageActionRow, - Constants: { MessageButtonStyles, InteractionTypes, MessageComponentTypes }, +import { + EmbedBuilder, + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + InteractionType, + ComponentType, InteractionCollector, -} = Discord; -/* eslint-enable no-unused-vars */ + StringSelectMenuBuilder, +} from 'discord.js'; export default class Collectors { static #navComponents = [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'Previous', customId: 'previous', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), - new MessageButton({ + new ButtonBuilder({ label: 'Stop', customId: 'stop', - style: MessageButtonStyles.DANGER, + style: ButtonStyle.Danger, }), - new MessageButton({ + new ButtonBuilder({ label: 'Next', customId: 'next', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), ], }), ]; static #confirmationComponents = [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new MessageButton({ + new ButtonBuilder({ label: 'yes', customId: 'confirm', - style: MessageButtonStyles.PRIMARY, + style: ButtonStyle.Primary, }), - new MessageButton({ + new ButtonBuilder({ label: 'no', customId: 'deny', - style: MessageButtonStyles.SECONDARY, + style: ButtonStyle.Secondary, }), ], }), @@ -56,15 +54,15 @@ export default class Collectors { /** * Update pages to have additional criteria and safety check fields like description - * @param {Array} pages to reshape as desired - * @returns {Array} + * @param {Array} pages to reshape as desired + * @returns {Array} */ static #shapePages(pages) { return pages.map((newPage, index) => { const pageInd = `Page ${index + 1}/${pages.length}`; if (!newPage.description) newPage.setDescription('_ _'); if (newPage.footer) { - if (newPage instanceof MessageEmbed) { + if (newPage instanceof EmbedBuilder) { if (newPage.footer.text.indexOf('Page ') === -1) { newPage.setFooter({ text: `${pageInd} • ${newPage.footer.text}`, iconURL: newPage.footer.iconURL }); } @@ -78,7 +76,7 @@ export default class Collectors { } else { newPage.footer = { text: pageInd }; } - return new MessageEmbed(newPage); + return new EmbedBuilder(newPage); }); } @@ -86,7 +84,7 @@ export default class Collectors { * Created a selection collector for selecting a page from the list. * Must have 25 or fewer unique titles. * @param {CommandInteraction} interaction interaction to respond to - * @param {Array} pages array of pages to make available + * @param {Array} pages array of pages to make available * @param {CommandContext} ctx context for command call * @returns {Promise} */ @@ -103,9 +101,9 @@ export default class Collectors { })); const menu = () => [ - new MessageActionRow({ + new ActionRowBuilder({ components: [ - new Discord.MessageSelectMenu({ + new StringSelectMenuBuilder({ customId: 'select', placeholder: ctx.i18n`Select Page`, minValues: 1, @@ -130,8 +128,8 @@ export default class Collectors { : await interaction.reply(payload); const collector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.SELECT_MENU, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.SelectMenu, message, guild: interaction.guild, channel: interaction.channel, @@ -171,7 +169,7 @@ export default class Collectors { /** * Create a paged interaction collector for an interaction & embed pages * @param {CommandInteraction} interaction to reply to - * @param {Array} pages embed pages + * @param {Array} pages embed pages * @param {CommandContext} ctx command context * @returns {Promise} */ @@ -198,8 +196,8 @@ export default class Collectors { }); const collector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.BUTTON, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.Button, message, guild: interaction.guild, channel: interaction.channel, @@ -277,8 +275,8 @@ export default class Collectors { }); const collector = new InteractionCollector(interaction.client, { - interactionType: InteractionTypes.MESSAGE_COMPONENT, - componentType: MessageComponentTypes.BUTTON, + interactionType: InteractionType.MessageComponent, + componentType: ComponentType.Button, max: 1, message, guild: interaction.guild, diff --git a/src/utilities/CommonFunctions.js b/src/utilities/CommonFunctions.js index d3bc53496..ae358d126 100644 --- a/src/utilities/CommonFunctions.js +++ b/src/utilities/CommonFunctions.js @@ -1,4 +1,4 @@ -import Discord from 'discord.js'; +import { Collection, EmbedBuilder } from 'discord.js'; import { emoji, factions, missionTypes, rssFeeds, trackables as all, welcomes } from '../resources/index.js'; @@ -19,8 +19,6 @@ const { twitter, } = all; -const { Collection, MessageEmbed } = Discord; - /** * API base path * @type {string} @@ -482,7 +480,7 @@ const nav = ['◀', '▶', '⏮', '⏭', '🛑']; /** * Create a page collector for the given message and pages * @param {Discord.Message} msg Message to start the page collector from - * @param {(Object|Discord.MessageEmbed)} pages Array of possible pages + * @param {(Object|Discord.EmbedBuilder)} pages Array of possible pages * @param {Discord.User} author Calling author */ export const createPageCollector = async (msg, pages, author) => { @@ -532,7 +530,7 @@ export const createPageCollector = async (msg, pages, author) => { const newPage = pages[page - 1]; const pageInd = `Page ${page}/${pages.length}`; if (newPage.footer) { - if (newPage instanceof MessageEmbed) { + if (newPage instanceof EmbedBuilder) { if (newPage.footer.text.indexOf('Page') === -1) { newPage.setFooter({ text: `${pageInd} • ${newPage.footer.text}`, iconURL: newPage.footer.icon_url }); } @@ -561,7 +559,7 @@ export const createPageCollector = async (msg, pages, author) => { /** * Set up pages from an array of embeds - * @param {Array.} pages Array of embeds to use as pages + * @param {Array.} pages Array of embeds to use as pages * @param {Discord.Message} message Message for author * @param {Settings} settings Settings */ @@ -580,10 +578,10 @@ export const setupPages = async (pages, { message, settings }) => { * @param {string} stringToChunk string that will be broken up for the fields * @param {string} title title of the embed * @param {string} breakChar character to break on - * @returns {Discord.MessageEmbed} Embed + * @returns {Discord.EmbedBuilder} Embed */ export const createChunkedEmbed = (stringToChunk, title, breakChar) => { - const embed = new MessageEmbed(embedDefaults); + const embed = new EmbedBuilder(embedDefaults); embed.setTitle(title); const chunks = (chunkify({ string: stringToChunk, breakChar, maxLength: 900 }) || []).filter(stringFilter); if (chunks.length) { @@ -598,16 +596,16 @@ export const createChunkedEmbed = (stringToChunk, title, breakChar) => { embed.setDescription(`No ${title}`); } - if (embed.fields.length > fieldLimit) { - const fieldGroups = createGroupedArray(embed.fields, fieldLimit); + if (embed.data.fields?.length > fieldLimit) { + const fieldGroups = createGroupedArray(embed.data.fields, fieldLimit); const embeds = []; fieldGroups.forEach((fields, index) => { - const smEmbed = new MessageEmbed(embedDefaults); + const smEmbed = new EmbedBuilder(embedDefaults); embed.setTitle(title); - smEmbed.fields = fields; + smEmbed.setFields(fields); if (index === 0) { - smEmbed.setDescription(embed.description); + smEmbed.setDescription(embed.data.description); } embeds.push(smEmbed); }); @@ -673,7 +671,7 @@ export const constructTypeEmbeds = (types) => { }); const fieldGroups = createGroupedArray(fields, fieldLimit); return fieldGroups.map((fieldGroup, index) => { - const embed = new MessageEmbed(embedDefaults); + const embed = new EmbedBuilder(embedDefaults); embed.setTitle(`Event Trackables${index > 0 ? ', ctd.' : ''}`); embed.addFields( fieldGroup.map((field) => ({ @@ -705,7 +703,7 @@ export const constructItemEmbeds = (types) => { }); const fieldGroups = createGroupedArray(fields, fieldLimit); return fieldGroups.map((fieldGroup, index) => { - const embed = new MessageEmbed(embedDefaults); + const embed = new EmbedBuilder(embedDefaults); embed.setTitle(`Item Trackables${index > 0 ? ', ctd.' : ''}`); embed.addFields( fieldGroup.map((field) => ({ diff --git a/src/utilities/Webhook.js b/src/utilities/Webhook.js index d2058a2cc..98f417098 100644 --- a/src/utilities/Webhook.js +++ b/src/utilities/Webhook.js @@ -1,15 +1,14 @@ -import Discord from 'discord.js'; +import { PermissionsBitField, WebhookClient } from 'discord.js'; import logger from './Logger.js'; -const { WebhookClient } = Discord; const lookupWebhooks = process.env.LOOKUP_WEBHOOKS === 'true'; /** * Send a webhook based on context * @param {CommandContext} ctx context object for sending data * @param {string} content content to send for webhook message - * @param {Array} [embeds] message embeds to send on webhook + * @param {Array} [embeds] message embeds to send on webhook * @returns {Promise} */ const webhook = async (ctx, { content, embeds = undefined }) => { @@ -32,7 +31,7 @@ const webhook = async (ctx, { content, embeds = undefined }) => { : client.send(opts); } catch (e) { logger.error(e); - await this.settings.deleteWebhooksForChannel(ctx.channel.id); + await ctx.settings.deleteWebhooksForChannel(ctx.channel.id); logger.error(`Could not send webhook for ${ctx.channel.id} attempting after wiping context.`); return false; } @@ -44,17 +43,22 @@ const webhook = async (ctx, { content, embeds = undefined }) => { return webhook(ctx, { content, embeds }); } - const useBotLogic = this.scope === 'bot' && ctx.channel.permissionsFor(this.client.user.id).has('MANAGE_WEBHOOKS'); + const useBotLogic = + this.scope === 'bot' && + ctx.channel.permissionsFor(this.client.user.id).has(PermissionsBitField.Flags.ManageWebhooks); // find how to do this with rest instead of a discord client if (ctx.channel) { if (useBotLogic) { const webhooks = await ctx.channel.fetchWebhooks(); + const array = Array.from(webhooks.values()); let target; - if (webhooks.array().length > 0) { - [target] = webhooks.array(); + if (array.length > 0) { + [target] = array; } else { - target = await ctx.channel.createWebhook(this.client.user.username); + target = await ctx.channel.createWebhook({ + name: this.client.user.username, + }); } logger.debug(`Created and adding ${JSON.stringify(target)} to ${ctx.channel}`); target.name = this.client.user.username;