From 12461ac1c51cd517a0b8ef61e04aeb3b9477fa98 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sun, 24 Oct 2021 10:59:08 +0200 Subject: [PATCH 01/19] imported combat-system npm package --- .../advancedClassesCombat/CombatMessageAPI.js | 53 + combat/advancedClassesCombat/index.js | 6 + package-lock.json | 5136 +++++++++++++++-- package.json | 1 + 4 files changed, 4733 insertions(+), 463 deletions(-) create mode 100644 combat/advancedClassesCombat/CombatMessageAPI.js create mode 100644 combat/advancedClassesCombat/index.js diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js new file mode 100644 index 0000000..74d7afd --- /dev/null +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -0,0 +1,53 @@ +class CombatMessageAPI { + constructor(channel) { + this.channel = channel + } + + // pickAbilityMessage = async (player, abilities) => { + // const playerName = player.name + // const allLetters = "abcefghijklmnopqrstuvwxyz".split("") + // const abilitiesString = `${playerName}: Can pick from abilities ${abilities.map((a, i) => allLetters[i] + ") " + a.constants.name).join(", ")}` + // let ability = undefined + // let pickAbilityTimeout = false + // setTimeout(() => { + // pickAbilityTimeout = true + // }, 10000) + + // while(!ability && !pickAbilityTimeout){ + // // TODO GIVE A TIME FOR THEIR RESPONSE + // const playerResponse = await this.channel(abilitiesString) + // const indexOfPlayerResponse = allLetters.indexOf(playerResponse[0]) + // ability = abilities[indexOfPlayerResponse] + // } + + // if(pickAbilityTimeout) { + // return console.log(playerName + " did not respond in time and lost its turn") + // } + // else { + // return ability + // } + // } + + // deathMessage = async (players = []) => { + // players.forEach((player) => { + // console.log(player.name + " has died") + // }) + // } + + // effectMessage = async (message) => { + // return console.log(message) + // } + + // abilityMessage = async (abilityResponse) => { + // return console.log(abilityResponse) + // } + + // newRoundMessage = async (round) => { + // return console.log("New round: " + round) + // } + + // endGameMessage = async (winningTeam) => { + // console.log("END GAME! Winner is " + winningTeam ? winningTeam.map(u => u.name).join(" ") : "none") + // return process.exit() + // } +} \ No newline at end of file diff --git a/combat/advancedClassesCombat/index.js b/combat/advancedClassesCombat/index.js new file mode 100644 index 0000000..d231429 --- /dev/null +++ b/combat/advancedClassesCombat/index.js @@ -0,0 +1,6 @@ +const { Game } = require("@three-horned-helmet/combat-system-mega-rpg") +const { CombatMessageAPI } = require("./CombatMessageAPI") + +const preGameHandler = (message) => { + +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 502068f..a3ce3f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,4393 @@ { "name": "rpgdiscord", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "rpgdiscord", + "version": "1.0.0", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.1", + "axios": "^0.21.2", + "canvas": "^2.6.1", + "chai": "^4.2.0", + "dblapi.js": "^2.4.0", + "discord.js": "^12.2.0", + "dotenv": "^8.2.0", + "eslint": "^7.1.0", + "istanbul": "^0.4.5", + "mongoose": "^5.13.4", + "nyc": "^15.1.0", + "qs": "^6.9.4" + }, + "devDependencies": { + "mocha": "^7.2.0" + }, + "engines": { + "node": "^14" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@babel/core/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dependencies": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "dependencies": { + "@babel/types": "^7.12.7" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dependencies": { + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dependencies": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", + "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "dependencies": { + "@babel/types": "^7.12.7" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "node_modules/@babel/traverse": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@discordjs/collection": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.5.tgz", + "integrity": "sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw==" + }, + "node_modules/@discordjs/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@three-horned-helmet/combat-system-mega-rpg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.1.tgz", + "integrity": "sha512-48idJseZB6gZGSTBppa9r4rTxXFEOD99QCm9tGkS/aNYQUq1hD9pdB2TdduqefQGbgc1tyGyYcYp30yPmVnbkw==" + }, + "node_modules/@types/bson": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", + "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "node_modules/@types/mongodb": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", + "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", + "dependencies": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "16.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", + "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/axios": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz", + "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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 + }, + "node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/canvas": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", + "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", + "hasInstallScript": true, + "dependencies": { + "nan": "^2.14.0", + "node-pre-gyp": "^0.11.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/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==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/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=" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dblapi.js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.4.0.tgz", + "integrity": "sha512-SqDYVcV1DBQnyhySTjd+Qvzu7jFr+4eKwl56fGpIti7OlXGF5dmDPeo3jQfRlOXTRn5/I5997MDIJukoDxE3Mg==" + }, + "node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/discord.js": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.2.0.tgz", + "integrity": "sha512-Ueb/0SOsxXyqwvwFYFe0msMrGqH1OMqpp2Dpbplnlr4MzcRrFWwsBM9gKNZXPVBHWUKiQkwU8AihXBXIvTTSvg==", + "dependencies": { + "@discordjs/collection": "^0.1.5", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.0", + "prism-media": "^1.2.0", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" + }, + "node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "engines": { + "node": "*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul/node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" + }, + "node_modules/istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/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=" + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/mongodb": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz", + "integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.0.3", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + } + }, + "node_modules/mongoose": { + "version": "5.13.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.9.tgz", + "integrity": "sha512-JbLw5ie0LJxm7V9LoNxRY//6cyFJf0cOpON2TWUWvF9pabil6ArfECL3xHV2N+mwwO4gXiIa+c0pwTzDUVTgqw==", + "dependencies": { + "@types/bson": "1.x || 4.0.x", + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.11", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.4", + "mquery": "3.2.5", + "ms": "2.1.2", + "optional-require": "1.0.x", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "13.5.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "node_modules/mongoose/node_modules/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==" + }, + "node_modules/mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", + "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "dependencies": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "node_modules/needle": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", + "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "node_modules/npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/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==" + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optional-require": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", + "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/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==" + }, + "node_modules/pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "engines": { + "node": "*" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prism-media": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz", + "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/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==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "node_modules/simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/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==" + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/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==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.0.tgz", + "integrity": "sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "requires": { - "@babel/highlight": "^7.10.1" + "@babel/highlight": "^7.10.4" } }, "@babel/core": { @@ -35,39 +4413,6 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.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==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -157,13 +4502,6 @@ "@babel/traverse": "^7.12.1", "@babel/types": "^7.12.1", "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - } } }, "@babel/helper-optimise-call-expression": { @@ -202,9 +4540,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" }, "@babel/helpers": { "version": "7.12.5", @@ -217,11 +4555,11 @@ } }, "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.1", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -251,41 +4589,6 @@ "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.12.7", "@babel/types": "^7.12.7" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.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==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } } }, "@babel/traverse": { @@ -304,39 +4607,6 @@ "lodash": "^4.17.19" }, "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.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==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -360,13 +4630,6 @@ "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - } } }, "@discordjs/collection": { @@ -384,6 +4647,62 @@ "mime-types": "^2.1.12" } }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "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==" + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -438,6 +4757,11 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, + "@three-horned-helmet/combat-system-mega-rpg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.1.tgz", + "integrity": "sha512-48idJseZB6gZGSTBppa9r4rTxXFEOD99QCm9tGkS/aNYQUq1hD9pdB2TdduqefQGbgc1tyGyYcYp30yPmVnbkw==" + }, "@types/bson": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", @@ -479,14 +4803,15 @@ } }, "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} }, "aggregate-error": { "version": "3.1.0", @@ -498,9 +4823,9 @@ } }, "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "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", @@ -520,21 +4845,6 @@ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -599,9 +4909,9 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { "version": "1.5.2", @@ -765,11 +5075,6 @@ } } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -801,19 +5106,6 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -1049,6 +5341,21 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + } + } + }, "es-abstract": { "version": "1.17.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", @@ -1149,35 +5456,39 @@ } }, "eslint": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.2.0.tgz", - "integrity": "sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.2.0", - "espree": "^7.1.0", - "esquery": "^1.2.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.14", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -1186,15 +5497,15 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "debug": { "version": "4.1.1", @@ -1204,6 +5515,16 @@ "ms": "^2.1.1" } }, + "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==" + }, + "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==" + }, "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", @@ -1225,11 +5546,11 @@ } }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -1242,18 +5563,18 @@ } }, "eslint-visitor-keys": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz", - "integrity": "sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", - "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "requires": { - "acorn": "^7.2.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.2.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" } }, "esprima": { @@ -1262,26 +5583,33 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } } }, "estraverse": { @@ -1299,16 +5627,6 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1324,20 +5642,12 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -1378,19 +5688,18 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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" } @@ -1398,9 +5707,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" }, "follow-redirects": { "version": "1.14.4", @@ -1508,11 +5817,18 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" + }, + "dependencies": { + "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==" + } } }, "graceful-fs": { @@ -1648,100 +5964,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "inquirer": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.2.0.tgz", - "integrity": "sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "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==", - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "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==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2101,11 +6323,26 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" }, + "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==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + }, "log-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", @@ -2162,11 +6399,6 @@ "mime-db": "1.44.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, "mimic-response": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", @@ -2375,11 +6607,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", @@ -2534,9 +6761,9 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -2721,14 +6948,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, "optional-require": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", @@ -2982,6 +7201,11 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "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==" + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -2997,15 +7221,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -3014,19 +7229,6 @@ "glob": "^7.1.3" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3105,19 +7307,40 @@ } }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.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==", + "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==", + "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==" + }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "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==" } } }, @@ -3172,6 +7395,14 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3202,14 +7433,6 @@ "es-abstract": "^1.17.5" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -3237,47 +7460,60 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "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==" + }, + "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==" }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } } } @@ -3318,19 +7554,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3345,11 +7568,6 @@ "is-number": "^7.0.0" } }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -3388,9 +7606,9 @@ "optional": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "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" } @@ -3497,14 +7715,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", diff --git a/package.json b/package.json index f539d2a..e55131b 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.1", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 4f61531078a3b6fba63832b20a151604ceba0b1d Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Mon, 25 Oct 2021 09:10:39 +0200 Subject: [PATCH 02/19] added combat message API --- .gitignore | 3 +- assets/classes/mage.png | Bin 0 -> 477 bytes assets/classes/paladin.png | Bin 0 -> 513 bytes assets/classes/ranger.png | Bin 0 -> 669 bytes assets/classes/shaman.png | Bin 0 -> 18633 bytes assets/classes/warrior.png | Bin 0 -> 471 bytes .../advancedClassesCombat/CombatMessageAPI.js | 354 +++++++++++++++--- combat/advancedClassesCombat/index.js | 12 +- commands/test.js | 24 +- game/_CONSTS/combat.json | 5 + package-lock.json | 14 +- package.json | 2 +- 12 files changed, 347 insertions(+), 67 deletions(-) create mode 100644 assets/classes/mage.png create mode 100644 assets/classes/paladin.png create mode 100644 assets/classes/ranger.png create mode 100644 assets/classes/shaman.png create mode 100644 assets/classes/warrior.png create mode 100644 game/_CONSTS/combat.json diff --git a/.gitignore b/.gitignore index 28da82e..e61f148 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules .env .vscode .vs/** -.nyc_* \ No newline at end of file +.nyc_* +commands/test.js \ No newline at end of file diff --git a/assets/classes/mage.png b/assets/classes/mage.png new file mode 100644 index 0000000000000000000000000000000000000000..4c37b748a3ac586a2177afbfcdb4a2b854b90594 GIT binary patch literal 477 zcmV<30V4j1P)Px$mPtfGR9HvlmN9a|Fc3whDq4Oa*?X_EtllAd(r5_pE3 zL7DI2dlt=FLdFV7pur>C``>=8S8L6gfA-A!=I;Vr-%OnE-q+_mIichiAPRAc;d=Kv zH@*9b`7r>Qx$i_OL@NgfAhVZHDG(HxCmi*!Lc(Ca^#-R8ND&FonNP1VmAjsh61O0ygm1^~V|0%ZeW_5^^~XuGZ8 zk@-On*t>vrHlon?pX7kt0y>}paII4Sh_4sZst)jZ0YHkg`(Ych0mu`O9Z(8t)eRRq z*#hn4gE*?aX(r(M^6{#2E!Z7IgI>o2eke73o)w$ zp^2#TPN;p3bwk>ZrreJXBq_n#Jo^n*@k21a Tf#4_r0000Px$yGcYrR9Hvtm%mQKFc8K+Z)E9PbghJh#FDiW%zXzfyVmScuXe=K)b2NsU!f+ zhH`EScs2lS&SEkZDWVcG3qXoX2(37+jRII}tudyy%gti|+VDpKNWAt;K=2p=oRr74 z-uvW3=Ld)TP zz_tx1fMIAY$W98*M%zt&51-$F;dthTSBt6pofp9Mx|%6%8i-&GJT1QL&D|sJZ?AAs z4qOz-LlR-}Q0my;JAkIB{Ep~an-l@Li41$&cxn_n0WQaby1+=BF3!6TAZ@(@un<@N zuLjVzWKs$m5ukxh`#D4*GtN(| z|1Y0C1BCL=5n@qUoO=cETk_xl1VlyH_3)8)bq&ZA_!0OA`1=v?--h{^-YKfU=UQ7) zMk|)y3Fsi=#ckgLzCh|h)cKgyv{UX}RnO*%w5|IADGop|$+yG600000NkvXXu0mjf D+ga#g literal 0 HcmV?d00001 diff --git a/assets/classes/ranger.png b/assets/classes/ranger.png new file mode 100644 index 0000000000000000000000000000000000000000..5f80951e14395f450c0545757c8a2e7823d13e77 GIT binary patch literal 669 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 IM6N<$g2PrlKL7v# literal 0 HcmV?d00001 diff --git a/assets/classes/warrior.png b/assets/classes/warrior.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4440ac6c5643c988ff25fe770afff6379cb714 GIT binary patch literal 471 zcmV;|0Vw{7P)Px$kV!;AR9HvtmOE0zFc3gjJr|&W3f&-+V-PBO@QhE8!Uv%68QgG&a14eUh>Bc+ zk{L6rSe|7qS-XlSZg7*#MB4ZEBRK|Ee$2{z_!lUu!1r#~W9zOC2ZP`7v$U1!jR8)9 z7ZIS~kogi4>Iw`{--5`aj;G!L04aFzNyc=}_1F8opPlUDM1~{0>$=I3x~`LP5q@)f z2S1Mw%LoJ#iV$#AAO*+8+7?X8pA(pamk8jVKN1mvF{uDQetm+qHkz!q0-?m&Qy_tt zRv;xY$(#?|BImY$hu&M`v6zP6fZ{jI5cbkgM_tK9FMj_Gy_z?QwE8r`whIleZbHTQ7k?O zqD?6Q8mv?zE5P9heSSG*&YotOZ0+43HAs`EPcK`qY N07*qoM6N<$f&i14%0&PG literal 0 HcmV?d00001 diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 74d7afd..b6089f5 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -1,53 +1,303 @@ +const Discord = require("discord.js"); +const combatConstants = require("../../game/_CONSTS/combat.json") + class CombatMessageAPI { - constructor(channel) { - this.channel = channel - } - - // pickAbilityMessage = async (player, abilities) => { - // const playerName = player.name - // const allLetters = "abcefghijklmnopqrstuvwxyz".split("") - // const abilitiesString = `${playerName}: Can pick from abilities ${abilities.map((a, i) => allLetters[i] + ") " + a.constants.name).join(", ")}` - // let ability = undefined - // let pickAbilityTimeout = false - // setTimeout(() => { - // pickAbilityTimeout = true - // }, 10000) - - // while(!ability && !pickAbilityTimeout){ - // // TODO GIVE A TIME FOR THEIR RESPONSE - // const playerResponse = await this.channel(abilitiesString) - // const indexOfPlayerResponse = allLetters.indexOf(playerResponse[0]) - // ability = abilities[indexOfPlayerResponse] - // } - - // if(pickAbilityTimeout) { - // return console.log(playerName + " did not respond in time and lost its turn") - // } - // else { - // return ability - // } - // } - - // deathMessage = async (players = []) => { - // players.forEach((player) => { - // console.log(player.name + " has died") - // }) - // } - - // effectMessage = async (message) => { - // return console.log(message) - // } - - // abilityMessage = async (abilityResponse) => { - // return console.log(abilityResponse) - // } - - // newRoundMessage = async (round) => { - // return console.log("New round: " + round) - // } - - // endGameMessage = async (winningTeam) => { - // console.log("END GAME! Winner is " + winningTeam ? winningTeam.map(u => u.name).join(" ") : "none") - // return process.exit() - // } -} \ No newline at end of file + constructor(message, options = {}) { + this.message = message + this.options = options + this.game = null + + this.defaultSideColor = "#45b6fe" + this.previousAbilityResponse = [] + this.effectMessages = [] + this.deathMessages = [] + this.round = 1 + } + + // Options: { withTeam: Boolean }. + genericPrefightRuleGenerator = async () => { + const { withTeam } = this.options + // const disallowed = minibossStartAllowed(user); + // if (disallowed) { + // return message.channel.send(disallowed); + // } + // const now = new Date(); + // user.setNewCooldown("miniboss", now); + // await user.save(); + + if(withTeam){ + // // Handle invitations here + // const invitationEmbed = _invitationEmbed(teamOne, teamTwo); + // const invitation = await message.channel.send(invitationEmbed); + // await invitation.react(minibossIcon); + // const reactionFilter = (reaction) => reaction.emoji.name === minibossIcon; + // const collector = await invitation.createReactionCollector(reactionFilter, { max: 10, time: 1000 * 20, errors: ["time"] }); + // collector.on("collect", async (result, rUser) => { + // if (rUser.bot) { + // return; + // } + // if (progress.teamGreen.length > 9) { + // return collector.stop(); + // } + // const helper = await User.findOne({ "account.userId": rUser.id }); + + // const disallowedHelper = validateHelper(progress, helper, rUser.id); + // if (disallowedHelper) { + // return message.channel.send(`<@${message.author.id}>: ${disallowedHelper}`); + // } + // progress.teamGreen.push(helper); + // }); + + // collector.on("end", async () => { + // const combatResult = await createCombatRound(message, progress); + // if (combatResult.winner.victory === "green") { + // const rewards = generateRewards(combatResult); + // await giveRewards(rewards, combatResult); + // const embed = createMinibossResult(rewards, combatResult); + // message.channel.send(embed); + // } + // }); + } + const rulesEmbed = this._fightDetailsEmbed() + const invitation = await this.message.channel.send(rulesEmbed); + + } + + pickAbilityMessage = async (player, abilities) => { + const playerName = player.name + const allLetters = "abcefghijklmnopqrstuvwxyz".split("") + const capitalizeFirstLetter = (string) => { + return string.charAt(0).toUpperCase() + string.slice(1); + } + const abilitiesString = `__${playerName}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` + + const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) + await this.message.channel.send(abilityPickerEmbed) + + const filter = (response) => { + // checks if person included included in the fight + return player.id === response.author.id; + }; + + const collector = await this.message.channel.createMessageCollector(filter, { + time: combatConstants.messageAPI.defaultCombatReactTime, + errors: ["time"], + }); + + let pickedAbility; + collector.on("collect", async (result) => { + if (result.author.bot) { + return; + } + + const chosenAbilityIndex = allLetters.indexOf(result.content[0]?.toLowerCase()) + if(chosenAbilityIndex < 0) return + pickedAbility = abilities[chosenAbilityIndex] + if(!pickedAbility) return + + // stops collecting if all humans have answered + // await sleep(1500); + collector.stop(); + }); + + // TODO: Error handling (on timeout) + return await new Promise ((resolve) => { + collector.on("end", async () => { + resolve(pickedAbility) + }); + }); + } + + deathMessage = async (players = []) => { + this.deathMessages = this.deathMessages.concat(players) + // players.forEach((player) => { + // this.deathMessages.push(player) + // }) + } + + effectMessage = async (message) => { + this.effectMessages.push(message) + // return console.log(message) + } + + abilityMessage = async (abilityResponse) => { + this.previousAbilityResponse.push(abilityResponse) + // return console.log(abilityResponse) + } + + newRoundMessage = async (round) => { + this.round = round + // return console.log("New round: " + round) + } + + endGameMessage = async (winningTeam) => { + console.log("END GAME! Winner is " + winningTeam ? winningTeam.map(u => u.name).join(" ") : "none") + // return process.exit() + } + + + + + _invitationEmbed = (miniboss, user) => { + // const { username } = user.account; + // const { currentLocation } = user.world; + + // const rules = `\`Army allowed: ${getIcon(options.allowFriends, "icon")}\`\n \`Helpers allowed: ${getIcon(miniboss.combatRules.helpersAllowed, "icon")}\`\n \`Max rounds: ${miniboss.combatRules.maxRounds}\`\n \`Attacks each round: ${miniboss.allowedNumOfAttacks}\``; + // const rewards = `${getIcon("gold")} \`Gold: ${miniboss.rewards.gold}\`\n ${getIcon("xp")} \`XP: ${miniboss.rewards.xp}\` \n ${getIcon(miniboss.rewards.dungeonKey)} \`Key: ${miniboss.rewards.dungeonKey}\``; + + // const embedInvitation = new Discord.MessageEmbed() + // .setTitle(`A Miniboss has been triggered by ${username}!`) + // .setDescription(`Help to defeat ${getIcon("miniboss")} ${miniboss.name} from ${getIcon(currentLocation)} ${currentLocation} `) + // .setColor(sideColor) + // .addFields( + // { + // name: "Rules", + // value: rules, + // inline: true, + // }, + // { + // name: `${miniboss.name}'s reward:`, + // value: rewards, + // inline: true, + // }, + // ) + // .setFooter(`React with a ${getIcon("miniboss", "icon")} within 20 seconds to participate! (max 10!)`); + + // return embedInvitation; + } + + _getName = player => { + return player.name || player?.account.username || "npc" + } + + _displayPlayerHp = (player) => { + // embed get's messed up if hp bar is longer than 20 + const MAX_REPEATING = 20; + const { health, currentHealth } = player; + const percentageHealth = (currentHealth / health * 100) * MAX_REPEATING / 100; + const percentageMissingHealth = MAX_REPEATING - percentageHealth; + + if (player.team === 2) { + return `\`\`\`diff\n- ${"|".repeat(percentageHealth)}${" ".repeat(percentageMissingHealth)} \n \`\`\``; + } + return `\`\`\`diff\n+ ${"|".repeat(percentageHealth)}${" ".repeat(percentageMissingHealth)} \n \`\`\``; + }; + + _fightDetailsEmbed = () => { + const { title, description, sideColor, rewards } = this.options + const namesTeamOne = this.game.originalTeamOne.map(this._getName) + const namesTeamTwo = this.game.originalTeamTwo.map(this._getName) + + // const extraFields = [] + + // if(rewards) { + + // } + + const fightDetailsEmbed = new Discord.MessageEmbed() + .setTitle(title || "A fight has been initiated!") + .setDescription(description || "Prepare for fight!") + .setColor(sideColor || this.defaultSideColor) + .addFields( + { + name: "Team 1", + value: namesTeamOne.join("\n"), + inline: true, + }, + { + name: "Team 2", + value: namesTeamTwo.join("\n"), + inline: true, + } + ) + .setFooter(`Some footer`); + + return fightDetailsEmbed + } + + _abilityPickerEmbed = (player, abilitiesString) => { + const { sideColor } = this.options + + const displayHealth = player => { + return { + name: `${this._getName(player)} HP:`, + value: this._displayPlayerHp(player), + inline: true, + } + } + + const topLeft = this.game.teamOne.map(displayHealth); + const topRight = this.game.teamTwo.map(displayHealth); + + // const midRight = { + // name: teamGreenName, + // value: teamGreenOverview, + // inline: true, + // }; + const bottomLeft = { + name: `Choose your ability ${this._getName(player)}!`, + value: abilitiesString, + inline: true, + }; + + // const bottomRight = { + // name: `Choose your ability ${this._getName(user)}!`, + // value: abilitiesString, + // inline: true, + // }; + const newLineSpace = { + name: "\u200B", + value: "\u200B", + inline: false, + }; + + + const combatFields = [ + topLeft, + topRight, + newLineSpace, + // midLeft, + // midRight, + // newLineSpace, + bottomLeft, + ]; + + if(this.previousAbilityResponse.length){ + const midLeft = { + name: "Previous turn's", + value: this.previousAbilityResponse.join("\n \n"), + inline: true, + }; + combatFields.splice(3, 0, midLeft) + this.previousAbilityResponse = [] + } + + if(this.deathMessages.length || this.effectMessages.length){ + const midRight = { + name: "Effects", + value: this.effectMessages.join("\n \n") + this.deathMessages.join("\n"), + inline: true + } + + combatFields.push(midRight) + + this.deathMessages = [] + this.effectMessages = [] + } + + const title = `${this._getName(player)}'s turn!` + const attachment = new Discord.MessageAttachment(`./assets/classes/${player.className}.png`, `${player.className}.png`); + const embedResult = new Discord.MessageEmbed() + .attachFiles(attachment) + .setTitle(title) + // .setDescription(description) + .setColor(sideColor || this.defaultSideColor) + .addFields(...combatFields) + // .setImage(`../../assets/classes/${player.className}.png`) + .setThumbnail(`attachment://${player.className}.png`) + // .setFooter(Object.values(winner).length ? winner.msg : footer); + return embedResult; + }; +} + +module.exports = { CombatMessageAPI } \ No newline at end of file diff --git a/combat/advancedClassesCombat/index.js b/combat/advancedClassesCombat/index.js index d231429..7bad86e 100644 --- a/combat/advancedClassesCombat/index.js +++ b/combat/advancedClassesCombat/index.js @@ -1,6 +1,12 @@ -const { Game } = require("@three-horned-helmet/combat-system-mega-rpg") +const { GameEngine } = require("@three-horned-helmet/combat-system-mega-rpg") const { CombatMessageAPI } = require("./CombatMessageAPI") -const preGameHandler = (message) => { +const preGameHandler = async (message, teamOne, teamTwo, options = {}) => { + const messageAPI = new CombatMessageAPI(message, options) + const game = new GameEngine(messageAPI, teamOne, teamTwo, options = {}) + await messageAPI.genericPrefightRuleGenerator() -} \ No newline at end of file + game.startGame() +} + +module.exports = { preGameHandler } \ No newline at end of file diff --git a/commands/test.js b/commands/test.js index bdd00c8..14d16c4 100644 --- a/commands/test.js +++ b/commands/test.js @@ -1,6 +1,8 @@ /* eslint-disable no-inline-comments */ const { createCombatRound } = require("../combat/advancedCombat"); +const { handleMiniboss } = require("../game/miniboss") +const { preGameHandler } = require("../combat/advancedClassesCombat") const { getArmyTowerEnemies } = require("../game/tower/army-tower/army-tower-enemies/army-tower-enemies"); const User = require("../models/User"); @@ -14,10 +16,26 @@ module.exports = { return; } - const t = await User.findOne({ "account.username":"SpinningSiri" }); + // const t = await User.findOne({ "account.username":"SpinningSiri" }); const m = await User.findOne({ "account.username":"Ignore" }); + m.hero.className = "Warrior" + const npc = { + _id: "p-4", + npc: true, + account: { + username: "Player Four" + }, + hero: { + rank: 3, + health: 180, + currentHealth: 180, + attack: 30, + defense: 30, + className: "Mage" + } + } + return preGameHandler(message, [m], [npc]) - const npc = getArmyTowerEnemies(Math.floor(Math.random() * 100)); const npc2 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); const npc3 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); const npc4 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); @@ -28,7 +46,7 @@ module.exports = { maxRounds: 3 }, teamGreen:[m, npc, npc2], - teamRed:[t, npc3, npc4], + teamRed:[npc3, npc4], embedInformation:{ minimal: true } diff --git a/game/_CONSTS/combat.json b/game/_CONSTS/combat.json new file mode 100644 index 0000000..01da0e8 --- /dev/null +++ b/game/_CONSTS/combat.json @@ -0,0 +1,5 @@ +{ + "messageAPI": { + "defaultCombatReactTime": 10000 + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a3ce3f4..07234a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.1", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.2", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", @@ -477,9 +477,9 @@ } }, "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.1.tgz", - "integrity": "sha512-48idJseZB6gZGSTBppa9r4rTxXFEOD99QCm9tGkS/aNYQUq1hD9pdB2TdduqefQGbgc1tyGyYcYp30yPmVnbkw==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.2.tgz", + "integrity": "sha512-vAJ0+W9uwCFlegRnrgmezdOscGiAQOAT7AVzeRChmg+K1knIuweLFjyBzkLY79rbn1xHUwCvI+EwBV3p/OG86A==" }, "node_modules/@types/bson": { "version": "4.0.5", @@ -4758,9 +4758,9 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.1.tgz", - "integrity": "sha512-48idJseZB6gZGSTBppa9r4rTxXFEOD99QCm9tGkS/aNYQUq1hD9pdB2TdduqefQGbgc1tyGyYcYp30yPmVnbkw==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.2.tgz", + "integrity": "sha512-vAJ0+W9uwCFlegRnrgmezdOscGiAQOAT7AVzeRChmg+K1knIuweLFjyBzkLY79rbn1xHUwCvI+EwBV3p/OG86A==" }, "@types/bson": { "version": "4.0.5", diff --git a/package.json b/package.json index e55131b..13518b9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.1", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.2", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 481eef93d4d0edfc60707fec3d9053a68b168587 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Wed, 27 Oct 2021 15:47:54 +0200 Subject: [PATCH 03/19] endGameMessage --- .../advancedClassesCombat/CombatMessageAPI.js | 50 ++++++++++++++----- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index b6089f5..9a69a26 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -131,7 +131,11 @@ class CombatMessageAPI { } endGameMessage = async (winningTeam) => { - console.log("END GAME! Winner is " + winningTeam ? winningTeam.map(u => u.name).join(" ") : "none") + const extraFields = (fields) => { + this._endGameExtraFieldsEmbed(winningTeam, fields) + } + const lastCombatTurnEmbed = this._abilityPickerEmbed(winningTeam[0], null, extraFields) + await this.message.channel.send(lastCombatTurnEmbed) // return process.exit() } @@ -174,8 +178,10 @@ class CombatMessageAPI { // embed get's messed up if hp bar is longer than 20 const MAX_REPEATING = 20; const { health, currentHealth } = player; - const percentageHealth = (currentHealth / health * 100) * MAX_REPEATING / 100; - const percentageMissingHealth = MAX_REPEATING - percentageHealth; + let percentageHealth = Math.floor((currentHealth / health * 100) * MAX_REPEATING / 100); + let percentageMissingHealth = Math.floor(MAX_REPEATING - percentageHealth); + if(percentageHealth < 0) percentageHealth = 0 + if(percentageMissingHealth < 0) percentageMissingHealth = 0 if (player.team === 2) { return `\`\`\`diff\n- ${"|".repeat(percentageHealth)}${" ".repeat(percentageMissingHealth)} \n \`\`\``; @@ -215,12 +221,12 @@ class CombatMessageAPI { return fightDetailsEmbed } - _abilityPickerEmbed = (player, abilitiesString) => { + _abilityPickerEmbed = (player, abilitiesString, extraFields = (fields) => {}) => { const { sideColor } = this.options const displayHealth = player => { return { - name: `${this._getName(player)} HP:`, + name: `${this._getName(player)} HP:`, value: this._displayPlayerHp(player), inline: true, } @@ -234,11 +240,6 @@ class CombatMessageAPI { // value: teamGreenOverview, // inline: true, // }; - const bottomLeft = { - name: `Choose your ability ${this._getName(player)}!`, - value: abilitiesString, - inline: true, - }; // const bottomRight = { // name: `Choose your ability ${this._getName(user)}!`, @@ -259,19 +260,30 @@ class CombatMessageAPI { // midLeft, // midRight, // newLineSpace, - bottomLeft, + // bottomLeft, ]; - + if(this.previousAbilityResponse.length){ const midLeft = { name: "Previous turn's", value: this.previousAbilityResponse.join("\n \n"), inline: true, }; - combatFields.splice(3, 0, midLeft) + // combatFields.splice(3, 0, midLeft) + combatFields.push(midLeft) this.previousAbilityResponse = [] } + if(player && abilitiesString){ + const bottomLeft = { + name: `Choose your ability ${this._getName(player)}!`, + value: abilitiesString, + inline: true, + }; + combatFields.push(bottomLeft) + combatFields.push(newLineSpace) + } + if(this.deathMessages.length || this.effectMessages.length){ const midRight = { name: "Effects", @@ -285,6 +297,8 @@ class CombatMessageAPI { this.effectMessages = [] } + extraFields(combatFields) + const title = `${this._getName(player)}'s turn!` const attachment = new Discord.MessageAttachment(`./assets/classes/${player.className}.png`, `${player.className}.png`); const embedResult = new Discord.MessageEmbed() @@ -298,6 +312,16 @@ class CombatMessageAPI { // .setFooter(Object.values(winner).length ? winner.msg : footer); return embedResult; }; + + _endGameExtraFieldsEmbed = (winningTeam, fields) => { + const bottomField = { + name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : "is"}:`, + value: winningTeam.map(u => this._getName(u)).join(", ").replace(/$/), + inline: true + } + + fields.push(bottomField) + } } module.exports = { CombatMessageAPI } \ No newline at end of file From a81f2e6bb6d46fb3571897380cd0b78579125e3a Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sun, 31 Oct 2021 21:07:48 +0100 Subject: [PATCH 04/19] working combat with new classes! --- assets/classes/no-image.png | Bin 0 -> 17905 bytes .../advancedClassesCombat/CombatMessageAPI.js | 66 ++++++++++-------- commands/test.js | 5 +- models/User.js | 4 ++ package-lock.json | 14 ++-- package.json | 2 +- 6 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 assets/classes/no-image.png diff --git a/assets/classes/no-image.png b/assets/classes/no-image.png new file mode 100644 index 0000000000000000000000000000000000000000..86306811ee4dceff2794bb90a806a175c017af12 GIT binary patch literal 17905 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 `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` - const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) + const abilityPickerEmbed = await this._abilityPickerEmbed(player, abilitiesString) await this.message.channel.send(abilityPickerEmbed) const filter = (response) => { @@ -110,33 +111,26 @@ class CombatMessageAPI { deathMessage = async (players = []) => { this.deathMessages = this.deathMessages.concat(players) - // players.forEach((player) => { - // this.deathMessages.push(player) - // }) } effectMessage = async (message) => { this.effectMessages.push(message) - // return console.log(message) } abilityMessage = async (abilityResponse) => { this.previousAbilityResponse.push(abilityResponse) - // return console.log(abilityResponse) } newRoundMessage = async (round) => { this.round = round - // return console.log("New round: " + round) } endGameMessage = async (winningTeam) => { const extraFields = (fields) => { this._endGameExtraFieldsEmbed(winningTeam, fields) } - const lastCombatTurnEmbed = this._abilityPickerEmbed(winningTeam[0], null, extraFields) + const lastCombatTurnEmbed = await this._abilityPickerEmbed(winningTeam[0], null, extraFields) await this.message.channel.send(lastCombatTurnEmbed) - // return process.exit() } @@ -221,7 +215,7 @@ class CombatMessageAPI { return fightDetailsEmbed } - _abilityPickerEmbed = (player, abilitiesString, extraFields = (fields) => {}) => { + _abilityPickerEmbed = async (player, abilitiesString, extraFields = (fields) => {}) => { const { sideColor } = this.options const displayHealth = player => { @@ -235,17 +229,6 @@ class CombatMessageAPI { const topLeft = this.game.teamOne.map(displayHealth); const topRight = this.game.teamTwo.map(displayHealth); - // const midRight = { - // name: teamGreenName, - // value: teamGreenOverview, - // inline: true, - // }; - - // const bottomRight = { - // name: `Choose your ability ${this._getName(user)}!`, - // value: abilitiesString, - // inline: true, - // }; const newLineSpace = { name: "\u200B", value: "\u200B", @@ -257,10 +240,6 @@ class CombatMessageAPI { topLeft, topRight, newLineSpace, - // midLeft, - // midRight, - // newLineSpace, - // bottomLeft, ]; if(this.previousAbilityResponse.length){ @@ -287,10 +266,13 @@ class CombatMessageAPI { if(this.deathMessages.length || this.effectMessages.length){ const midRight = { name: "Effects", - value: this.effectMessages.join("\n \n") + this.deathMessages.join("\n"), + value: this.effectMessages.join("\n \n") + this.deathMessages.map(p => this._getName(p) + " has died").join("\n"), inline: true } + if(combatFields.length % 2 !== 0){ + combatFields.push(newLineSpace) + } combatFields.push(midRight) this.deathMessages = [] @@ -300,7 +282,24 @@ class CombatMessageAPI { extraFields(combatFields) const title = `${this._getName(player)}'s turn!` - const attachment = new Discord.MessageAttachment(`./assets/classes/${player.className}.png`, `${player.className}.png`); + + // const attachment = await new Promise ((resolve, reject) => { + // fs.stat(`./assets/classes/${player.className}.png`, function(err, stat) { + // if(err == null) { + // console.log("EXISTS") + // resolve(new Discord.MessageAttachment(`./assets/classes/${player.className}.png`, `${player.className}.png`)); + // } else if(err.code === 'ENOENT') { + // console.log("NOT EXISTS") + // resolve(new Discord.MessageAttachment(`./assets/classes/warrior.png`, `warrior.png`)); + // } else { + // console.log('Some other error: ', err.code); + // reject() + // } + // }); + // }) + const className = player.className || player?.hero.className || "no-image" + const attachment = new Discord.MessageAttachment(`./assets/classes/${className}.png`, `${className}.png`); + const embedResult = new Discord.MessageEmbed() .attachFiles(attachment) .setTitle(title) @@ -315,11 +314,20 @@ class CombatMessageAPI { _endGameExtraFieldsEmbed = (winningTeam, fields) => { const bottomField = { - name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : "is"}:`, - value: winningTeam.map(u => this._getName(u)).join(", ").replace(/$/), + name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : " is"}:`, + value: winningTeam.map(u => this._getName(u)).join(", ").replace(/,$/), inline: true } + const newLineSpace = { + name: "\u200B", + value: "\u200B", + inline: false, + }; + + if(fields.length % 2 !== 0){ + fields.push(newLineSpace) + } fields.push(bottomField) } } diff --git a/commands/test.js b/commands/test.js index 14d16c4..204accf 100644 --- a/commands/test.js +++ b/commands/test.js @@ -21,14 +21,15 @@ module.exports = { m.hero.className = "Warrior" const npc = { _id: "p-4", - npc: true, + isNpc: true, account: { username: "Player Four" }, hero: { rank: 3, health: 180, - currentHealth: 180, + health: 180, + currentHealth: 10, attack: 30, defense: 30, className: "Mage" diff --git a/models/User.js b/models/User.js index cd35a35..e74f503 100644 --- a/models/User.js +++ b/models/User.js @@ -90,6 +90,10 @@ const userSchema = new Schema({ type: Number, default: 1200, }, + className: { + type: String, + default: "Warrior" + }, health: { type: Number, default: 100, diff --git a/package-lock.json b/package-lock.json index 07234a6..833eb14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.2", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.3", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", @@ -477,9 +477,9 @@ } }, "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.2.tgz", - "integrity": "sha512-vAJ0+W9uwCFlegRnrgmezdOscGiAQOAT7AVzeRChmg+K1knIuweLFjyBzkLY79rbn1xHUwCvI+EwBV3p/OG86A==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.3.tgz", + "integrity": "sha512-dj6/HafECikXqrn25HDGJDk1MM7AEMyDNYeiHrGaV5yW/ksYCmox422m+0FVcXJfynu6PN6+RW02U7ldCrp2fg==" }, "node_modules/@types/bson": { "version": "4.0.5", @@ -4758,9 +4758,9 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.2.tgz", - "integrity": "sha512-vAJ0+W9uwCFlegRnrgmezdOscGiAQOAT7AVzeRChmg+K1knIuweLFjyBzkLY79rbn1xHUwCvI+EwBV3p/OG86A==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.3.tgz", + "integrity": "sha512-dj6/HafECikXqrn25HDGJDk1MM7AEMyDNYeiHrGaV5yW/ksYCmox422m+0FVcXJfynu6PN6+RW02U7ldCrp2fg==" }, "@types/bson": { "version": "4.0.5", diff --git a/package.json b/package.json index 13518b9..d7bb252 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.2", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.3", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 6f556544b165559fe94e04c8b94272e8644d0280 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Fri, 5 Nov 2021 13:57:15 +0100 Subject: [PATCH 05/19] bump combat system package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7bb252..5588fb2 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.3", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.4", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 1500243ccd815afb72fe3d735e0fc5356e74bb61 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Mon, 8 Nov 2021 21:51:14 +0100 Subject: [PATCH 06/19] completed rewards for the new combat system --- .../advancedClassesCombat/CombatMessageAPI.js | 79 +++++++++++++++++-- commands/test.js | 6 +- package-lock.json | 14 ++-- 3 files changed, 85 insertions(+), 14 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index dab2db0..68defbc 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -2,6 +2,14 @@ const Discord = require("discord.js"); const combatConstants = require("../../game/_CONSTS/combat.json") const fs = require('fs'); +/* +options: { + additionalRewards: { + exp: 300, + gold: 200 + } +} +*/ class CombatMessageAPI { constructor(message, options = {}) { this.message = message @@ -313,11 +321,7 @@ class CombatMessageAPI { }; _endGameExtraFieldsEmbed = (winningTeam, fields) => { - const bottomField = { - name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : " is"}:`, - value: winningTeam.map(u => this._getName(u)).join(", ").replace(/,$/), - inline: true - } + const {additionalRewards} = this.options const newLineSpace = { name: "\u200B", @@ -325,10 +329,73 @@ class CombatMessageAPI { inline: false, }; + if(!winningTeam) { + const bottomLeftField = { + name: "The combat has ended and the were no winners:", + value: this.game.combatEndedReason || "For unfortunate reasons", + inline: true + } + + if(fields.length % 2 !== 0){ + fields.push(newLineSpace) + } + + return fields.push(bottomLeftField) + } + + + const bottomLeftField = { + name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : " is"}:`, + value: winningTeam.map(u => this._getName(u)).join(", ").replace(/,$/), + inline: true + } + if(fields.length % 2 !== 0){ fields.push(newLineSpace) } - fields.push(bottomField) + + fields.push(bottomLeftField) + + if(winningTeam.find(player => !player.isNpc)){ + const rewards = this.handleRewards() + if(Object.keys(rewards).length){ + const bottomRightField = { + name: `Rewards:`, + value: Object.entries(rewards).map(reward => `${reward[0]}: ${reward[1]}`).join("\n").replace(/\\n$/), + inline: true + } + + fields.push(bottomRightField) + } + } + } + + handleRewards = () => { + const { additionalRewards } = this.options + const allRewards = {} + const winningUsers = this.game.winningTeam.filter(player => !player.isNpc && player.account?.userId) + + const summarizeRewards = (rewards) => { + Object.entries(rewards).forEach(reward => { + allRewards[reward[0]] ? allRewards[reward[0]] += reward[1] : allRewards[reward[0]] = reward[1] + }) + } + + if(additionalRewards){ + summarizeRewards(additionalRewards) + } + + const usersWithRewards = this.game.losingTeam.filter(player => player.rewards) + usersWithRewards.forEach(user => { + summarizeRewards(user.rewards) + }) + + winningUsers.forEach(user => { + user.gainManyResources(allRewards) + user.save() + }) + + return allRewards } } diff --git a/commands/test.js b/commands/test.js index 204accf..88b876f 100644 --- a/commands/test.js +++ b/commands/test.js @@ -35,7 +35,11 @@ module.exports = { className: "Mage" } } - return preGameHandler(message, [m], [npc]) + const additionalRewards = { + exp: 400, + gold: 200 + } + return preGameHandler(message, [m], [npc], {additionalRewards}) const npc2 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); const npc3 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); diff --git a/package-lock.json b/package-lock.json index 833eb14..6a92386 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.3", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.4", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", @@ -477,9 +477,9 @@ } }, "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.3.tgz", - "integrity": "sha512-dj6/HafECikXqrn25HDGJDk1MM7AEMyDNYeiHrGaV5yW/ksYCmox422m+0FVcXJfynu6PN6+RW02U7ldCrp2fg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", + "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" }, "node_modules/@types/bson": { "version": "4.0.5", @@ -4758,9 +4758,9 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.3.tgz", - "integrity": "sha512-dj6/HafECikXqrn25HDGJDk1MM7AEMyDNYeiHrGaV5yW/ksYCmox422m+0FVcXJfynu6PN6+RW02U7ldCrp2fg==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", + "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" }, "@types/bson": { "version": "4.0.5", From 2ccc6b87c516637dcf70a39e79b84bf7aa9b3f90 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Tue, 9 Nov 2021 09:44:49 +0100 Subject: [PATCH 07/19] bump combat-system npm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5588fb2..b3fed0d 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.4", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.5", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 95e11d75ccbe1323a6ab25d50c1ecc7040c1e4b6 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Fri, 12 Nov 2021 19:33:25 +0100 Subject: [PATCH 08/19] bump combat system and draw null fix --- combat/advancedClassesCombat/CombatMessageAPI.js | 3 ++- commands/test.js | 1 - package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 68defbc..a3de28a 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -137,7 +137,8 @@ class CombatMessageAPI { const extraFields = (fields) => { this._endGameExtraFieldsEmbed(winningTeam, fields) } - const lastCombatTurnEmbed = await this._abilityPickerEmbed(winningTeam[0], null, extraFields) + // Winning team kan være null + const lastCombatTurnEmbed = await this._abilityPickerEmbed(winningTeam ? winningTeam[0] : this.game.teamOne[0], null, extraFields) await this.message.channel.send(lastCombatTurnEmbed) } diff --git a/commands/test.js b/commands/test.js index 88b876f..4aad112 100644 --- a/commands/test.js +++ b/commands/test.js @@ -28,7 +28,6 @@ module.exports = { hero: { rank: 3, health: 180, - health: 180, currentHealth: 10, attack: 30, defense: 30, diff --git a/package.json b/package.json index b3fed0d..35b2764 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.5", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.6", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 24a3e144c79e38d1d7d79d0f340bd1694fcc2615 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Fri, 12 Nov 2021 21:58:28 +0100 Subject: [PATCH 09/19] bump combat system --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35b2764..52ec7cc 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.6", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.7", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From a8b7cd87f83c4db91c239b111c211c78206724f7 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sat, 20 Nov 2021 13:20:34 +0100 Subject: [PATCH 10/19] added class picker and hero descriptions --- assets/classes/{ => full-image}/mage.png | Bin assets/classes/{ => full-image}/no-image.png | Bin assets/classes/{ => full-image}/paladin.png | Bin assets/classes/{ => full-image}/ranger.png | Bin assets/classes/{ => full-image}/shaman.png | Bin assets/classes/{ => full-image}/warrior.png | Bin .../advancedClassesCombat/CombatMessageAPI.js | 2 +- commands/commands.js | 2 +- commands/hero.js | 17 ++++ commands/subcommands/hero/describe.js | 32 ++++++ game/hero/accessible-classes.json | 3 + game/hero/pick-class/pick-class-embed.js | 95 ++++++++++++++++++ game/hero/pick-class/pick-class-handler.js | 61 +++++++++++ index.js | 6 ++ models/User.js | 5 + package-lock.json | 14 +-- package.json | 2 +- 17 files changed, 229 insertions(+), 10 deletions(-) rename assets/classes/{ => full-image}/mage.png (100%) rename assets/classes/{ => full-image}/no-image.png (100%) rename assets/classes/{ => full-image}/paladin.png (100%) rename assets/classes/{ => full-image}/ranger.png (100%) rename assets/classes/{ => full-image}/shaman.png (100%) rename assets/classes/{ => full-image}/warrior.png (100%) create mode 100644 commands/hero.js create mode 100644 commands/subcommands/hero/describe.js create mode 100644 game/hero/accessible-classes.json create mode 100644 game/hero/pick-class/pick-class-embed.js create mode 100644 game/hero/pick-class/pick-class-handler.js diff --git a/assets/classes/mage.png b/assets/classes/full-image/mage.png similarity index 100% rename from assets/classes/mage.png rename to assets/classes/full-image/mage.png diff --git a/assets/classes/no-image.png b/assets/classes/full-image/no-image.png similarity index 100% rename from assets/classes/no-image.png rename to assets/classes/full-image/no-image.png diff --git a/assets/classes/paladin.png b/assets/classes/full-image/paladin.png similarity index 100% rename from assets/classes/paladin.png rename to assets/classes/full-image/paladin.png diff --git a/assets/classes/ranger.png b/assets/classes/full-image/ranger.png similarity index 100% rename from assets/classes/ranger.png rename to assets/classes/full-image/ranger.png diff --git a/assets/classes/shaman.png b/assets/classes/full-image/shaman.png similarity index 100% rename from assets/classes/shaman.png rename to assets/classes/full-image/shaman.png diff --git a/assets/classes/warrior.png b/assets/classes/full-image/warrior.png similarity index 100% rename from assets/classes/warrior.png rename to assets/classes/full-image/warrior.png diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index a3de28a..abd398b 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -307,7 +307,7 @@ class CombatMessageAPI { // }); // }) const className = player.className || player?.hero.className || "no-image" - const attachment = new Discord.MessageAttachment(`./assets/classes/${className}.png`, `${className}.png`); + const attachment = new Discord.MessageAttachment(`./assets/classes/full-image/${className}.png`, `${className}.png`); const embedResult = new Discord.MessageEmbed() .attachFiles(attachment) diff --git a/commands/commands.js b/commands/commands.js index 9046394..eeb7608 100644 --- a/commands/commands.js +++ b/commands/commands.js @@ -34,7 +34,7 @@ module.exports = { }; const generateCommandEmbed = ()=> { - const allStatisticsCommands = ["army", "cooldowns", "grid", "rank", "resources", "tax"]; + const allStatisticsCommands = ["army", "cooldowns", "grid", "rank", "resources", "tax", "hero"]; const allFightingCommands = ["duel [@player]", "dungeon", "hunt", "miniboss", "raid", "stake [@player]", "tower"]; const allEconomyCommands = ["build", "buy", "dailyPrize", "lottery", "use", "weeklyPrize"]; const allWorkingCommands = ["collect", "craft", "destroy", "equip", "explore", "look", "produce", "recruit", "travel"]; diff --git a/commands/hero.js b/commands/hero.js new file mode 100644 index 0000000..d534d59 --- /dev/null +++ b/commands/hero.js @@ -0,0 +1,17 @@ +const fs = require("fs"); + +module.exports = { + name: "hero", + description: "All hero commands", + async execute(message, args, user) { + const subcommands = fs + .readdirSync("./commands/subcommands/hero") + .filter((file) => file.endsWith(".js")); + if(subcommands.find(subcommand => subcommand.split(".js")[0] === args[0])){ + const command = require(`./subcommands/hero/${args[0]}`); + return command.execute(message, args.slice(1), user) + } else { + // Show hero embed + } + }, +}; \ No newline at end of file diff --git a/commands/subcommands/hero/describe.js b/commands/subcommands/hero/describe.js new file mode 100644 index 0000000..04ebd69 --- /dev/null +++ b/commands/subcommands/hero/describe.js @@ -0,0 +1,32 @@ +const { allClasses } = require("@three-horned-helmet/combat-system-mega-rpg") + +module.exports = { + name: "describe", + description: "Describes a class", + usage: "!hero describe ", + async execute(message, args, user) { + if(!args.length) return message.channel.send(this.usage) + + const capitalizeFirstLetter = (string) => { + return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); + } + const convertFromCamelcase = (string) => { + return capitalizeFirstLetter(string.replace(/([A-Z])/g, " $1")); + } + + const classInfo = allClasses[capitalizeFirstLetter(args[0])] + + if(classInfo){ + const { abilityConstants, description } = classInfo + const abilitiesKeys = Object.keys(abilityConstants) + const abilitiesStrings = abilitiesKeys.map((abilityKey, i) => `${i+1}) ${convertFromCamelcase(abilityKey)}: *${abilityConstants[abilityKey].description}*`) + + const classDescriptionString = `**__${capitalizeFirstLetter(args[0])}:__** \n${description}` + const abilitiesDescriptionString = `**__Abilities:__** \n${abilitiesStrings.join("\n")}` + + return message.channel.send(`${classDescriptionString}\n\n${abilitiesDescriptionString}`); + } else { + return message.channel.send(`The hero **${args[0]}** does not exists. Make sure you wrote the class correctly`) + } + }, +}; \ No newline at end of file diff --git a/game/hero/accessible-classes.json b/game/hero/accessible-classes.json new file mode 100644 index 0000000..ec89556 --- /dev/null +++ b/game/hero/accessible-classes.json @@ -0,0 +1,3 @@ +{ + "startingClasses": ["Warrior", "Mage", "Shaman", "Ranger"] +} \ No newline at end of file diff --git a/game/hero/pick-class/pick-class-embed.js b/game/hero/pick-class/pick-class-embed.js new file mode 100644 index 0000000..e6f8f12 --- /dev/null +++ b/game/hero/pick-class/pick-class-embed.js @@ -0,0 +1,95 @@ +const Discord = require("discord.js"); +const Canvas = require("canvas"); +const fs = require("fs"); +const startingClasses = require("../accessible-classes.json").startingClasses + +const createGridCanvas = async () => { + const EXTRA_CANVAS_Y_SIZE = 130// 60 + + const canvas = Canvas.createCanvas(700, 700 + EXTRA_CANVAS_Y_SIZE); + const ctx = canvas.getContext("2d"); + + const gridSize = Math.ceil(Math.sqrt(startingClasses.length)); + + ctx.font = "bold 40px sans-serif"; + ctx.fillStyle = "#FFFFFF"; + + ctx.fillText( + `Pick a class`, 230, 40 + ); + + ctx.font = "28px sans-serif"; + ctx.fillStyle = "#FFFFFF"; + + ctx.fillText( + `To pick a class type: !pick `, 120, 70 + ); + ctx.fillText( + `For more info type: !hero describe `, 60, 100 + ); + + // Wait for Canvas to load the image + const classImages = startingClasses.map(startingClass => { + return new Promise((resolve) => { + // Add reject error handling pl0x + try{ + // check if file exists + const imgUrl = `./assets/classes/full-image/${startingClass.toLowerCase()}.png`; + if (fs.existsSync(imgUrl)) { + return resolve( + Canvas.loadImage(imgUrl), + ); + } + else { + return resolve( + Canvas.loadImage("./assets/no-image.png"), + ); + } + } + catch (err) { + console.error(`Image does not exist, ${startingClass}`, err); + } + }); + }); + + const images = await Promise.all(classImages); + + ctx.font = "36px sans-serif"; + ctx.fillStyle = "#FFFFFF"; + + // Draw images onto the main canvas + for(let i = 0; i < images.length; i++) { + const { width } = canvas; + const xPos = Math.floor(i % gridSize) + const yPos = Math.floor(i / gridSize) + ctx.drawImage( + images[i], + (width * 0.02 + ((width / gridSize) * xPos)), + (width * 0.05 + ((width / gridSize) * yPos)) + EXTRA_CANVAS_Y_SIZE, + (width / gridSize) - 20, + (width / (gridSize + gridSize / 6)) - 20, + ); + + const className = startingClasses[i] + ctx.fillText( + `${className[0].toUpperCase() + className.slice(1)}`, + (((width / 6) - (className.length + 3) * 2 * gridSize) + ((width / gridSize) * xPos) + 30), + (width * 0.04 + ((width / gridSize) * yPos) + EXTRA_CANVAS_Y_SIZE), + ); + } + + // Use helpful Attachment class structure to process the file for you + const attachment = new Discord.MessageAttachment(canvas.toBuffer()); + + return attachment; +}; + +const successfullyPickedClassEmbed = (className) => { + return `Congratulations! You have successfully picked the class **${className}**!` +} + +const somethingWentWrongEmbed = () => { + return `Something went wrong while picking a class. Please try again.` +} + +module.exports = { createGridCanvas, successfullyPickedClassEmbed, somethingWentWrongEmbed }; \ No newline at end of file diff --git a/game/hero/pick-class/pick-class-handler.js b/game/hero/pick-class/pick-class-handler.js new file mode 100644 index 0000000..ee03c1d --- /dev/null +++ b/game/hero/pick-class/pick-class-handler.js @@ -0,0 +1,61 @@ +const { createGridCanvas, successfullyPickedClassEmbed, somethingWentWrongEmbed } = require("./pick-class-embed") +const startingClasses = require("../accessible-classes.json").startingClasses + +const pickClassHandler = async (message, user) => { + const PICK_CLASS_TIMER_MS = 15 * 1000 + const pickClassCanvas = await createGridCanvas() + + await message.channel.send(pickClassCanvas) + + const filter = (response) => { + // checks if person included included in the fight + return user.account.userId === response.author.id; + }; + + const collector = await message.channel.createMessageCollector(filter, { + time: PICK_CLASS_TIMER_MS, + errors: ["time"], + }); + + let pickedClass; + collector.on("collect", async (result) => { + if (result.author.bot) { + return; + } + + if(!result.content) return + + pickedClass = startingClasses.find(startingClass => { + const splitResult = result.content.split(" ") + if(splitResult[0] === "!pick" && splitResult.length === 2){ + return startingClass.toLowerCase() === splitResult[1].toLowerCase() + } + }) + + if(!pickedClass) return + + // stops collecting if all humans have answered + // await sleep(1500); + collector.stop(); + }); + + // TODO: Error handling (on timeout) + collector.on("end", async () => { + if(!pickedClass){ + return message.channel.send(`<@${message.author.id}>: You did not pick a class within the timelimit. Please try again.`) + } + + try { + user.pickClass(pickedClass) + await user.save() + + await message.channel.send(`<@${message.author.id}>: ${successfullyPickedClassEmbed(pickedClass)}`) + } + catch { + message.channel.send(`<@${message.author.id}>: ${somethingWentWrongEmbed()}`) + console.error("Something went wrong while picking a class: ", pickedClass, user) + } + }); +} + +module.exports = { pickClassHandler } \ No newline at end of file diff --git a/index.js b/index.js index e0c0474..985bbff 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ const User = require("./models/User"); const { getWelcomeMessage, createNewUser } = require("./game/_GLOBAL_HELPERS"); const { msToHumanTime } = require("./game/_GLOBAL_HELPERS"); const { handleCaptcha } = require("./game/_GLOBAL_HELPERS/captcha"); +const { pickClassHandler } = require("./game/hero/pick-class/pick-class-handler") const token = process.env.DISCORD_TOKEN; const prefix = process.env.DISCORD_PREFIX; @@ -95,6 +96,11 @@ client.on("message", async (message) => { return message.reply(`You are banned from Mega-RPG. You can plead for an unban at our support servers - or wait:\n **${msToHumanTime(userProfile.account.banTime - Date.now())}**`); } + if(!userProfile.hero.className){ + await pickClassHandler(message, userProfile) + return + } + if (!userProfile.account.testUser && ["hunt", "collect", "raid", "fish"].includes(command.name) && Math.random() <= 0.01) { return handleCaptcha(message, userProfile, 3, Date.now()); } diff --git a/models/User.js b/models/User.js index e74f503..85727a7 100644 --- a/models/User.js +++ b/models/User.js @@ -92,6 +92,7 @@ const userSchema = new Schema({ }, className: { type: String, + enum: ["Warrior", "Mage", "Ranger", "Shaman"], default: "Warrior" }, health: { @@ -666,6 +667,10 @@ userSchema.methods.changeTowerLevel = function(towerCategory, newLevel) { this.tower[towerCategory].level = newLevel; }; +userSchema.methods.pickClass = async function(className) { + this.hero.className = className +}; + // will return between 50% and 66% progress of level const getNewCurrentExpAfterDeath = (oneLevelDown, currentLevel)=>{ const difference = currentLevel - oneLevelDown; diff --git a/package-lock.json b/package-lock.json index 6a92386..2dd0a72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.4", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.10", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", @@ -477,9 +477,9 @@ } }, "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", - "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.10.tgz", + "integrity": "sha512-pMXeym/CvHD516S2muzS5z3quqWkq4zSbBhKApc5eFh1D5XE+CuGWC8GgwUsu0us3s7IKmq1xud3YujIt1frqg==" }, "node_modules/@types/bson": { "version": "4.0.5", @@ -4758,9 +4758,9 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", - "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.10.tgz", + "integrity": "sha512-pMXeym/CvHD516S2muzS5z3quqWkq4zSbBhKApc5eFh1D5XE+CuGWC8GgwUsu0us3s7IKmq1xud3YujIt1frqg==" }, "@types/bson": { "version": "4.0.5", diff --git a/package.json b/package.json index 52ec7cc..394c0bd 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.7", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.10", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From 559a9301ce060b1ccee6cf8dc009034f4e6610ff Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sun, 21 Nov 2021 11:33:22 +0100 Subject: [PATCH 11/19] bump combat system --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 394c0bd..f9232ae 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "author": "Tormod & Markus", "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.10", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.11", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", From bba71324ac5dc394408e1b4325124cbd9b1c95ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tormod=20Flesj=C3=B8?= Date: Sun, 21 Nov 2021 11:38:21 +0100 Subject: [PATCH 12/19] add wrappers --- .../advancedClassesCombat/CombatMessageAPI.js | 132 +- combat/advancedClassesCombat/CombatWrapper.js | 202 + combat/advancedClassesCombat/Raid.js | 37 + combat/advancedClassesCombat/WorldCombat.js | 146 + combat/advancedClassesCombat/index.js | 16 +- commands/raid.js | 10 +- commands/test.js | 39 +- game/_CONSTS/cooldowns.js | 38 +- game/quest/quest-utils.js | 6 +- .../grassy-plains/refugees-in-the-forest.js | 5 +- game/raid/index.js | 9 +- models/User.js | 23 +- package-lock.json | 5092 +++-------------- package.json | 1 + 14 files changed, 1175 insertions(+), 4581 deletions(-) create mode 100644 combat/advancedClassesCombat/CombatWrapper.js create mode 100644 combat/advancedClassesCombat/Raid.js create mode 100644 combat/advancedClassesCombat/WorldCombat.js diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 68defbc..217d204 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -1,15 +1,6 @@ const Discord = require("discord.js"); const combatConstants = require("../../game/_CONSTS/combat.json") -const fs = require('fs'); -/* -options: { - additionalRewards: { - exp: 300, - gold: 200 - } -} -*/ class CombatMessageAPI { constructor(message, options = {}) { this.message = message @@ -23,64 +14,27 @@ class CombatMessageAPI { this.round = 1 } - // Options: { withTeam: Boolean }. + sendMessage(message){ + return this.message.channel.send(message) + } + genericPrefightRuleGenerator = async () => { - const { withTeam } = this.options - // const disallowed = minibossStartAllowed(user); - // if (disallowed) { - // return message.channel.send(disallowed); - // } - // const now = new Date(); - // user.setNewCooldown("miniboss", now); - // await user.save(); - - if(withTeam){ - // // Handle invitations here - // const invitationEmbed = _invitationEmbed(teamOne, teamTwo); - // const invitation = await message.channel.send(invitationEmbed); - // await invitation.react(minibossIcon); - // const reactionFilter = (reaction) => reaction.emoji.name === minibossIcon; - // const collector = await invitation.createReactionCollector(reactionFilter, { max: 10, time: 1000 * 20, errors: ["time"] }); - // collector.on("collect", async (result, rUser) => { - // if (rUser.bot) { - // return; - // } - // if (progress.teamGreen.length > 9) { - // return collector.stop(); - // } - // const helper = await User.findOne({ "account.userId": rUser.id }); - - // const disallowedHelper = validateHelper(progress, helper, rUser.id); - // if (disallowedHelper) { - // return message.channel.send(`<@${message.author.id}>: ${disallowedHelper}`); - // } - // progress.teamGreen.push(helper); - // }); - - // collector.on("end", async () => { - // const combatResult = await createCombatRound(message, progress); - // if (combatResult.winner.victory === "green") { - // const rewards = generateRewards(combatResult); - // await giveRewards(rewards, combatResult); - // const embed = createMinibossResult(rewards, combatResult); - // message.channel.send(embed); - // } - // }); - } + console.log("genericPrefightRuleGenerator") const rulesEmbed = this._fightDetailsEmbed() - const invitation = await this.message.channel.send(rulesEmbed); + await this.message.channel.send(rulesEmbed); } pickAbilityMessage = async (player, abilities) => { - const playerName = player.name + console.log("pickAbilityMessage") + const { name } = player; const allLetters = "abcefghijklmnopqrstuvwxyz".split("") const capitalizeFirstLetter = (string) => { return string.charAt(0).toUpperCase() + string.slice(1); } - const abilitiesString = `__${playerName}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` + const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` - const abilityPickerEmbed = await this._abilityPickerEmbed(player, abilitiesString) + const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) await this.message.channel.send(abilityPickerEmbed) const filter = (response) => { @@ -95,6 +49,7 @@ class CombatMessageAPI { let pickedAbility; collector.on("collect", async (result) => { + console.log("result.content", result.content) if (result.author.bot) { return; } @@ -118,22 +73,27 @@ class CombatMessageAPI { } deathMessage = async (players = []) => { + console.log("deathMessage") this.deathMessages = this.deathMessages.concat(players) } effectMessage = async (message) => { + console.log("effectMessage") this.effectMessages.push(message) } abilityMessage = async (abilityResponse) => { + console.log("abilityMessage") this.previousAbilityResponse.push(abilityResponse) } newRoundMessage = async (round) => { + console.log("newRoundMessage") this.round = round } endGameMessage = async (winningTeam) => { + console.log("endGameMessage") const extraFields = (fields) => { this._endGameExtraFieldsEmbed(winningTeam, fields) } @@ -141,42 +101,13 @@ class CombatMessageAPI { await this.message.channel.send(lastCombatTurnEmbed) } - - - - _invitationEmbed = (miniboss, user) => { - // const { username } = user.account; - // const { currentLocation } = user.world; - - // const rules = `\`Army allowed: ${getIcon(options.allowFriends, "icon")}\`\n \`Helpers allowed: ${getIcon(miniboss.combatRules.helpersAllowed, "icon")}\`\n \`Max rounds: ${miniboss.combatRules.maxRounds}\`\n \`Attacks each round: ${miniboss.allowedNumOfAttacks}\``; - // const rewards = `${getIcon("gold")} \`Gold: ${miniboss.rewards.gold}\`\n ${getIcon("xp")} \`XP: ${miniboss.rewards.xp}\` \n ${getIcon(miniboss.rewards.dungeonKey)} \`Key: ${miniboss.rewards.dungeonKey}\``; - - // const embedInvitation = new Discord.MessageEmbed() - // .setTitle(`A Miniboss has been triggered by ${username}!`) - // .setDescription(`Help to defeat ${getIcon("miniboss")} ${miniboss.name} from ${getIcon(currentLocation)} ${currentLocation} `) - // .setColor(sideColor) - // .addFields( - // { - // name: "Rules", - // value: rules, - // inline: true, - // }, - // { - // name: `${miniboss.name}'s reward:`, - // value: rewards, - // inline: true, - // }, - // ) - // .setFooter(`React with a ${getIcon("miniboss", "icon")} within 20 seconds to participate! (max 10!)`); - - // return embedInvitation; - } - _getName = player => { + console.log("_getName") return player.name || player?.account.username || "npc" } _displayPlayerHp = (player) => { + console.log("_displayPlayerHp") // embed get's messed up if hp bar is longer than 20 const MAX_REPEATING = 20; const { health, currentHealth } = player; @@ -192,6 +123,7 @@ class CombatMessageAPI { }; _fightDetailsEmbed = () => { + console.log("_fightDetailsEmbed") const { title, description, sideColor, rewards } = this.options const namesTeamOne = this.game.originalTeamOne.map(this._getName) const namesTeamTwo = this.game.originalTeamTwo.map(this._getName) @@ -223,7 +155,8 @@ class CombatMessageAPI { return fightDetailsEmbed } - _abilityPickerEmbed = async (player, abilitiesString, extraFields = (fields) => {}) => { + _abilityPickerEmbed = (player, abilitiesString) = () => { + console.log("_abilityPickerEmbed") const { sideColor } = this.options const displayHealth = player => { @@ -252,7 +185,7 @@ class CombatMessageAPI { if(this.previousAbilityResponse.length){ const midLeft = { - name: "Previous turn's", + name: "Previous turn", value: this.previousAbilityResponse.join("\n \n"), inline: true, }; @@ -263,7 +196,7 @@ class CombatMessageAPI { if(player && abilitiesString){ const bottomLeft = { - name: `Choose your ability ${this._getName(player)}!`, + name: `Choose your ability, ${this._getName(player)}!`, value: abilitiesString, inline: true, }; @@ -291,36 +224,20 @@ class CombatMessageAPI { const title = `${this._getName(player)}'s turn!` - // const attachment = await new Promise ((resolve, reject) => { - // fs.stat(`./assets/classes/${player.className}.png`, function(err, stat) { - // if(err == null) { - // console.log("EXISTS") - // resolve(new Discord.MessageAttachment(`./assets/classes/${player.className}.png`, `${player.className}.png`)); - // } else if(err.code === 'ENOENT') { - // console.log("NOT EXISTS") - // resolve(new Discord.MessageAttachment(`./assets/classes/warrior.png`, `warrior.png`)); - // } else { - // console.log('Some other error: ', err.code); - // reject() - // } - // }); - // }) const className = player.className || player?.hero.className || "no-image" const attachment = new Discord.MessageAttachment(`./assets/classes/${className}.png`, `${className}.png`); const embedResult = new Discord.MessageEmbed() .attachFiles(attachment) .setTitle(title) - // .setDescription(description) .setColor(sideColor || this.defaultSideColor) .addFields(...combatFields) - // .setImage(`../../assets/classes/${player.className}.png`) .setThumbnail(`attachment://${player.className}.png`) - // .setFooter(Object.values(winner).length ? winner.msg : footer); return embedResult; }; _endGameExtraFieldsEmbed = (winningTeam, fields) => { + console.log("_endGameExtraFieldsEmbed") const {additionalRewards} = this.options const newLineSpace = { @@ -371,6 +288,7 @@ class CombatMessageAPI { } handleRewards = () => { + console.log("handleRewards") const { additionalRewards } = this.options const allRewards = {} const winningUsers = this.game.winningTeam.filter(player => !player.isNpc && player.account?.userId) diff --git a/combat/advancedClassesCombat/CombatWrapper.js b/combat/advancedClassesCombat/CombatWrapper.js new file mode 100644 index 0000000..36adc1b --- /dev/null +++ b/combat/advancedClassesCombat/CombatWrapper.js @@ -0,0 +1,202 @@ +const Discord = require("discord.js"); +const User = require("../../models/User"); +const { GameEngine } = require("@three-horned-helmet/combat-system-mega-rpg"); +const { CombatMessageAPI } = require("./CombatMessageAPI"); +const { asyncForEach } = require("../../game/_GLOBAL_HELPERS"); +const { getIcon } = require("../../game/_CONSTS/icons"); + +/* +const options = { + maxRounds: Number, + armyAllowed: Boolean, + helpersAllowed: Boolean, + isPVP: Boolean, + isPVPs: Boolean +} */ + +class CombatWrapper { + constructor(data) { + if (!data.user || !data.nameOfClass || !data.message || !data.options) { + throw new Error( + "Cannot create an instance without user, nameOfClass, Discord Message or options" + ); + } + this.messageAPI = new CombatMessageAPI(data.message); + this.user = data.user; + this.nameOfClass = data.nameOfClass; + this.options = data.options; + this.game; + this.greenTeam = []; + this.redTeam = []; + this.combatCanStart = true; + this.now = new Date(); + } + async startCombat() { + await this.setupCombat(); + if (!this.combatCanStart) { + return; + } + await this.game.startGame(); + } + async setupCombat() { + if (this.combatInvitationsAllowed) { + await this.handleCombatInvitation(); + } + this.checkCombatAllowed(); + this.game = new GameEngine(this.messageAPI, this.greenTeam, this.redTeam, this.options); + } + checkCombatAllowed() { + if (!this.greenTeam.length) { + return this.errorHandler("Missing team one"); + } + if (!this.redTeam.length) { + return this.errorHandler("Missing team two"); + } + } + addGreenTeam(unit) { + console.log("adding unit to team one"); + Array.isArray(unit) ? this.greenTeam.push(...unit) : this.greenTeam.push(unit); + } + addRedTeam(unit) { + console.log("adding unit to team two"); + Array.isArray(unit) ? this.redTeam.push(...unit) : this.redTeam.push(unit); + } + convertWorldUnitToNpc(worldUnit) { + // DEFENSE? todo + // classname + const { name, stats } = worldUnit; + return { + _id: Math.random().toString(), + isNpc: true, + account: { + username: name + }, + hero: { + rank: 3, + health: stats.health, + currentHealth: stats.health, + attack: stats.attack, + defense: stats.attack, + className: "Mage" + } + }; + } + convertArmyToNpc(user) { + // todo classname + // todo balance this unit (with armory) + const { units, armory } = user.army; + return { + _id: Math.random().toString(), + isNpc: true, + account: { + username: `${user.account.username}'s army'` + }, + hero: { + rank: 3, + health: 200, + currentHealth: 200, + attack: 30, + defense: 30, + className: "Mage" + } + }; + } + convertNpcToArmy(npc, user) { + // TODO calculate loss of health and remove percentage of units + console.log("converting to army"); + } + errorHandler(error) { + console.error("ERROR: ", error); + this.combatCanStart = false; + this.messageAPI.sendMessage(error); + } + + async handleCombatInvitation() { + + const getCombatIcons = () => ["🟢", "🔴"]; // should be 3 + + const icons = getCombatIcons(); + + + const invitation = await message.channel.send(createEmbedInvitation(this)); + const reactionIcon = getIcon("place", "icon"); + + const reactionFilter = (reaction) => icons.includes(reaction.emoji.name); + + await asyncForEach((icons), async (r)=>{ + raceInvitation.react(r); + }); + + const collector = await invitation.createReactionCollector(reactionFilter, { time: 1000 * 20, errors: ["time"] }); + + collector.on("collect", async (result, reactedUser) => { + const user = await User.findOne({ "account.userId": reactedUser.id }).lean(); + // todo, + // is not reactedUser.bot + // team is not too big + // user has health + // user is not in any team team + // addGreenTeam + this.addGreenTeam(user); + }); + + collector.on("end", async () => { + // await startgame? + }); + + + } +} +module.exports = CombatWrapper; + + +const createEmbedInvitation = (place, user) => { + + + const sideColor = "#45b6fe"; + const { username } = user.account; + const placeIcon = getIcon("place"); + const rules = `\` ${place.rooms.length} Rooms\`\n ${getIcon(place.boss.rules.canKill)} \`place deadly\`\n${getIcon(place.boss.rules.allowHelpers, "icon")} \`helpers allowed\`\n\n**Unclocks**: ${getIcon(place.boss.unlocks)} **${place.boss.unlocks}**\n`; + const stats = `${getIcon("health")} \`Health: ${place.boss.stats.health}\`\n ${getIcon("attack")} \`Attack: ${place.boss.stats.attack}\`\n ${getIcon(place.boss.stats.healing)} \`Healing\`\n`; + const rewards = `${getIcon("gold")} \`Gold: ${place.boss.rewards.gold}\`\n ${getIcon("xp")} \`XP: ${place.boss.rewards.xp}\`\n${getIcon(!!place.boss.rewards.drop.length)} \`Loot drop\`\n\n `; + const bossWeapons = place.boss.bossWeapons.map(w => `${getIcon(w)} \`${w}\``); + + const fields = [{ + name: `${place.boss.name}'s Boss stats:`, + value: stats, + inline: true, + }, + { + name: `${place.boss.name}'s weapons:`, + value: bossWeapons, + inline: true, + }, + + { + name: "\u200B", + value: "\u200B", + inline: false, + }, + { + name: "Rules", + value: rules, + inline: true, + }, + + { + name: `${place.boss.name}'s rewards:`, + value: rewards, + inline: true, + }]; + + const embedInvitation = new Discord.MessageEmbed() + .setTitle(`${username} is going for the place !!`) + .setDescription(`Help taking out ${placeIcon} **${place.boss.name}** in ${place.name}!`) + .setColor(sideColor) + .addFields( + ...fields, + ) + .setFooter(`React with a ${getIcon("place", "icon")} within 20 seconds to participate! (max 5!)`); + return embedInvitation; + +}; \ No newline at end of file diff --git a/combat/advancedClassesCombat/Raid.js b/combat/advancedClassesCombat/Raid.js new file mode 100644 index 0000000..5ff55e9 --- /dev/null +++ b/combat/advancedClassesCombat/Raid.js @@ -0,0 +1,37 @@ +/* eslint-disable no-inline-comments */ +const WorldCombat = require("./WorldCombat"); + +const NAME_OF_CLASS = "raid"; +const config = { + minHealthPercentage: 0.05, // 5% + minHealthPoints: 50, +}; + +const options = { + maxRounds: 3, + combatInvitationsAllowed: false, + armyAllowed: true, +}; + +class Raid extends WorldCombat { + constructor(data = { options }) { + super({ ...data, nameOfClass: NAME_OF_CLASS }); + this.setupRaid(); + } + static getNameOfClass() { + return NAME_OF_CLASS; + } + checkRaidAllowed() { + if (this.user.hero.currentHealth < this.user.hero.health * config.minHealthPercentage && this.user.hero.currentHealth < config.minHealthPoints) { + return this.errorHandler(`Your'e too weak to raid (**${this.user.hero.currentHealth} hp**)`); + } + } + setupRaid() { + this.checkRaidAllowed(); + this.addGreenTeam(this.user); + this.addGreenTeam(this.convertArmyToNpc(this.user)); + this.addRedTeam(this.convertWorldUnitToNpc(this.placeInfo)); + } +} + +module.exports = Raid; \ No newline at end of file diff --git a/combat/advancedClassesCombat/WorldCombat.js b/combat/advancedClassesCombat/WorldCombat.js new file mode 100644 index 0000000..7743fd5 --- /dev/null +++ b/combat/advancedClassesCombat/WorldCombat.js @@ -0,0 +1,146 @@ +/* eslint-disable no-inline-comments */ +const CombatWrapper = require("./CombatWrapper"); +const { worldLocations } = require("../../game/_UNIVERSE"); +const { getIcon } = require("../../game/_CONSTS/icons"); + +const { userIsOnCooldown } = require("../../game/_CONSTS/cooldowns"); + + +class WorldCombat extends CombatWrapper { + + constructor(data = {}) { + super(data); + this.place = data.place = ""; + this.worldIcon = getIcon(this.user.world.currentLocation); + this.placeInfo = this.getPlaceInfo(); + this.actionIcon = getIcon(this.nameOfClass); + this.setupWorldCombat() + } + + setupWorldCombat(){ + this.checkWorldCombatAllowed() + } + checkWorldCombatAllowed(){ + // cooldown + if (!this.placeInfo){ + return this.errorHandler("Something went wrong"); + } + if (userIsOnCooldown(this.nameOfClass, this.user)) { + return this.errorHandler("You are on cooldown"); + } + } + + getPlaceInfo() { + const { currentLocation } = this.user.world; + const placesInCurrentWorld = worldLocations[currentLocation].places; + const userExploredPlaces = this.user.world.locations[currentLocation].explored; + + const userExploredActionPlaces = userExploredPlaces + .filter(p => placesInCurrentWorld[p].type === this.nameOfClass) + .map(p => p.replace(/\s/g, "").toLowerCase()); + + // user has not found any place to explore + if (!userExploredActionPlaces.length) { + return this.errorHandler(`You have not explored any place to ${this.nameOfClass} in ${this.worldIcon} ${currentLocation}, try \`!explore\` to find a place to ${this.nameOfClass}`); + } + + const notActionPlaces = Object.keys(placesInCurrentWorld) + .filter(p => placesInCurrentWorld[p].type !== this.nameOfClass) + .map(p => placesInCurrentWorld[p]) + .map(p => this.#formatName(p.name)); + + // if user tries to perform an action on a wrong place + if (notActionPlaces.includes(this.#formatName(this.place))) { + return this.errorHandler(`This is not a ${this.nameOfClass}`); + } + + const listOfActionPlaces = Object.values(placesInCurrentWorld) + .filter(p => userExploredActionPlaces.includes(this.#formatName(p.name))) + return this.place + ? listOfActionPlaces.find(p => this.#formatName(p.name) === this.place) + : listOfActionPlaces[Math.floor(Math.random() * listOfActionPlaces.length)]; + } + + questHandler(){ + // temp. remove when new quest have arrived. + if (this.currentLocation !== "Grassy Plains") { + return; + } + + // Does the user have a quest here + const currentQuest = this.user.quests.find(q => { + if (q.pve) { + return q.pve.find(action => action.name === this.placeInfo.name && !action.completed) && q.started + } + }) + console.log({currentQuest}) + + + if(currentQuest) { + // Update the objective in the users' quest + let objectiveFound = false; + let unique = false; + console.log(currentQuest.pve) + currentQuest.pve = currentQuest.pve.map(pve => { + // Does this math.random actually work? + if(pve.chance > Math.random()) { + objectiveFound = true; + pve.completed = true; + + // If you can only do the fight once + unique = !!pve.unique + } + return pve; + }); + + if(unique){ + this.user.removeExploredArea(currentLocation, place); + } + + // Find the quest in the quest object + let questObj; + currentQuest.questKeySequence.forEach(questKey => { + questObj = questObj ? questObj[questKey] : allQuests[questKey]; + }); + console.log(questObj) + + if(objectiveFound) { + console.log(objectiveFound) + this.user.updateQuestObjective(currentQuest); + if(questObj.foundNewQuest) questObj.foundNewQuest(this.user); + + return questObj.found; + } + return questObj.notFound; + } + + // GETTING A NEW QUEST + // Is there a quest for the location, and has it been started/found already? + const quest = Object.values(allQuests[currentLocation]).find(q => q.obtaining && q.obtaining.area === place && !this.user.completedQuests.includes(q.name) && !this.user.quests.find(startedQuests => startedQuests.name === q.name)); + + // If no quest or low luck, return + const obtainNumber = Math.random(); + if(!quest || obtainNumber > quest.obtaining.chance) return; + + // Add the new quest to the user + const newQuest = { + name: quest.name, + started: false, + questKeySequence: quest.questKeySequence, + pve: quest.pve, + }; + + this.user.addNewQuest(newQuest); + + this.messageAPI.queueMessage({ + name: `${getIcon("quest")}Quest${getIcon("quest")}`, + value: quest.intro, + }) + } + + // removes spaces and returns lowercased string + #formatName = (name) => name.replace(/\s/g, "").toLowerCase() +} + + +module.exports = WorldCombat; \ No newline at end of file diff --git a/combat/advancedClassesCombat/index.js b/combat/advancedClassesCombat/index.js index 7bad86e..9c929d2 100644 --- a/combat/advancedClassesCombat/index.js +++ b/combat/advancedClassesCombat/index.js @@ -1,12 +1,12 @@ -const { GameEngine } = require("@three-horned-helmet/combat-system-mega-rpg") -const { CombatMessageAPI } = require("./CombatMessageAPI") +const { GameEngine } = require("@three-horned-helmet/combat-system-mega-rpg"); +const { CombatMessageAPI } = require("./CombatMessageAPI"); const preGameHandler = async (message, teamOne, teamTwo, options = {}) => { - const messageAPI = new CombatMessageAPI(message, options) - const game = new GameEngine(messageAPI, teamOne, teamTwo, options = {}) - await messageAPI.genericPrefightRuleGenerator() + const messageAPI = new CombatMessageAPI(message, options); + const game = new GameEngine(messageAPI, teamOne, teamTwo, options = {}); + await messageAPI.genericPrefightRuleGenerator(); - game.startGame() -} + game.startGame(); +}; -module.exports = { preGameHandler } \ No newline at end of file +module.exports = { preGameHandler }; \ No newline at end of file diff --git a/commands/raid.js b/commands/raid.js index c1b6dbe..b96d7b5 100644 --- a/commands/raid.js +++ b/commands/raid.js @@ -1,5 +1,6 @@ const { getIcon } = require("../game/_CONSTS/icons"); -const { handleRaid } = require("../game/raid"); +/* const { handleRaid } = require("../game/raid"); */ +const Raid = require("../combat/advancedClassesCombat/Raid"); module.exports = { name: "raid", @@ -13,9 +14,8 @@ module.exports = { bv: "Bandit Vault", }, async execute(message, args, user) { - // trigger captcha 1% of time - const place = args.join("").toLowerCase(); - const result = await handleRaid(user, place); - return message.channel.send(result); + const location = args.join("").toLowerCase(); + const raid = new Raid({ message, user, location }); + await raid.startCombat(); }, }; diff --git a/commands/test.js b/commands/test.js index 88b876f..c75809e 100644 --- a/commands/test.js +++ b/commands/test.js @@ -1,9 +1,9 @@ /* eslint-disable no-inline-comments */ -const { createCombatRound } = require("../combat/advancedCombat"); -const { handleMiniboss } = require("../game/miniboss") -const { preGameHandler } = require("../combat/advancedClassesCombat") -const { getArmyTowerEnemies } = require("../game/tower/army-tower/army-tower-enemies/army-tower-enemies"); +/* const { createCombatRound } = require("../combat/advancedCombat"); */ +/* const { handleMiniboss } = require("../game/miniboss") */ +const { preGameHandler } = require("../combat/advancedClassesCombat"); +/* const { getArmyTowerEnemies } = require("../game/tower/army-tower/army-tower-enemies/army-tower-enemies"); */ const User = require("../models/User"); @@ -17,8 +17,8 @@ module.exports = { } // const t = await User.findOne({ "account.username":"SpinningSiri" }); - const m = await User.findOne({ "account.username":"Ignore" }); - m.hero.className = "Warrior" + const m = await User.findOne({ "account.username":"SpinningSiri" }); + m.hero.className = "Mage"; const npc = { _id: "p-4", isNpc: true, @@ -27,36 +27,17 @@ module.exports = { }, hero: { rank: 3, - health: 180, - health: 180, - currentHealth: 10, + health: 200, + currentHealth: 200, attack: 30, defense: 30, className: "Mage" } - } + }; const additionalRewards = { exp: 400, gold: 200 - } - return preGameHandler(message, [m], [npc], {additionalRewards}) - - const npc2 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); - const npc3 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); - const npc4 = getArmyTowerEnemies(Math.floor(Math.random() * 100)); - - const progress = { - combatRules:{ - armyAllowed: false, - maxRounds: 3 - }, - teamGreen:[m, npc, npc2], - teamRed:[npc3, npc4], - embedInformation:{ - minimal: true - } }; - - return await createCombatRound(message, progress); + return preGameHandler(message, [m], [npc], { additionalRewards }); }, }; \ No newline at end of file diff --git a/game/_CONSTS/cooldowns.js b/game/_CONSTS/cooldowns.js index 0d7cdb8..421ad25 100644 --- a/game/_CONSTS/cooldowns.js +++ b/game/_CONSTS/cooldowns.js @@ -20,7 +20,7 @@ const cooldowns = { /** * function that could and should be used where ever there is need for cooldown * @param {string} actionType - eg: "explore" or "miniboss" -* @param {Object} user - usermodel from mongodb +* @param {Object} user - usermodel from db * @returns {Object} { response, Boolean, timeLeftInSec, String eg: "42" @@ -61,7 +61,7 @@ const onCooldown = (actionType, user) => { timeLeftInMs, timeLeftFormatted, message: `${actionType} is on cooldown! ${timeLeftInSec} seconds remaining until you can perform ${actionType}`, - embed: generateSingleCdEmbed(timeLeftInMs, user), + embed: generateSingleCdEmbed(user, timeLeftInMs), }; } return { @@ -70,8 +70,38 @@ const onCooldown = (actionType, user) => { }; +/** +* function that could and should be used where ever there is need for cooldown +* @param {string} actionType - eg: "explore" or "miniboss" +* @param {Object} user - usermodel from db +* @returns {Boolean} true if cooldown is over, false if not +} +*/ +const userIsOnCooldown = (actionType, user) => { + if (!actionType || !user) { + console.error("Missing arguments "); + return null; + } + if (!Object.keys(cooldowns).includes(actionType)) { + console.error(`Cooldown for ${actionType} has not been configured`); + return null; + } + const previousTime = user.cooldowns[actionType]; + const now = new Date(); + let cooldown = cooldowns[actionType]; + + const patreonType = user.account.patreon; + const patreonBonus = patreonType ? (cooldown * 0.15) : 0; + + cooldown -= patreonBonus; + const timePassed = Math.abs(previousTime - now); + + return timePassed < cooldown; +}; + // generates a discord embed for when the user tries to perform an action that is in cooldown -const generateSingleCdEmbed = (timeLeftInMs, user) => { +const generateSingleCdEmbed = (user, timeLeftInMs) => { + if (!timeLeftInMs) timeLeftInMs; const timeLeftSentence = timeLeftInMs > 60000 ? `You can't use this command. Cooldown is ${msToHumanTime(timeLeftInMs)}` : `You can't use this command for ${Math.ceil(timeLeftInMs / 1000)} seconds`; @@ -127,4 +157,4 @@ const generateAllCdEmbed = (user) => { }; -module.exports = { onCooldown, generateSingleCdEmbed, generateAllCdEmbed }; \ No newline at end of file +module.exports = { userIsOnCooldown, onCooldown, generateSingleCdEmbed, generateAllCdEmbed }; \ No newline at end of file diff --git a/game/quest/quest-utils.js b/game/quest/quest-utils.js index 4608d91..ce35736 100644 --- a/game/quest/quest-utils.js +++ b/game/quest/quest-utils.js @@ -24,7 +24,7 @@ const checkRaidAndHuntQuest = async (user, place, currentLocation) => { return pve; }); - if(unique) await user.removeExploredArea(currentLocation, place); + if(unique) user.removeExploredArea(currentLocation, place); // Find the quest in the quest object // const questObj = Object.values(allQuests[currentLocation]).find(q => q.name === currentQuest.name); @@ -35,9 +35,9 @@ const checkRaidAndHuntQuest = async (user, place, currentLocation) => { }); if(objectiveFound) { - await user.updateQuestObjective(currentQuest); + user.updateQuestObjective(currentQuest); - if(questObj.foundNewQuest) await questObj.foundNewQuest(user); + if(questObj.foundNewQuest) questObj.foundNewQuest(user); return questObj.found; } diff --git a/game/quest/quests/grassy-plains/refugees-in-the-forest.js b/game/quest/quests/grassy-plains/refugees-in-the-forest.js index 7ddc15a..d8ed831 100644 --- a/game/quest/quests/grassy-plains/refugees-in-the-forest.js +++ b/game/quest/quests/grassy-plains/refugees-in-the-forest.js @@ -61,7 +61,7 @@ module.exports = { name: "Dealing with Wolves", found: "You found some fresh Wolf Tracks\n**A new quest is available!**", notFound: "You found no signs of the Wolf Pack. Keep looking!", - foundNewQuest: async (user) => { + foundNewQuest: (user) => { // If you have not found The Wolf Pack already if(!user.completedQuests.includes("The Wolf Pack") && !user.quests.find(startedQuests => startedQuests.name === "The Wolf Pack")) { // Add next quest @@ -78,7 +78,6 @@ module.exports = { }; user.addNewQuest(newQuest); - await user.save(); return; } @@ -98,7 +97,7 @@ module.exports = { }; user.addNewQuest(newQuest); - await user.save(); + user.save(); return; } diff --git a/game/raid/index.js b/game/raid/index.js index 65c193d..a2d82d0 100644 --- a/game/raid/index.js +++ b/game/raid/index.js @@ -8,15 +8,15 @@ const { checkQuest } = require("../quest/quest-utils"); const handleRaid = async (user, place = null) => { // checks for cooldown - const cooldownInfo = onCooldown("raid", user); + /* const cooldownInfo = onCooldown("raid", user); if (cooldownInfo.response) { return cooldownInfo.embed; - } + } */ // checks for too low hp - if (user.hero.currentHealth < user.hero.health * 0.05 && user.hero.currentHealth < 50) { + /* if (user.hero.currentHealth < user.hero.health * 0.05 && user.hero.currentHealth < 50) { return `Your hero's health is too low (**${user.hero.currentHealth}**)`; - } + } */ const { currentLocation } = user.world; const placesInCurrentWorld = worldLocations[currentLocation].places; @@ -26,7 +26,6 @@ const handleRaid = async (user, place = null) => { const userExploredRaidPlaces = userExploredPlaces .filter(p => placesInCurrentWorld[p].type === "raid") .map(p => p.replace(/\s/g, "").toLowerCase()); - // checks if user has explored any raidable place in current location if (!userExploredRaidPlaces.length) { return `You have not explored any place to raid in ${locationIcon} ${currentLocation}, try \`!explore\` to find a place to raid`; diff --git a/models/User.js b/models/User.js index e74f503..90dd6f3 100644 --- a/models/User.js +++ b/models/User.js @@ -239,7 +239,7 @@ userSchema.methods.startQuest = async function(questName) { this.markModified(`quests.${buildingIndex}.started`); }; -userSchema.methods.addNewQuest = async function(quest) { +userSchema.methods.addNewQuest = function(quest) { this.quests.push(quest); }; @@ -249,12 +249,13 @@ userSchema.methods.removeQuest = async function(questName) { this.completedQuests.push(questName); }; -userSchema.methods.updateQuestObjective = async function(quest) { - const questIndex = this.quests.indexOf(this.quests.find(q => q.name === quest.name)); - this.quests[questIndex].pve = quest.pve; - - this.markModified(`quests.${questIndex}.pve`); - return this.save(); +userSchema.methods.updateQuestObjective = function(quest) { + this.quests = this.quests.map(q => { + if (q.name === quest.name) { + q.pve = quest.pve; + } + return q; + }); }; userSchema.methods.refreshQuestPve = async function(questName, pveIndex = 0) { @@ -289,12 +290,8 @@ userSchema.methods.handleExplore = function(currentLocation, place) { }; userSchema.methods.removeExploredArea = function(currentLocation, place) { - const locationIndex = this.world.locations[currentLocation].explored.indexOf(place); - this.world.locations[currentLocation].explored.splice(locationIndex, 1); - - this.markModified(`world.locations.${currentLocation}.explored`); - - return this.save(); + const newLocations = this.world.locations[currentLocation].explored.filter(p => p !== place); + this.world.locations[currentLocation].explored = newLocations; }; userSchema.methods.buyBuilding = function(building, buildingCost) { diff --git a/package-lock.json b/package-lock.json index 6a92386..09b242f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,4386 +1,8 @@ { "name": "rpgdiscord", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "rpgdiscord", - "version": "1.0.0", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.4", - "axios": "^0.21.2", - "canvas": "^2.6.1", - "chai": "^4.2.0", - "dblapi.js": "^2.4.0", - "discord.js": "^12.2.0", - "dotenv": "^8.2.0", - "eslint": "^7.1.0", - "istanbul": "^0.4.5", - "mongoose": "^5.13.4", - "nyc": "^15.1.0", - "qs": "^6.9.4" - }, - "devDependencies": { - "mocha": "^7.2.0" - }, - "engines": { - "node": "^14" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@babel/core/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "dependencies": { - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dependencies": { - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", - "dependencies": { - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dependencies": { - "@babel/types": "^7.11.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/traverse": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", - "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@discordjs/collection": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.5.tgz", - "integrity": "sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw==" - }, - "node_modules/@discordjs/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/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==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", - "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" - }, - "node_modules/@types/bson": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", - "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "node_modules/@types/mongodb": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", - "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", - "dependencies": { - "@types/bson": "*", - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.2.tgz", - "integrity": "sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/axios": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz", - "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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 - }, - "node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/canvas": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", - "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", - "hasInstallScript": true, - "dependencies": { - "nan": "^2.14.0", - "node-pre-gyp": "^0.11.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/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==" - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/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=" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dblapi.js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.4.0.tgz", - "integrity": "sha512-SqDYVcV1DBQnyhySTjd+Qvzu7jFr+4eKwl56fGpIti7OlXGF5dmDPeo3jQfRlOXTRn5/I5997MDIJukoDxE3Mg==" - }, - "node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/discord.js": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.2.0.tgz", - "integrity": "sha512-Ueb/0SOsxXyqwvwFYFe0msMrGqH1OMqpp2Dpbplnlr4MzcRrFWwsBM9gKNZXPVBHWUKiQkwU8AihXBXIvTTSvg==", - "dependencies": { - "@discordjs/collection": "^0.1.5", - "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", - "node-fetch": "^2.6.0", - "prism-media": "^1.2.0", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.2.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/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, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/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==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/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==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" - }, - "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/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==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/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==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "engines": { - "node": "*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul/node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" - }, - "node_modules/istanbul/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/istanbul/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/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=" - }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kareem": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", - "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/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, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/mongodb": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz", - "integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - } - }, - "node_modules/mongoose": { - "version": "5.13.9", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.9.tgz", - "integrity": "sha512-JbLw5ie0LJxm7V9LoNxRY//6cyFJf0cOpON2TWUWvF9pabil6ArfECL3xHV2N+mwwO4gXiIa+c0pwTzDUVTgqw==", - "dependencies": { - "@types/bson": "1.x || 4.0.x", - "@types/mongodb": "^3.5.27", - "bson": "^1.1.4", - "kareem": "2.3.2", - "mongodb": "3.6.11", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.4", - "mquery": "3.2.5", - "ms": "2.1.2", - "optional-require": "1.0.x", - "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "13.5.2", - "sliced": "1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "node_modules/mongoose/node_modules/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==" - }, - "node_modules/mpath": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", - "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", - "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", - "dependencies": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mquery/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "node_modules/needle": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "node_modules/npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/nyc/node_modules/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==" - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "node_modules/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, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optional-require": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", - "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/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=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/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==" - }, - "node_modules/pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prism-media": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz", - "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==" - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/regexp-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", - "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/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==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sift": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", - "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/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==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/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==" - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar/node_modules/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==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/uglify-js": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.0.tgz", - "integrity": "sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - } - }, "dependencies": { "@babel/code-frame": { "version": "7.12.11", @@ -4757,10 +379,23 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.4.tgz", - "integrity": "sha512-/ARaf7ENNqki6XXEqLzTfXzuTHH5pEQMbBjKp8YacZSf/78K8iYg0+WYkcYgWT3Y2rBzA5l7lJDOl+fcTyji/A==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.5.tgz", + "integrity": "sha512-3D+GmJ73ET9VMGAFfyyMpb0QF6LPdqaaQDL7swfeIZkSORwwpcOQ7Iqp3bcfItRJT0laIfqLnSPaxMjNyKObvQ==" }, "@types/bson": { "version": "4.0.5", @@ -4810,8 +445,7 @@ "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "aggregate-error": { "version": "3.1.0", @@ -4839,6 +473,44 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "optional": true }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", @@ -4939,8 +611,7 @@ "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==" }, "bl": { "version": "2.2.1", @@ -4956,6 +627,92 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "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==", + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.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==" + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4969,7 +726,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -4985,6 +741,35 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -5101,11 +886,21 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -5157,6 +952,21 @@ } } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + } + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -5193,6 +1003,19 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -5221,6 +1044,11 @@ "which": "^2.0.1" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, "dblapi.js": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/dblapi.js/-/dblapi.js-2.4.0.tgz", @@ -5273,6 +1101,11 @@ "strip-bom": "^4.0.0" } }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5331,16 +1164,37 @@ "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==", + "requires": { + "is-obj": "^2.0.0" + } + }, "dotenv": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, "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==" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -5391,6 +1245,11 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5654,7 +1513,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -5795,6 +1653,14 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -5816,6 +1682,21 @@ "is-glob": "^4.0.1" } }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } + } + }, "globals": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", @@ -5831,6 +1712,39 @@ } } }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + } + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -5885,6 +1799,11 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -5905,6 +1824,11 @@ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5918,6 +1842,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, "ignore-walk": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", @@ -5935,6 +1864,11 @@ "resolve-from": "^4.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5968,7 +1902,6 @@ "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" } @@ -5985,6 +1918,14 @@ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, "is-core-module": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", @@ -6020,11 +1961,34 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, "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 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "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==" }, "is-regex": { "version": "1.1.0", @@ -6059,6 +2023,11 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6276,6 +2245,11 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6299,6 +2273,22 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6365,6 +2355,26 @@ } } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "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" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6672,6 +2682,71 @@ "process-on-spawn": "^1.0.0" } }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "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" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, "nopt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", @@ -6684,8 +2759,12 @@ "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 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "npm-bundled": { "version": "1.1.1", @@ -6985,6 +3064,11 @@ "os-tmpdir": "^1.0.0" } }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7026,6 +3110,24 @@ "release-zalgo": "^1.0.0" } }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -7063,8 +3165,7 @@ "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pkg-dir": { "version": "4.2.0", @@ -7111,6 +3212,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, "prism-media": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz", @@ -7134,11 +3240,33 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, "qs": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", @@ -7188,6 +3316,22 @@ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -7221,6 +3365,14 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -7258,6 +3410,21 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7395,14 +3562,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -7433,6 +3592,14 @@ "es-abstract": "^1.17.5" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -7559,15 +3726,37 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, "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" } }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + } + } + }, "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -7605,6 +3794,50 @@ "integrity": "sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA==", "optional": true }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7613,6 +3846,14 @@ "punycode": "^2.1.0" } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7649,6 +3890,44 @@ "string-width": "^1.0.2 || 2" } }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7731,6 +4010,11 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", diff --git a/package.json b/package.json index b3fed0d..c7dffd8 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "eslint": "^7.1.0", "istanbul": "^0.4.5", "mongoose": "^5.13.4", + "nodemon": "^2.0.15", "nyc": "^15.1.0", "qs": "^6.9.4" }, From c642701e4e3431b1aba462c10cb916b6014bf658 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sun, 21 Nov 2021 19:12:37 +0100 Subject: [PATCH 13/19] fixed images and a bug --- assets/classes/full-image/mage.png | Bin 477 -> 3328 bytes assets/classes/full-image/originals/mage.png | Bin 0 -> 477 bytes .../classes/full-image/originals/paladin.png | Bin 0 -> 513 bytes assets/classes/full-image/originals/ranger.png | Bin 0 -> 669 bytes .../classes/full-image/originals/warrior.png | Bin 0 -> 471 bytes assets/classes/full-image/paladin.png | Bin 513 -> 3553 bytes assets/classes/full-image/ranger.png | Bin 669 -> 3803 bytes assets/classes/full-image/warrior.png | Bin 471 -> 3020 bytes index.js | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 assets/classes/full-image/originals/mage.png create mode 100644 assets/classes/full-image/originals/paladin.png create mode 100644 assets/classes/full-image/originals/ranger.png create mode 100644 assets/classes/full-image/originals/warrior.png diff --git a/assets/classes/full-image/mage.png b/assets/classes/full-image/mage.png index 4c37b748a3ac586a2177afbfcdb4a2b854b90594..40f998a85dac07fbecbbb99f66895df47ea5bcd8 100644 GIT binary patch literal 3328 zcmbVP3s4j17T(<^*ANjGOnibQ7OMpjEesE@kbr=pw! zklUKo)97>Q5Clzg;W@fP5X{B@X#WB`)#7vKAxQgYG{Z9RhEM-Bmxi~@KfmK9XbUT6oo9kk0lWJ9_CqcyTFGvPZ4)8;*YPk63^oxXOTwl|mqimp)r6@Cd}qWp$M?_90gkjDYU74n4AK%qFnB;Hz*Y+-HigMZ zQ)ukgO8*fZ+fnPZ)N>E+Df;^wWcj@*hzCYT>29zwm+F@Vr9(^>0}o=4@r5RZOu3A% zP0hi#&jLdc9W`D9JHUEv+ykZILw;TiMMZ{Uw0!W=;I$s#Bkw}rw*LCGuk=Pk(pm|< z+}ktyg7l;)vV3~Q{VYY=_o1(MT09MSvQl7Y5Vd8Y#d-`xb-?51K+FW>0PydIpOpf8 zf$#W2bCYF^v&1&AJM}qtF_%iC@~}^I8@=^w>Rt7o+b+i{B6AEReqFPLzba3kzMIx`cXZkMdP**GW-F2>gDu{!`pr4mczc4}gafXre-s z1DI+j4I#pkWGqMF=ZwI^g~8Qv$JBJm7E+W+b*seQ<{%!PmL`GX*?^4gOhk2L6-oqQ z;&1{^0MphdvY${nzs4^H&peD0=Z%EYVmx5y3fb2Ma{!M77vL8)x4=1215n9k7O+EN zS#CID#^feQS`3YvS1rhozJ9m%=Jmc~n?l<=D+N?s3m{;jfdh9SXQ@;)-SmgI&fQZ6 zl8|f9yKLY6tR{2Jx7rxj9$4{oxVe(etD?L>9Z6z{1V9d6(d)XlH9lur*Dvupk((Ew z%s0#HACA4GJK|J@q((LE;-3k;vgUrnLnGT3&Uqi7_2nEN$YMZNHp@Bqj|n z8d7i2CMYLPOT0>>8Mx}T9@71(Wyl7CeZV!41!)5`g1;KXplxj_BdIcqr;PIx-!N%( zN0KP&{aZzUulotRp9+#UK4@NKcFeBts36Vf-JbCIoWN4K`@xglSAdp-eD#z2T?_@B z4KtcUdwPq)>Ki&MYhU&r7w8>)vn5dy-u3zjUs9H9vb~^Nt;vbtW0?>n^2o{n$?}0> z)ulsP5U+YHFSfL5D2qEh+ z_c*zPWPlt2AATPNV~QI_k!$zuX#P^=#98@o6BVn>xVZoOp0K)~G_3&ixT3_+5G#4pivfrQ$Y zWV4cdSuX_YYQ`pOtrk>8TO^gRIqR)&y|UamL`#6J}Ee+bUbTteX0#MeKe1 zzNOj?RD0u>LZ5_yQ@Xh9BX1y_(^|`1a&98B>rb=#TJgU4ahNoOtWJwZf=X(d0{6-q z&&dm}!dWe<3~KVd{SVTL51G1SmmO179@ov%Htk+-WD*p`Z+kJzCT>&oaYj(~-W|wlChKm{!Z%-94ViE>(uDAg!;XsmE|tw`{`zfi2-lKty{vaTU$^W zU*pHvH&`ojpKkh`6WF<{b+5n`)3MTzA-c)8)X#9A>RCee`)OL}n+`N{j(&_XGK(zG zG3{uf)26O)*RKh@$QTi=&W$kEC(#RAi*XB9iRZTX*;cXlCsl3}5f_HDlbz#a(L8Rm zf7@YB0Kg(3ASNs@4fVuo@WDw8O&H15?s-<2;j3eRDurx@>h3o-&hfhujGWv_yV$7a zi6|msUVwzj!9`5|vtQ`gho#z3w*I5EO5CuTz%WN}BOri6U6pK}a^9Imf_gSj;!9qU z)H#F88i5rt#koE}Y?dLkTG?0X+ss(vj#H`0+nw>TN@T}kn#Gp><0CBK`3KAtD%W>s zIJppa2LQ3$7S5>fuxavBfK02lI~gWgfBfvHJJ8O?+KQRrFVa?dK@4s*|%ZIgWE%ES2>;NzB1l(MwqNCtAX$v(z$;O%u*>t z*TBon>M>}>`5vAl=qR|NziCBntphECX&Dgg8BJ_~UG5YL z&3|b1BbkgHhfsu|b|DH4Ul(Sw3VRG)%|T7kQH+@k!6*v?tHcYFmPJ`q%kXlC_(Fu@ bW;lu%SPX?`V+B6oKO4x!X^mrngD~d*tb%G} literal 477 zcmV<30V4j1P)Px$mPtfGR9HvlmN9a|Fc3whDq4Oa*?X_EtllAd(r5_pE3 zL7DI2dlt=FLdFV7pur>C``>=8S8L6gfA-A!=I;Vr-%OnE-q+_mIichiAPRAc;d=Kv zH@*9b`7r>Qx$i_OL@NgfAhVZHDG(HxCmi*!Lc(Ca^#-R8ND&FonNP1VmAjsh61O0ygm1^~V|0%ZeW_5^^~XuGZ8 zk@-On*t>vrHlon?pX7kt0y>}paII4Sh_4sZst)jZ0YHkg`(Ych0mu`O9Z(8t)eRRq z*#hn4gE*?aX(r(M^6{#2E!Z7IgI>o2eke73o)w$ zp^2#TPN;p3bwk>ZrreJXBq_n#Jo^n*@k21a Tf#4_r0000Px$mPtfGR9HvlmN9a|Fc3whDq4Oa*?X_EtllAd(r5_pE3 zL7DI2dlt=FLdFV7pur>C``>=8S8L6gfA-A!=I;Vr-%OnE-q+_mIichiAPRAc;d=Kv zH@*9b`7r>Qx$i_OL@NgfAhVZHDG(HxCmi*!Lc(Ca^#-R8ND&FonNP1VmAjsh61O0ygm1^~V|0%ZeW_5^^~XuGZ8 zk@-On*t>vrHlon?pX7kt0y>}paII4Sh_4sZst)jZ0YHkg`(Ych0mu`O9Z(8t)eRRq z*#hn4gE*?aX(r(M^6{#2E!Z7IgI>o2eke73o)w$ zp^2#TPN;p3bwk>ZrreJXBq_n#Jo^n*@k21a Tf#4_r0000Px$yGcYrR9Hvtm%mQKFc8K+Z)E9PbghJh#FDiW%zXzfyVmScuXe=K)b2NsU!f+ zhH`EScs2lS&SEkZDWVcG3qXoX2(37+jRII}tudyy%gti|+VDpKNWAt;K=2p=oRr74 z-uvW3=Ld)TP zz_tx1fMIAY$W98*M%zt&51-$F;dthTSBt6pofp9Mx|%6%8i-&GJT1QL&D|sJZ?AAs z4qOz-LlR-}Q0my;JAkIB{Ep~an-l@Li41$&cxn_n0WQaby1+=BF3!6TAZ@(@un<@N zuLjVzWKs$m5ukxh`#D4*GtN(| z|1Y0C1BCL=5n@qUoO=cETk_xl1VlyH_3)8)bq&ZA_!0OA`1=v?--h{^-YKfU=UQ7) zMk|)y3Fsi=#ckgLzCh|h)cKgyv{UX}RnO*%w5|IADGop|$+yG600000NkvXXu0mjf D+ga#g literal 0 HcmV?d00001 diff --git a/assets/classes/full-image/originals/ranger.png b/assets/classes/full-image/originals/ranger.png new file mode 100644 index 0000000000000000000000000000000000000000..5f80951e14395f450c0545757c8a2e7823d13e77 GIT binary patch literal 669 zcmV;O0%HA%P)Px%R!KxbR9Hvtma$J8F%-t%C1U8vRH*|q5&>PBHZ$s9z=Rsqh=~(Zmr4)ER9kH)T!#$rD9@;NOI6rbY|JxAQ;N( zR|L>$Mp3EiI6)8$v&F(U?k@f6&r`Rzt^7PMek7;x!SQ`R@;pyJ*;bHL0|tOc9RdJ1 zSNrts{3)%x_)FJ=x(<+OJFJ9&Sg%%8R$qdxd)b=`9C$yKZJ$m=Dq8`t-zYMD-yuJm zz6IzXojoG}WGPA!!0(wNE&T7Ppa{NL_(K@uhB=HU0KhCUjuil_k$t0itcnc{0HfMl z{}p+jXZlP%nj!!WhI-&{t_$=5ht~ObWCB?4g-ie(d@YxY-Zch85%P-{RDAh^J{`{L zHDC>%x;G;=jt55pV5;42Q|ZZuvMN;_>NF$#rY4zL0R%??U4gyzJk`2g1yC-R)omHG zT2&Yu;4)ktinNsbs=k-&brS%?lPf~b9$u3Gj8kBJ8!{;{CcxxsAR~Y^`%I@m56%UM zyMXTi6e4QibaRthVaWAiRoH5vpMCyj00h;)4FHjEkr4v30%q~){rD;tXFt{!a6mqK z=81@(VR2$2!=&u>+tLJUg`vo|$cO=s^E>KU*0W~_2Ea328N5d!ihPTV004*lrvw1# z^ElUtuEInC5Fp`i_?Px$kV!;AR9HvtmOE0zFc3gjJr|&W3f&-+V-PBO@QhE8!Uv%68QgG&a14eUh>Bc+ zk{L6rSe|7qS-XlSZg7*#MB4ZEBRK|Ee$2{z_!lUu!1r#~W9zOC2ZP`7v$U1!jR8)9 z7ZIS~kogi4>Iw`{--5`aj;G!L04aFzNyc=}_1F8opPlUDM1~{0>$=I3x~`LP5q@)f z2S1Mw%LoJ#iV$#AAO*+8+7?X8pA(pamk8jVKN1mvF{uDQetm+qHkz!q0-?m&Qy_tt zRv;xY$(#?|BImY$hu&M`v6zP6fZ{jI5cbkgM_tK9FMj_Gy_z?QwE8r`whIleZbHTQ7k?O zqD?6Q8mv?zE5P9heSSG*&YotOZ0+43HAs`EPcK`qY N07*qoM6N<$f&i14%0&PG literal 0 HcmV?d00001 diff --git a/assets/classes/full-image/paladin.png b/assets/classes/full-image/paladin.png index dab0566a988da7ff7189317fb4038cc5c84cb004..728f8318ae098bd232ca3521fa01e0abc27125b4 100644 GIT binary patch literal 3553 zcmbtX3pAAL8vbYc)ljWw6tSDV&1$43m!uozG9wISmsIXCO4(h_#EvA!P!W4fyD4m% zl+q1pN92S_B)1W58Fgfe4i(8IB*Xds{~sk;`(JQs3qo(=GD`Numd-{X_*p_^=K0dMW ztS@k~n7)XvbQM@j#7E+{a2*g(FwQMJL+r#_rfWDS1ziRk|DYi|2}-tH&yFZ)@2eAr zMAk;#tVFe-)2^;*ryuujKb84u&@~+3Ld>A1wJcE6_(&=N;KUWH>{GgfcMq>l7mxQm z=79(8J-WX6xP5>01}i`~2v=KdV<`?;RCc%ZcgJ#CMyQ$GDt}1t@+u3WZ)b0NvEC|G zdz0C+Em~Rt<`%BXM5-vj=^;HjQxM956Q8z3AbZBsdYa_E0{2vX!L4wRIOJJq0C&*o z?#2iHGUZwM*6xUGnTlB!An8VBfS^JI0K(Z|Nsxwf$qbtUGvYV?#nA_j)W-ch8)su3 z;9`W6IJlIoM~~Zbn^f4Zn1Ux8#g2}WcjtG+@2UdnaLA8j;g=(vKU^IVplc= z)dmhR4g<+46H!O3N&q48rSmK%aYEdh8R8u0*9F1z>qoo^wOdW{pV|0kII%2RS!sBC z+K*dCeex(-$-VcbjisL+H{UK#7amj<4(7<7ziY{fiNBj{vAIEX%Q@+2NN?(j+KfVp zr$`>6Bi=LBW4UToPkPFgp+QB!3VmVHMUw#n!$hl_rRD-ujR_A;_}3S#l(K*X5qT?4 zE3|{rj>(Shf^I^uP)PBhL2PWYE|(#`$jv* zkhNrEUWM)l8?1gNF@RkLCv)Et!5*me#h2GPOG!_ds~-wYq!B^U5qfx??g}g_hlxy}RYk{V z|1AagPC|ZR8e#M6ha)r1Zpb?Z-|w_{Y49^!cOib;bcts{p4UhBfAZCr;$FBul@H{F zzN;PjoI4VIx4WZ0=CjpqrOYCH^9beK;D=F>uSIFy8+nmw=FmW4Xz0zivrLSK*0OWt zIq#h>^~P0}#$PNii(pAl+# z^_3jAGvg5c4{&d*%Gz>Y+!)%<%qdkr*O>&R-hOrwZG%8eeY#@xka_Ad3(ND@0N*6{ z@Cdwp+1F8>t9t&D%p2B zag0@kWVOW^gshbt4;p+Kh9v>8lvl3BSnMx+_tRD~<4_+5^!dN+F`m^XSRZ?p;F$uB zF|VV&er13plSCzb~Bn$e7G{(ZiwLPqlun75FcgKa(aq zjCNv-on$3GrG*V2t}H7hU3&N3X0dz@tFOjjp0eShJE^kgpRe~6mHC}1+WDT6R}pWi z@SSiHa+eW|_-ksLrEgtS=M-=HP~DU<{9)bexb-g_xcqs13aUewaAZ(?GXP8YuoR0m z_5sO9vGn*nJ{#6di=S(Hv--+8<;R={Br8M#1YJYK0dgn% zLX7kj%4RI}ks+V5Ypj435rJ)4bsfKuM%7KnBnR$i49t8zNqcC=H8(SJCh>bB6*9r9 z-*_IGahwBdJ|vY)qQv*nQ0fvgi-!KkNOjd@&z-N-olk3v zKl~;*P0|0x!yNb77t{^lnyPi4YTNLim;-u3nENzHX5@=#iV;56X};zJSrNN}ssMR> zRMtkQ`#1^F<68_;^4{RWWNywBWd45?8&AibZSio6(qCP9Vkt-1@?>jh13p%Av1=Np zV;~o4F4cCm&+lC_M?&;e!9IAfw3*=hK6{dL=^^ow5z z=s4DXtAw*dyMWAC84~uRCYgcu(=7b#uXTi(kCG@E?*t7olKQBNC$5@M5P^Dhh(d?p zJU=GUzHfGIm?UWdlc+=xtJrfP0ugz3QRuSkUdyYifDZ};DhUq`fF~gv3cnFryL_2H zyon2?i(vv6!hwfXhlewVte;dNzVHYlZfCc}SzjDYxo^M&{B(ottT$L?TC#Zm2G20> A4gdfE literal 513 zcmV+c0{;DpP)Px$yGcYrR9Hvtm%mQKFc8K+Z)E9PbghJh#FDiW%zXzfyVmScuXe=K)b2NsU!f+ zhH`EScs2lS&SEkZDWVcG3qXoX2(37+jRII}tudyy%gti|+VDpKNWAt;K=2p=oRr74 z-uvW3=Ld)TP zz_tx1fMIAY$W98*M%zt&51-$F;dthTSBt6pofp9Mx|%6%8i-&GJT1QL&D|sJZ?AAs z4qOz-LlR-}Q0my;JAkIB{Ep~an-l@Li41$&cxn_n0WQaby1+=BF3!6TAZ@(@un<@N zuLjVzWKs$m5ukxh`#D4*GtN(| z|1Y0C1BCL=5n@qUoO=cETk_xl1VlyH_3)8)bq&ZA_!0OA`1=v?--h{^-YKfU=UQ7) zMk|)y3Fsi=#ckgLzCh|h)cKgyv{UX}RnO*%w5|IADGop|$+yG600000NkvXXu0mjf D+ga#g diff --git a/assets/classes/full-image/ranger.png b/assets/classes/full-image/ranger.png index 5f80951e14395f450c0545757c8a2e7823d13e77..a4cbd51d41eae7ba3964da3adfc411d4771a0715 100644 GIT binary patch literal 3803 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 literal 471 zcmV;|0Vw{7P)Px$kV!;AR9HvtmOE0zFc3gjJr|&W3f&-+V-PBO@QhE8!Uv%68QgG&a14eUh>Bc+ zk{L6rSe|7qS-XlSZg7*#MB4ZEBRK|Ee$2{z_!lUu!1r#~W9zOC2ZP`7v$U1!jR8)9 z7ZIS~kogi4>Iw`{--5`aj;G!L04aFzNyc=}_1F8opPlUDM1~{0>$=I3x~`LP5q@)f z2S1Mw%LoJ#iV$#AAO*+8+7?X8pA(pamk8jVKN1mvF{uDQetm+qHkz!q0-?m&Qy_tt zRv;xY$(#?|BImY$hu&M`v6zP6fZ{jI5cbkgM_tK9FMj_Gy_z?QwE8r`whIleZbHTQ7k?O zqD?6Q8mv?zE5P9heSSG*&YotOZ0+43HAs`EPcK`qY N07*qoM6N<$f&i14%0&PG diff --git a/index.js b/index.js index 985bbff..6e836c2 100644 --- a/index.js +++ b/index.js @@ -96,7 +96,7 @@ client.on("message", async (message) => { return message.reply(`You are banned from Mega-RPG. You can plead for an unban at our support servers - or wait:\n **${msToHumanTime(userProfile.account.banTime - Date.now())}**`); } - if(!userProfile.hero.className){ + if(!userProfile.hero.className && !(command.name === "help" || command.name === "info" || command.name === "hero")){ await pickClassHandler(message, userProfile) return } From 1c11c2a1581b9d526a6285e1859a437a7922a54f Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Sat, 27 Nov 2021 10:57:23 +0100 Subject: [PATCH 14/19] minor cleanupg --- commands/subcommands/hero/describe.js | 2 +- commands/test.js | 1 - package-lock.json | 14 +++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/commands/subcommands/hero/describe.js b/commands/subcommands/hero/describe.js index 04ebd69..2540696 100644 --- a/commands/subcommands/hero/describe.js +++ b/commands/subcommands/hero/describe.js @@ -9,7 +9,7 @@ module.exports = { const capitalizeFirstLetter = (string) => { return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - } + } const convertFromCamelcase = (string) => { return capitalizeFirstLetter(string.replace(/([A-Z])/g, " $1")); } diff --git a/commands/test.js b/commands/test.js index 4aad112..b1f983e 100644 --- a/commands/test.js +++ b/commands/test.js @@ -18,7 +18,6 @@ module.exports = { // const t = await User.findOne({ "account.username":"SpinningSiri" }); const m = await User.findOne({ "account.username":"Ignore" }); - m.hero.className = "Warrior" const npc = { _id: "p-4", isNpc: true, diff --git a/package-lock.json b/package-lock.json index 2dd0a72..133afe7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "@three-horned-helmet/combat-system-mega-rpg": "^1.0.10", + "@three-horned-helmet/combat-system-mega-rpg": "^1.0.11", "axios": "^0.21.2", "canvas": "^2.6.1", "chai": "^4.2.0", @@ -477,9 +477,9 @@ } }, "node_modules/@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.10.tgz", - "integrity": "sha512-pMXeym/CvHD516S2muzS5z3quqWkq4zSbBhKApc5eFh1D5XE+CuGWC8GgwUsu0us3s7IKmq1xud3YujIt1frqg==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.11.tgz", + "integrity": "sha512-kENB1mvf09LxLGs+0+aQRGecvaGLDP37WgAK/JVOef/zyTK7EhcVfNNEa2bY6ychct5ylsFDvrGFdy//66hjfw==" }, "node_modules/@types/bson": { "version": "4.0.5", @@ -4758,9 +4758,9 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" }, "@three-horned-helmet/combat-system-mega-rpg": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.10.tgz", - "integrity": "sha512-pMXeym/CvHD516S2muzS5z3quqWkq4zSbBhKApc5eFh1D5XE+CuGWC8GgwUsu0us3s7IKmq1xud3YujIt1frqg==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@three-horned-helmet/combat-system-mega-rpg/-/combat-system-mega-rpg-1.0.11.tgz", + "integrity": "sha512-kENB1mvf09LxLGs+0+aQRGecvaGLDP37WgAK/JVOef/zyTK7EhcVfNNEa2bY6ychct5ylsFDvrGFdy//66hjfw==" }, "@types/bson": { "version": "4.0.5", From 6a8985910604c97207c35252ef6c04098c4b82e3 Mon Sep 17 00:00:00 2001 From: Markus Heldrup Date: Mon, 29 Nov 2021 09:20:05 +0100 Subject: [PATCH 15/19] cleanup and minor fixes --- .../advancedClassesCombat/CombatMessageAPI.js | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 88ef7ad..06a4fba 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -32,7 +32,7 @@ class CombatMessageAPI { const capitalizeFirstLetter = (string) => { return string.charAt(0).toUpperCase() + string.slice(1); } - const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` + const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)}`).join("\n")}` const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) await this.message.channel.send(abilityPickerEmbed) @@ -110,17 +110,17 @@ class CombatMessageAPI { _displayPlayerHp = (player) => { console.log("_displayPlayerHp") // embed get's messed up if hp bar is longer than 20 - const MAX_REPEATING = 20; + const HEALTH_BARS_COUNT = 19; const { health, currentHealth } = player; - let percentageHealth = Math.floor((currentHealth / health * 100) * MAX_REPEATING / 100); - let percentageMissingHealth = Math.floor(MAX_REPEATING - percentageHealth); - if(percentageHealth < 0) percentageHealth = 0 - if(percentageMissingHealth < 0) percentageMissingHealth = 0 + let missingHealthBars = Math.floor(((currentHealth * 100) / health) / (100 / HEALTH_BARS_COUNT)) + + + if(missingHealthBars < 0) missingHealthBars = 0 if (player.team === 2) { - return `\`\`\`diff\n- ${"|".repeat(percentageHealth)}${" ".repeat(percentageMissingHealth)} \n \`\`\``; + return `\`\`\`diff\n- ${"|".repeat(missingHealthBars)}${" ".repeat(HEALTH_BARS_COUNT - missingHealthBars)} \n \`\`\``; } - return `\`\`\`diff\n+ ${"|".repeat(percentageHealth)}${" ".repeat(percentageMissingHealth)} \n \`\`\``; + return `\`\`\`diff\n+ ${"|".repeat(missingHealthBars)}${" ".repeat(HEALTH_BARS_COUNT - missingHealthBars)} \n \`\`\``; }; _fightDetailsEmbed = () => { @@ -160,53 +160,54 @@ class CombatMessageAPI { console.log("_abilityPickerEmbed") const { sideColor } = this.options - const displayHealth = player => { + const newLineSpace = { + name: "\u200B", + value: "\u200B", + inline: false, + }; + + const displayHealth = (player, index) => { return { name: `${this._getName(player)} HP:`, value: this._displayPlayerHp(player), inline: true, } } - - const topLeft = this.game.teamOne.map(displayHealth); - const topRight = this.game.teamTwo.map(displayHealth); - - const newLineSpace = { - name: "\u200B", - value: "\u200B", - inline: false, - }; - - + + // TODO: Add newLineSpace to make it align perfectly when several players are present in the fight + const teamOneHealthField = this.game.teamOne.map(displayHealth); + const teamTwoHealthField = this.game.teamTwo.map(displayHealth); + + const combatFields = [ - topLeft, - topRight, + ...teamOneHealthField, + ...teamTwoHealthField, newLineSpace, ]; - + if(this.previousAbilityResponse.length){ - const midLeft = { + const previousAbilitiesField = { name: "Previous turn", value: this.previousAbilityResponse.join("\n \n"), inline: true, }; - // combatFields.splice(3, 0, midLeft) - combatFields.push(midLeft) + // combatFields.splice(3, 0, previousAbilitiesField) + combatFields.push(previousAbilitiesField) this.previousAbilityResponse = [] } if(player && abilitiesString){ - const bottomLeft = { + const pickAbilitiesField = { name: `Choose your ability, ${this._getName(player)}!`, value: abilitiesString, inline: true, }; - combatFields.push(bottomLeft) + combatFields.push(pickAbilitiesField) combatFields.push(newLineSpace) } if(this.deathMessages.length || this.effectMessages.length){ - const midRight = { + const effectsField = { name: "Effects", value: this.effectMessages.join("\n \n") + this.deathMessages.map(p => this._getName(p) + " has died").join("\n"), inline: true @@ -215,7 +216,7 @@ class CombatMessageAPI { if(combatFields.length % 2 !== 0){ combatFields.push(newLineSpace) } - combatFields.push(midRight) + combatFields.push(effectsField) this.deathMessages = [] this.effectMessages = [] From 0f950a73dad07dff5f26249de162e44595217909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tormod=20Flesj=C3=B8?= Date: Tue, 30 Nov 2021 19:32:41 +0100 Subject: [PATCH 16/19] more stash --- assets/classes/.DS_Store | Bin 6148 -> 6148 bytes assets/classes/full-image/.DS_Store | Bin 0 -> 6148 bytes .../advancedClassesCombat/CombatMessageAPI.js | 18 ++++-------------- combat/advancedClassesCombat/CombatWrapper.js | 10 +++++----- combat/advancedClassesCombat/Raid.js | 4 ++-- combat/advancedClassesCombat/WorldCombat.js | 3 +-- game/profile/index.js | 12 ++++++------ index.js | 8 ++++---- 8 files changed, 22 insertions(+), 33 deletions(-) create mode 100644 assets/classes/full-image/.DS_Store diff --git a/assets/classes/.DS_Store b/assets/classes/.DS_Store index ef7954773d0982c742f42d90751493dace3822c1..3ecea5cc6f93100406ca280387d8b436121240ab 100644 GIT binary patch delta 21 ccmZoMXffEZgo(q@+|o!#!NhX&8m0(Q07w%CApigX delta 21 ccmZoMXffEZgo(q*$kIqh!NhFy8m0(Q07udW8UO$Q diff --git a/assets/classes/full-image/.DS_Store b/assets/classes/full-image/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b53717862373121cae3a0ed3747559200e251345 GIT binary patch literal 6148 zcmeHK%}T>S5T0$TO(;SR3VI88E!ftg6fYsx7cim+m70)JgE1>jYY(N6yS|Vw;`2DO zyDgMf@FZeqVD_7xpDg<&>|_Bz_~W<<-~fPyN?5XSSR)iCU6GRU5DN8-1TqLAg*=+9 zWV7QhGC=Rn1_?t*V1T-KfB8$4$_S$$(My`-qekOXl**N@?W$F^YSw-5C?~-v9F227 z9NyCGO3E~v+hKH_^d~)M_grS9Fva`yhHAx_ORabx bRSEiCG7vq3g+}zC@Q;9^fd^*bR~h&M)XGh` literal 0 HcmV?d00001 diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 97c7eb4..593e5a2 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -29,10 +29,8 @@ class CombatMessageAPI { console.log("pickAbilityMessage") const { name } = player; const allLetters = "abcefghijklmnopqrstuvwxyz".split("") - const capitalizeFirstLetter = (string) => { - return string.charAt(0).toUpperCase() + string.slice(1); - } - const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `${allLetters[i]}) ${capitalizeFirstLetter(a.constants.name)} \n ${a.constants.description}`).join("\n \n")}` + const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1) + const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `**${allLetters[i]}**) ${capitalizeFirstLetter(a.constants.name)} \n`).join("")}` const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) await this.message.channel.send(abilityPickerEmbed) @@ -129,12 +127,6 @@ class CombatMessageAPI { const namesTeamOne = this.game.originalTeamOne.map(this._getName) const namesTeamTwo = this.game.originalTeamTwo.map(this._getName) - // const extraFields = [] - - // if(rewards) { - - // } - const fightDetailsEmbed = new Discord.MessageEmbed() .setTitle(title || "A fight has been initiated!") .setDescription(description || "Prepare for fight!") @@ -156,7 +148,7 @@ class CombatMessageAPI { return fightDetailsEmbed } - _abilityPickerEmbed = (player, abilitiesString) => { + _abilityPickerEmbed = (player, abilitiesString, extraFields = () => {}) => { console.log("_abilityPickerEmbed") const { sideColor } = this.options @@ -190,7 +182,6 @@ class CombatMessageAPI { value: this.previousAbilityResponse.join("\n \n"), inline: true, }; - // combatFields.splice(3, 0, midLeft) combatFields.push(midLeft) this.previousAbilityResponse = [] } @@ -239,7 +230,6 @@ class CombatMessageAPI { _endGameExtraFieldsEmbed = (winningTeam, fields) => { console.log("_endGameExtraFieldsEmbed") - const {additionalRewards} = this.options const newLineSpace = { name: "\u200B", @@ -249,7 +239,7 @@ class CombatMessageAPI { if(!winningTeam) { const bottomLeftField = { - name: "The combat has ended and the were no winners:", + name: "The combat has ended and there were no winners:", value: this.game.combatEndedReason || "For unfortunate reasons", inline: true } diff --git a/combat/advancedClassesCombat/CombatWrapper.js b/combat/advancedClassesCombat/CombatWrapper.js index 36adc1b..f220bc7 100644 --- a/combat/advancedClassesCombat/CombatWrapper.js +++ b/combat/advancedClassesCombat/CombatWrapper.js @@ -36,7 +36,9 @@ class CombatWrapper { if (!this.combatCanStart) { return; } - await this.game.startGame(); + const res = await this.game.startGame(); + console.log({ res }); + console.log(this.game, "this.game"); } async setupCombat() { if (this.combatInvitationsAllowed) { @@ -97,7 +99,7 @@ class CombatWrapper { currentHealth: 200, attack: 30, defense: 30, - className: "Mage" + className: "UserArmy" } }; } @@ -123,9 +125,7 @@ class CombatWrapper { const reactionFilter = (reaction) => icons.includes(reaction.emoji.name); - await asyncForEach((icons), async (r)=>{ - raceInvitation.react(r); - }); + await asyncForEach((icons), async (r)=> invitation.react(r)); const collector = await invitation.createReactionCollector(reactionFilter, { time: 1000 * 20, errors: ["time"] }); diff --git a/combat/advancedClassesCombat/Raid.js b/combat/advancedClassesCombat/Raid.js index 5ff55e9..5af4d7b 100644 --- a/combat/advancedClassesCombat/Raid.js +++ b/combat/advancedClassesCombat/Raid.js @@ -14,8 +14,8 @@ const options = { }; class Raid extends WorldCombat { - constructor(data = { options }) { - super({ ...data, nameOfClass: NAME_OF_CLASS }); + constructor(data) { + super({ ...data, nameOfClass: NAME_OF_CLASS, options }); this.setupRaid(); } static getNameOfClass() { diff --git a/combat/advancedClassesCombat/WorldCombat.js b/combat/advancedClassesCombat/WorldCombat.js index 7743fd5..0e2b415 100644 --- a/combat/advancedClassesCombat/WorldCombat.js +++ b/combat/advancedClassesCombat/WorldCombat.js @@ -7,8 +7,7 @@ const { userIsOnCooldown } = require("../../game/_CONSTS/cooldowns"); class WorldCombat extends CombatWrapper { - - constructor(data = {}) { + constructor(data) { super(data); this.place = data.place = ""; this.worldIcon = getIcon(this.user.world.currentLocation); diff --git a/game/profile/index.js b/game/profile/index.js index 91eabae..c57b4a0 100644 --- a/game/profile/index.js +++ b/game/profile/index.js @@ -18,22 +18,22 @@ const prettifyUser = (position, user, avatar) => { username += medals[position - 1]; } - const { hero } = user; - const heroRank = hero.rank; - const heroValue = `❤️ HP: ${hero.currentHealth}/${hero.health}\n\n⚔ AT: ${hero.attack}\n\n🛡 DEF: ${hero.defense}\n\n🔅 XP: ${hero.currentExp}/${hero.expToNextRank}`; + const { hero, resources } = user; + const { rank, currentHealth, health, attack, defense, currentExp, expToNextRank, armor, inventory } = hero; + const heroValue = `❤️ HP: ${currentHealth}/${health}\n\n⚔ AT: ${attack}\n\n🛡 DEF: ${defense}\n\n🔅 XP: ${currentExp}/${expToNextRank}`; - const heroEquipment = `🧢 Helmet: ${hero.armor.helmet.capitalize()}\n\n⚜️ Chest: ${hero.armor.chest.capitalize()}\n\n🦵 Leggings: ${hero.armor.legging.capitalize()}\n\n🗡 Weapon: ${hero.armor.weapon.capitalize()}`; + const heroEquipment = `🧢 Helmet: ${hero.armor.helmet.capitalize()}\n\n⚜️ Chest: ${armor.chest.capitalize()}\n\n🦵 Leggings: ${armor.legging.capitalize()}\n\n🗡 Weapon: ${armor.weapon.capitalize()}`; const totalSoldiers = getAllSoldiers(user.army.units); const armyStats = calculateStats(user); const armyValue = `👮‍♀️ Soldiers: ${totalSoldiers}\n\n⚔ AT: ${armyStats.unitStats.attack}\n\n❤️ HP: ${armyStats.unitStats.health}`; - const inventoryValue = `💰 Gold: ${user.resources.gold}\n\n${Object.keys(hero.inventory).map(item => typeof hero.inventory[item] === "number" ? addInventoryValueToProfile(item, hero) : false).filter(i => i).join(" ")}`; + const inventoryValue = `💰 Gold: ${Math.floor(resources.gold)}\n\n${Object.keys(inventory).map(item => typeof inventory[item] === "number" ? addInventoryValueToProfile(item, hero) : false).filter(i => i).join(" ")}`; const fields = [ { - name: `Hero (${heroRank})`, + name: `Hero (${rank})`, value: heroValue, inline: true, }, diff --git a/index.js b/index.js index 6e836c2..9912794 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,7 @@ const User = require("./models/User"); const { getWelcomeMessage, createNewUser } = require("./game/_GLOBAL_HELPERS"); const { msToHumanTime } = require("./game/_GLOBAL_HELPERS"); const { handleCaptcha } = require("./game/_GLOBAL_HELPERS/captcha"); -const { pickClassHandler } = require("./game/hero/pick-class/pick-class-handler") +const { pickClassHandler } = require("./game/hero/pick-class/pick-class-handler"); const token = process.env.DISCORD_TOKEN; const prefix = process.env.DISCORD_PREFIX; @@ -96,9 +96,9 @@ client.on("message", async (message) => { return message.reply(`You are banned from Mega-RPG. You can plead for an unban at our support servers - or wait:\n **${msToHumanTime(userProfile.account.banTime - Date.now())}**`); } - if(!userProfile.hero.className && !(command.name === "help" || command.name === "info" || command.name === "hero")){ - await pickClassHandler(message, userProfile) - return + if(!userProfile.hero.className && !["help", "info", "hero"].includes(command.name)) { + await pickClassHandler(message, userProfile); + return; } if (!userProfile.account.testUser && ["hunt", "collect", "raid", "fish"].includes(command.name) && Math.random() <= 0.01) { From a2a0668aafc88c8f6372390855ea230074fe2986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tormod=20Flesj=C3=B8?= Date: Fri, 17 Dec 2021 19:46:37 +0100 Subject: [PATCH 17/19] add reward handler --- .../advancedClassesCombat/CombatMessageAPI.js | 565 +++++++++--------- combat/advancedClassesCombat/CombatWrapper.js | 187 +++--- combat/advancedClassesCombat/WorldCombat.js | 284 ++++----- 3 files changed, 541 insertions(+), 495 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index f02814c..484e0f3 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -1,317 +1,306 @@ const Discord = require("discord.js"); -const combatConstants = require("../../game/_CONSTS/combat.json") +const combatConstants = require("../../game/_CONSTS/combat.json"); class CombatMessageAPI { - constructor(message, options = {}) { - this.message = message - this.options = options - this.game = null - - this.defaultSideColor = "#45b6fe" - this.previousAbilityResponse = [] - this.effectMessages = [] - this.deathMessages = [] - this.round = 1 - } + constructor(message, options = {}, cb) { + this.message = message; + this.options = options; + this.game = null; + + this.defaultSideColor = "#45b6fe"; + this.previousAbilityResponse = []; + this.effectMessages = []; + this.deathMessages = []; + this.round = 1; + this.endGame = cb; + } + + sendMessage(message) { + return this.message.channel.send(message); + } + + genericPrefightRuleGenerator = async () => { + const rulesEmbed = this._fightDetailsEmbed(); + await this.message.channel.send(rulesEmbed); + }; + + pickAbilityMessage = async (player, abilities) => { + const { name } = player; + const allLetters = "abcefghijklmnopqrstuvwxyz".split(""); + const capitalizeFirstLetter = (str) => + str.charAt(0).toUpperCase() + str.slice(1); + const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities + .map( + (a, i) => + `**${allLetters[i]}**) ${capitalizeFirstLetter(a.constants.name)} \n` + ) + .join("")}`; + + const abilityPickerEmbed = this._abilityPickerEmbed( + player, + abilitiesString + ); + await this.message.channel.send(abilityPickerEmbed); + + const filter = (response) => { + // checks if person included included in the fight + return player.id === response.author.id; + }; - sendMessage(message){ - return this.message.channel.send(message) + const collector = await this.message.channel.createMessageCollector( + filter, + { + time: combatConstants.messageAPI.defaultCombatReactTime, + errors: ["time"], + } + ); + + let pickedAbility; + collector.on("collect", async (result) => { + if (result.author.bot) { + return; + } + + const chosenAbilityIndex = allLetters.indexOf( + result.content[0]?.toLowerCase() + ); + if (chosenAbilityIndex < 0) return; + pickedAbility = abilities[chosenAbilityIndex]; + if (!pickedAbility) return; + + // stops collecting if all humans have answered + // await sleep(1500); + collector.stop(); + }); + + // TODO: Error handling (on timeout) + return await new Promise((resolve) => { + collector.on("end", async () => { + resolve(pickedAbility); + }); + }); + }; + + deathMessage = async (players = []) => { + this.deathMessages = this.deathMessages.concat(players); + }; + + effectMessage = async (message) => { + this.effectMessages.push(message); + }; + + abilityMessage = async (abilityResponse) => { + this.previousAbilityResponse.push(abilityResponse); + }; + + newRoundMessage = async (round) => { + this.round = round; + }; + + endGameMessage = async (winningTeam) => { + const extraFields = (fields) => { + this._endGameExtraFieldsEmbed(winningTeam, fields); + }; + // Winning team kan være null + const lastCombatTurnEmbed = await this._abilityPickerEmbed( + winningTeam ? winningTeam[0] : this.game.teamOne[0], + null, + extraFields + ); + await this.message.channel.send(lastCombatTurnEmbed); + this.endGame(this.game.winningTeam, this.game.losingTeam); + }; + + _getName = (player) => { + return player.name || player?.account.username || "npc"; + }; + + _displayPlayerHp = (player) => { + // embed get's messed up if hp bar is longer than 20 + const HEALTH_BARS_COUNT = 19; + const { health, currentHealth } = player; + let missingHealthBars = Math.floor( + (currentHealth * 100) / health / (100 / HEALTH_BARS_COUNT) + ); + + if (missingHealthBars < 0) missingHealthBars = 0; + + if (player.team === 2) { + return `\`\`\`diff\n- ${"|".repeat(missingHealthBars)}${" ".repeat( + HEALTH_BARS_COUNT - missingHealthBars + )} \n \`\`\``; } + return `\`\`\`diff\n+ ${"|".repeat(missingHealthBars)}${" ".repeat( + HEALTH_BARS_COUNT - missingHealthBars + )} \n \`\`\``; + }; + + _fightDetailsEmbed = () => { + const { title, description, sideColor, rewards } = this.options; + const namesTeamOne = this.game.originalTeamOne.map(this._getName); + const namesTeamTwo = this.game.originalTeamTwo.map(this._getName); + + const fightDetailsEmbed = new Discord.MessageEmbed() + .setTitle(title || "A fight has been initiated!") + .setDescription(description || "Prepare for fight!") + .setColor(sideColor || this.defaultSideColor) + .addFields( + { + name: "Team 1", + value: namesTeamOne.join("\n"), + inline: true, + }, + { + name: "Team 2", + value: namesTeamTwo.join("\n"), + inline: true, + } + ) + .setFooter(`Some footer`); - genericPrefightRuleGenerator = async () => { - console.log("genericPrefightRuleGenerator") - const rulesEmbed = this._fightDetailsEmbed() - await this.message.channel.send(rulesEmbed); - - } + return fightDetailsEmbed; + }; - pickAbilityMessage = async (player, abilities) => { - console.log("pickAbilityMessage") - const { name } = player; - const allLetters = "abcefghijklmnopqrstuvwxyz".split("") - const capitalizeFirstLetter = (str) => str.charAt(0).toUpperCase() + str.slice(1) - const abilitiesString = `__${name}:__ Can pick from abilities: \n ${abilities.map((a, i) => `**${allLetters[i]}**) ${capitalizeFirstLetter(a.constants.name)} \n`).join("")}` + _abilityPickerEmbed = (player, abilitiesString, extraFields = () => {}) => { + const { sideColor } = this.options; - const abilityPickerEmbed = this._abilityPickerEmbed(player, abilitiesString) - await this.message.channel.send(abilityPickerEmbed) + const newLineSpace = { + name: "\u200B", + value: "\u200B", + inline: false, + }; - const filter = (response) => { - // checks if person included included in the fight - return player.id === response.author.id; - }; + const displayHealth = (player, index) => { + return { + name: `${this._getName(player)} HP:`, + value: this._displayPlayerHp(player), + inline: true, + }; + }; - const collector = await this.message.channel.createMessageCollector(filter, { - time: combatConstants.messageAPI.defaultCombatReactTime, - errors: ["time"], - }); - - let pickedAbility; - collector.on("collect", async (result) => { - console.log("result.content", result.content) - if (result.author.bot) { - return; - } - - const chosenAbilityIndex = allLetters.indexOf(result.content[0]?.toLowerCase()) - if(chosenAbilityIndex < 0) return - pickedAbility = abilities[chosenAbilityIndex] - if(!pickedAbility) return - - // stops collecting if all humans have answered - // await sleep(1500); - collector.stop(); - }); - - // TODO: Error handling (on timeout) - return await new Promise ((resolve) => { - collector.on("end", async () => { - resolve(pickedAbility) - }); - }); + // TODO: Add newLineSpace to make it align perfectly when several players are present in the fight + const teamOneHealthField = this.game.teamOne.map(displayHealth); + const teamTwoHealthField = this.game.teamTwo.map(displayHealth); + + const combatFields = [ + ...teamOneHealthField, + ...teamTwoHealthField, + newLineSpace, + ]; + + if (this.previousAbilityResponse.length) { + const previousAbilitiesField = { + name: "Previous turn", + value: this.previousAbilityResponse.join("\n \n"), + inline: true, + }; + // combatFields.push(midLeft); + // combatFields.splice(3, 0, previousAbilitiesField) + combatFields.push(previousAbilitiesField); + this.previousAbilityResponse = []; } - deathMessage = async (players = []) => { - console.log("deathMessage") - this.deathMessages = this.deathMessages.concat(players) + if (player && abilitiesString) { + const pickAbilitiesField = { + name: `Choose your ability, ${this._getName(player)}!`, + value: abilitiesString, + inline: true, + }; + combatFields.push(pickAbilitiesField); + combatFields.push(newLineSpace); } - effectMessage = async (message) => { - console.log("effectMessage") - this.effectMessages.push(message) + if (this.deathMessages.length || this.effectMessages.length) { + const effectsField = { + name: "Effects", + value: + this.effectMessages.join("\n \n") + + this.deathMessages + .map((p) => this._getName(p) + " has died") + .join("\n"), + inline: true, + }; + + if (combatFields.length % 2 !== 0) { + combatFields.push(newLineSpace); + } + combatFields.push(effectsField); + + this.deathMessages = []; + this.effectMessages = []; } - abilityMessage = async (abilityResponse) => { - console.log("abilityMessage") - this.previousAbilityResponse.push(abilityResponse) - } + extraFields(combatFields); + + const title = `${this._getName(player)}'s turn!`; + + const className = player.className || player?.hero.className || "no-image"; + const attachment = new Discord.MessageAttachment( + `./assets/classes/full-image/${className}.png`, + `${className}.png` + ); + + const embedResult = new Discord.MessageEmbed() + .attachFiles(attachment) + .setTitle(title) + .setColor(sideColor || this.defaultSideColor) + .addFields(...combatFields) + .setThumbnail(`attachment://${player.className}.png`); + return embedResult; + }; + + _endGameExtraFieldsEmbed = (winningTeam, fields) => { + const newLineSpace = { + name: "\u200B", + value: "\u200B", + inline: false, + }; - newRoundMessage = async (round) => { - console.log("newRoundMessage") - this.round = round - } + if (!winningTeam) { + const bottomLeftField = { + name: "The combat has ended and there were no winners:", + value: this.game.combatEndedReason || "For unfortunate reasons", + inline: true, + }; - endGameMessage = async (winningTeam) => { - console.log("endGameMessage") - const extraFields = (fields) => { - this._endGameExtraFieldsEmbed(winningTeam, fields) - } - // Winning team kan være null - const lastCombatTurnEmbed = await this._abilityPickerEmbed(winningTeam ? winningTeam[0] : this.game.teamOne[0], null, extraFields) - await this.message.channel.send(lastCombatTurnEmbed) - } + if (fields.length % 2 !== 0) { + fields.push(newLineSpace); + } - _getName = player => { - console.log("_getName") - return player.name || player?.account.username || "npc" + return fields.push(bottomLeftField); } - _displayPlayerHp = (player) => { - console.log("_displayPlayerHp") - // embed get's messed up if hp bar is longer than 20 - const HEALTH_BARS_COUNT = 19; - const { health, currentHealth } = player; - let missingHealthBars = Math.floor(((currentHealth * 100) / health) / (100 / HEALTH_BARS_COUNT)) - - - if(missingHealthBars < 0) missingHealthBars = 0 - - if (player.team === 2) { - return `\`\`\`diff\n- ${"|".repeat(missingHealthBars)}${" ".repeat(HEALTH_BARS_COUNT - missingHealthBars)} \n \`\`\``; - } - return `\`\`\`diff\n+ ${"|".repeat(missingHealthBars)}${" ".repeat(HEALTH_BARS_COUNT - missingHealthBars)} \n \`\`\``; + const bottomLeftField = { + name: `The combat has ended and the winner${ + winningTeam.length > 1 ? "'s are" : " is" + }:`, + value: winningTeam + .map((u) => this._getName(u)) + .join(", ") + .replace(/,$/), + inline: true, }; - _fightDetailsEmbed = () => { - console.log("_fightDetailsEmbed") - const { title, description, sideColor, rewards } = this.options - const namesTeamOne = this.game.originalTeamOne.map(this._getName) - const namesTeamTwo = this.game.originalTeamTwo.map(this._getName) - - const fightDetailsEmbed = new Discord.MessageEmbed() - .setTitle(title || "A fight has been initiated!") - .setDescription(description || "Prepare for fight!") - .setColor(sideColor || this.defaultSideColor) - .addFields( - { - name: "Team 1", - value: namesTeamOne.join("\n"), - inline: true, - }, - { - name: "Team 2", - value: namesTeamTwo.join("\n"), - inline: true, - } - ) - .setFooter(`Some footer`); - - return fightDetailsEmbed + if (fields.length % 2 !== 0) { + fields.push(newLineSpace); } - _abilityPickerEmbed = (player, abilitiesString, extraFields = () => {}) => { - console.log("_abilityPickerEmbed") - const { sideColor } = this.options - - const newLineSpace = { - name: "\u200B", - value: "\u200B", - inline: false, + fields.push(bottomLeftField); + if (winningTeam.some((player) => !player.isNpc)) { + const {rewards} = this.options + const bottomRightField = { + name: `Rewards:`, + value: Object.entries(rewards) + .map((reward) => `${reward[0]}: ${reward[1]}`) + .join("\n") + .replace(/\\n$/), + inline: true, }; + fields.push(bottomRightField); + } + }; - const displayHealth = (player, index) => { - return { - name: `${this._getName(player)} HP:`, - value: this._displayPlayerHp(player), - inline: true, - } - } - - // TODO: Add newLineSpace to make it align perfectly when several players are present in the fight - const teamOneHealthField = this.game.teamOne.map(displayHealth); - const teamTwoHealthField = this.game.teamTwo.map(displayHealth); - - - const combatFields = [ - ...teamOneHealthField, - ...teamTwoHealthField, - newLineSpace, - ]; - - if(this.previousAbilityResponse.length){ - const previousAbilitiesField = { - name: "Previous turn", - value: this.previousAbilityResponse.join("\n \n"), - inline: true, - }; -<<<<<<< HEAD - combatFields.push(midLeft) -======= - // combatFields.splice(3, 0, previousAbilitiesField) - combatFields.push(previousAbilitiesField) ->>>>>>> 6a8985910604c97207c35252ef6c04098c4b82e3 - this.previousAbilityResponse = [] - } - - if(player && abilitiesString){ - const pickAbilitiesField = { - name: `Choose your ability, ${this._getName(player)}!`, - value: abilitiesString, - inline: true, - }; - combatFields.push(pickAbilitiesField) - combatFields.push(newLineSpace) - } - - if(this.deathMessages.length || this.effectMessages.length){ - const effectsField = { - name: "Effects", - value: this.effectMessages.join("\n \n") + this.deathMessages.map(p => this._getName(p) + " has died").join("\n"), - inline: true - } - - if(combatFields.length % 2 !== 0){ - combatFields.push(newLineSpace) - } - combatFields.push(effectsField) - - this.deathMessages = [] - this.effectMessages = [] - } - - extraFields(combatFields) - - const title = `${this._getName(player)}'s turn!` - - const className = player.className || player?.hero.className || "no-image" - const attachment = new Discord.MessageAttachment(`./assets/classes/full-image/${className}.png`, `${className}.png`); - - const embedResult = new Discord.MessageEmbed() - .attachFiles(attachment) - .setTitle(title) - .setColor(sideColor || this.defaultSideColor) - .addFields(...combatFields) - .setThumbnail(`attachment://${player.className}.png`) - return embedResult; - }; - - _endGameExtraFieldsEmbed = (winningTeam, fields) => { - console.log("_endGameExtraFieldsEmbed") - - const newLineSpace = { - name: "\u200B", - value: "\u200B", - inline: false, - }; - - if(!winningTeam) { - const bottomLeftField = { - name: "The combat has ended and there were no winners:", - value: this.game.combatEndedReason || "For unfortunate reasons", - inline: true - } - - if(fields.length % 2 !== 0){ - fields.push(newLineSpace) - } - - return fields.push(bottomLeftField) - } - - - const bottomLeftField = { - name: `The combat has ended and the winner${winningTeam.length > 1 ? "'s are" : " is"}:`, - value: winningTeam.map(u => this._getName(u)).join(", ").replace(/,$/), - inline: true - } - - if(fields.length % 2 !== 0){ - fields.push(newLineSpace) - } - - fields.push(bottomLeftField) - - if(winningTeam.find(player => !player.isNpc)){ - const rewards = this.handleRewards() - if(Object.keys(rewards).length){ - const bottomRightField = { - name: `Rewards:`, - value: Object.entries(rewards).map(reward => `${reward[0]}: ${reward[1]}`).join("\n").replace(/\\n$/), - inline: true - } - - fields.push(bottomRightField) - } - } - } - - handleRewards = () => { - console.log("handleRewards") - const { additionalRewards } = this.options - const allRewards = {} - const winningUsers = this.game.winningTeam.filter(player => !player.isNpc && player.account?.userId) - - const summarizeRewards = (rewards) => { - Object.entries(rewards).forEach(reward => { - allRewards[reward[0]] ? allRewards[reward[0]] += reward[1] : allRewards[reward[0]] = reward[1] - }) - } - - if(additionalRewards){ - summarizeRewards(additionalRewards) - } - - const usersWithRewards = this.game.losingTeam.filter(player => player.rewards) - usersWithRewards.forEach(user => { - summarizeRewards(user.rewards) - }) - - winningUsers.forEach(user => { - user.gainManyResources(allRewards) - user.save() - }) - - return allRewards - } + } -module.exports = { CombatMessageAPI } \ No newline at end of file +module.exports = { CombatMessageAPI }; diff --git a/combat/advancedClassesCombat/CombatWrapper.js b/combat/advancedClassesCombat/CombatWrapper.js index f220bc7..f2f9632 100644 --- a/combat/advancedClassesCombat/CombatWrapper.js +++ b/combat/advancedClassesCombat/CombatWrapper.js @@ -11,21 +11,25 @@ const options = { armyAllowed: Boolean, helpersAllowed: Boolean, isPVP: Boolean, - isPVPs: Boolean + isPVPs: Boolean, + rewards: Object } */ class CombatWrapper { constructor(data) { + console.log("data START", data, "data"); if (!data.user || !data.nameOfClass || !data.message || !data.options) { throw new Error( - "Cannot create an instance without user, nameOfClass, Discord Message or options" + "Cannot create an instance without user, nameOfClass, message or options" ); } - this.messageAPI = new CombatMessageAPI(data.message); this.user = data.user; this.nameOfClass = data.nameOfClass; - this.options = data.options; + this.options = { ...data.options, rewards: this.rewards }, + this.message = data.message; this.game; + this.messageAPI; + this.greenTeam = []; this.redTeam = []; this.combatCanStart = true; @@ -36,16 +40,25 @@ class CombatWrapper { if (!this.combatCanStart) { return; } - const res = await this.game.startGame(); - console.log({ res }); - console.log(this.game, "this.game"); + console.log("this START", this, "This"); + await this.game.startGame(); } async setupCombat() { if (this.combatInvitationsAllowed) { await this.handleCombatInvitation(); } this.checkCombatAllowed(); - this.game = new GameEngine(this.messageAPI, this.greenTeam, this.redTeam, this.options); + this.messageAPI = new CombatMessageAPI( + this.message, + this.options, + this.endGame + ); + this.game = new GameEngine( + this.messageAPI, + this.greenTeam, + this.redTeam, + this.options + ); } checkCombatAllowed() { if (!this.greenTeam.length) { @@ -54,24 +67,28 @@ class CombatWrapper { if (!this.redTeam.length) { return this.errorHandler("Missing team two"); } + if (!this.rewards) { + return this.errorHandler("Missing rewards"); + } } addGreenTeam(unit) { - console.log("adding unit to team one"); - Array.isArray(unit) ? this.greenTeam.push(...unit) : this.greenTeam.push(unit); + Array.isArray(unit) + ? this.greenTeam.push(...unit) + : this.greenTeam.push(unit); } addRedTeam(unit) { - console.log("adding unit to team two"); Array.isArray(unit) ? this.redTeam.push(...unit) : this.redTeam.push(unit); } convertWorldUnitToNpc(worldUnit) { - // DEFENSE? todo - // classname + // todo + // classname? + // defense? const { name, stats } = worldUnit; return { _id: Math.random().toString(), isNpc: true, account: { - username: name + username: name, }, hero: { rank: 3, @@ -79,19 +96,17 @@ class CombatWrapper { currentHealth: stats.health, attack: stats.attack, defense: stats.attack, - className: "Mage" - } + className: "Mage", + }, }; } convertArmyToNpc(user) { - // todo classname // todo balance this unit (with armory) - const { units, armory } = user.army; return { _id: Math.random().toString(), isNpc: true, account: { - username: `${user.account.username}'s army'` + username: `${user.account.username}'s army'`, }, hero: { rank: 3, @@ -99,38 +114,47 @@ class CombatWrapper { currentHealth: 200, attack: 30, defense: 30, - className: "UserArmy" - } + className: "UserArmy", + }, }; } - convertNpcToArmy(npc, user) { + convertNpcToArmy(npc) { // TODO calculate loss of health and remove percentage of units - console.log("converting to army"); + return npc; } errorHandler(error) { console.error("ERROR: ", error); this.combatCanStart = false; this.messageAPI.sendMessage(error); } + async endGame(winningTeam, losingTeam) { + // TODO give penalty to losing team if real players + const realPlayers = winningTeam.filter(player => !player.isNpc); + realPlayers.forEach(player => player.gainManyResources(this.rewards)); + await Promise.all(realPlayers.map(player => player.save())); + } async handleCombatInvitation() { - const getCombatIcons = () => ["🟢", "🔴"]; // should be 3 const icons = getCombatIcons(); - const invitation = await message.channel.send(createEmbedInvitation(this)); const reactionIcon = getIcon("place", "icon"); const reactionFilter = (reaction) => icons.includes(reaction.emoji.name); - await asyncForEach((icons), async (r)=> invitation.react(r)); + await asyncForEach(icons, async (r) => invitation.react(r)); - const collector = await invitation.createReactionCollector(reactionFilter, { time: 1000 * 20, errors: ["time"] }); + const collector = await invitation.createReactionCollector(reactionFilter, { + time: 1000 * 20, + errors: ["time"], + }); collector.on("collect", async (result, reactedUser) => { - const user = await User.findOne({ "account.userId": reactedUser.id }).lean(); + const user = await User.findOne({ + "account.userId": reactedUser.id, + }).lean(); // todo, // is not reactedUser.bot // team is not too big @@ -143,60 +167,79 @@ class CombatWrapper { collector.on("end", async () => { // await startgame? }); - - } } module.exports = CombatWrapper; - const createEmbedInvitation = (place, user) => { - - + console.log("NOOOOOOOOOO"); const sideColor = "#45b6fe"; const { username } = user.account; const placeIcon = getIcon("place"); - const rules = `\` ${place.rooms.length} Rooms\`\n ${getIcon(place.boss.rules.canKill)} \`place deadly\`\n${getIcon(place.boss.rules.allowHelpers, "icon")} \`helpers allowed\`\n\n**Unclocks**: ${getIcon(place.boss.unlocks)} **${place.boss.unlocks}**\n`; - const stats = `${getIcon("health")} \`Health: ${place.boss.stats.health}\`\n ${getIcon("attack")} \`Attack: ${place.boss.stats.attack}\`\n ${getIcon(place.boss.stats.healing)} \`Healing\`\n`; - const rewards = `${getIcon("gold")} \`Gold: ${place.boss.rewards.gold}\`\n ${getIcon("xp")} \`XP: ${place.boss.rewards.xp}\`\n${getIcon(!!place.boss.rewards.drop.length)} \`Loot drop\`\n\n `; - const bossWeapons = place.boss.bossWeapons.map(w => `${getIcon(w)} \`${w}\``); - - const fields = [{ - name: `${place.boss.name}'s Boss stats:`, - value: stats, - inline: true, - }, - { - name: `${place.boss.name}'s weapons:`, - value: bossWeapons, - inline: true, - }, - - { - name: "\u200B", - value: "\u200B", - inline: false, - }, - { - name: "Rules", - value: rules, - inline: true, - }, - - { - name: `${place.boss.name}'s rewards:`, - value: rewards, - inline: true, - }]; + const rules = `\` ${place.rooms.length} Rooms\`\n ${getIcon( + place.boss.rules.canKill + )} \`place deadly\`\n${getIcon( + place.boss.rules.allowHelpers, + "icon" + )} \`helpers allowed\`\n\n**Unclocks**: ${getIcon(place.boss.unlocks)} **${ + place.boss.unlocks + }**\n`; + const stats = `${getIcon("health")} \`Health: ${ + place.boss.stats.health + }\`\n ${getIcon("attack")} \`Attack: ${place.boss.stats.attack}\`\n ${getIcon( + place.boss.stats.healing + )} \`Healing\`\n`; + const rewards = `${getIcon("gold")} \`Gold: ${ + place.boss.rewards.gold + }\`\n ${getIcon("xp")} \`XP: ${place.boss.rewards.xp}\`\n${getIcon( + !!place.boss.rewards.drop.length + )} \`Loot drop\`\n\n `; + const bossWeapons = place.boss.bossWeapons.map( + (w) => `${getIcon(w)} \`${w}\`` + ); + + const fields = [ + { + name: `${place.boss.name}'s Boss stats:`, + value: stats, + inline: true, + }, + { + name: `${place.boss.name}'s weapons:`, + value: bossWeapons, + inline: true, + }, + + { + name: "\u200B", + value: "\u200B", + inline: false, + }, + { + name: "Rules", + value: rules, + inline: true, + }, + + { + name: `${place.boss.name}'s rewards:`, + value: rewards, + inline: true, + }, + ]; const embedInvitation = new Discord.MessageEmbed() .setTitle(`${username} is going for the place !!`) - .setDescription(`Help taking out ${placeIcon} **${place.boss.name}** in ${place.name}!`) - .setColor(sideColor) - .addFields( - ...fields, + .setDescription( + `Help taking out ${placeIcon} **${place.boss.name}** in ${place.name}!` ) - .setFooter(`React with a ${getIcon("place", "icon")} within 20 seconds to participate! (max 5!)`); + .setColor(sideColor) + .addFields(...fields) + .setFooter( + `React with a ${getIcon( + "place", + "icon" + )} within 20 seconds to participate! (max 5!)` + ); return embedInvitation; - -}; \ No newline at end of file +}; diff --git a/combat/advancedClassesCombat/WorldCombat.js b/combat/advancedClassesCombat/WorldCombat.js index 0e2b415..ac7babd 100644 --- a/combat/advancedClassesCombat/WorldCombat.js +++ b/combat/advancedClassesCombat/WorldCombat.js @@ -5,141 +5,155 @@ const { getIcon } = require("../../game/_CONSTS/icons"); const { userIsOnCooldown } = require("../../game/_CONSTS/cooldowns"); - class WorldCombat extends CombatWrapper { - constructor(data) { - super(data); - this.place = data.place = ""; - this.worldIcon = getIcon(this.user.world.currentLocation); - this.placeInfo = this.getPlaceInfo(); - this.actionIcon = getIcon(this.nameOfClass); - this.setupWorldCombat() - } - - setupWorldCombat(){ - this.checkWorldCombatAllowed() - } - checkWorldCombatAllowed(){ - // cooldown - if (!this.placeInfo){ - return this.errorHandler("Something went wrong"); - } - if (userIsOnCooldown(this.nameOfClass, this.user)) { - return this.errorHandler("You are on cooldown"); - } - } - - getPlaceInfo() { - const { currentLocation } = this.user.world; - const placesInCurrentWorld = worldLocations[currentLocation].places; - const userExploredPlaces = this.user.world.locations[currentLocation].explored; - - const userExploredActionPlaces = userExploredPlaces - .filter(p => placesInCurrentWorld[p].type === this.nameOfClass) - .map(p => p.replace(/\s/g, "").toLowerCase()); - - // user has not found any place to explore - if (!userExploredActionPlaces.length) { - return this.errorHandler(`You have not explored any place to ${this.nameOfClass} in ${this.worldIcon} ${currentLocation}, try \`!explore\` to find a place to ${this.nameOfClass}`); - } - - const notActionPlaces = Object.keys(placesInCurrentWorld) - .filter(p => placesInCurrentWorld[p].type !== this.nameOfClass) - .map(p => placesInCurrentWorld[p]) - .map(p => this.#formatName(p.name)); - - // if user tries to perform an action on a wrong place - if (notActionPlaces.includes(this.#formatName(this.place))) { - return this.errorHandler(`This is not a ${this.nameOfClass}`); - } - - const listOfActionPlaces = Object.values(placesInCurrentWorld) - .filter(p => userExploredActionPlaces.includes(this.#formatName(p.name))) - return this.place - ? listOfActionPlaces.find(p => this.#formatName(p.name) === this.place) - : listOfActionPlaces[Math.floor(Math.random() * listOfActionPlaces.length)]; - } - - questHandler(){ - // temp. remove when new quest have arrived. - if (this.currentLocation !== "Grassy Plains") { - return; - } - - // Does the user have a quest here - const currentQuest = this.user.quests.find(q => { - if (q.pve) { - return q.pve.find(action => action.name === this.placeInfo.name && !action.completed) && q.started - } - }) - console.log({currentQuest}) - - - if(currentQuest) { - // Update the objective in the users' quest - let objectiveFound = false; - let unique = false; - console.log(currentQuest.pve) - currentQuest.pve = currentQuest.pve.map(pve => { - // Does this math.random actually work? - if(pve.chance > Math.random()) { - objectiveFound = true; - pve.completed = true; - - // If you can only do the fight once - unique = !!pve.unique - } - return pve; - }); - - if(unique){ - this.user.removeExploredArea(currentLocation, place); - } - - // Find the quest in the quest object - let questObj; - currentQuest.questKeySequence.forEach(questKey => { - questObj = questObj ? questObj[questKey] : allQuests[questKey]; - }); - console.log(questObj) - - if(objectiveFound) { - console.log(objectiveFound) - this.user.updateQuestObjective(currentQuest); - if(questObj.foundNewQuest) questObj.foundNewQuest(this.user); - - return questObj.found; - } - return questObj.notFound; - } - - // GETTING A NEW QUEST - // Is there a quest for the location, and has it been started/found already? - const quest = Object.values(allQuests[currentLocation]).find(q => q.obtaining && q.obtaining.area === place && !this.user.completedQuests.includes(q.name) && !this.user.quests.find(startedQuests => startedQuests.name === q.name)); - - // If no quest or low luck, return - const obtainNumber = Math.random(); - if(!quest || obtainNumber > quest.obtaining.chance) return; - - // Add the new quest to the user - const newQuest = { - name: quest.name, - started: false, - questKeySequence: quest.questKeySequence, - pve: quest.pve, - }; - - this.user.addNewQuest(newQuest); - - this.messageAPI.queueMessage({ - name: `${getIcon("quest")}Quest${getIcon("quest")}`, - value: quest.intro, - }) - } - - // removes spaces and returns lowercased string - #formatName = (name) => name.replace(/\s/g, "").toLowerCase() + constructor(data) { + super({...data}); + this.place = data.place = ""; + this.worldIcon = getIcon(this.user.world.currentLocation); + this.placeInfo = this.getPlaceInfo(); + this.actionIcon = getIcon(this.nameOfClass); + this.setupWorldCombat(); + this.rewards = this.calculateRewards() + } + + setupWorldCombat() { + this.checkWorldCombatAllowed(); + } + calculateRewards() { + if (!this.placeInfo) return; + return this.placeInfo.rewards + } + checkWorldCombatAllowed() { + // cooldown + if (!this.placeInfo) { + return this.errorHandler("Missing placeinfo"); + } + + if (userIsOnCooldown(this.nameOfClass, this.user)) { + return this.errorHandler("You are on cooldown"); + } + } + + getPlaceInfo() { + const { currentLocation } = this.user.world; + const placesInCurrentWorld = worldLocations[currentLocation].places; + const userExploredPlaces = + this.user.world.locations[currentLocation].explored; + + const userExploredActionPlaces = userExploredPlaces + .filter((p) => placesInCurrentWorld[p].type === this.nameOfClass) + .map((p) => p.replace(/\s/g, "").toLowerCase()); + + // user has not found any place to explore + if (!userExploredActionPlaces.length) { + return this.errorHandler( + `You have not explored any place to ${this.nameOfClass} in ${this.worldIcon} ${currentLocation}, try \`!explore\` to find a place to ${this.nameOfClass}` + ); + } + + const notActionPlaces = Object.keys(placesInCurrentWorld) + .filter((p) => placesInCurrentWorld[p].type !== this.nameOfClass) + .map((p) => placesInCurrentWorld[p]) + .map((p) => this.#formatName(p.name)); + + // if user tries to perform an action on a wrong place + if (notActionPlaces.includes(this.#formatName(this.place))) { + return this.errorHandler(`This is not a ${this.nameOfClass}`); + } + + const listOfActionPlaces = Object.values(placesInCurrentWorld).filter((p) => + userExploredActionPlaces.includes(this.#formatName(p.name)) + ); + return this.place + ? listOfActionPlaces.find((p) => this.#formatName(p.name) === this.place) + : listOfActionPlaces[ + Math.floor(Math.random() * listOfActionPlaces.length) + ]; + } + + questHandler() { + // temp. remove when new quest have arrived. + if (this.currentLocation !== "Grassy Plains") { + return; + } + + // Does the user have a quest here + const currentQuest = this.user.quests.find((q) => { + if (q.pve) { + return ( + q.pve.find( + (action) => action.name === this.placeInfo.name && !action.completed + ) && q.started + ); + } + }); + console.log({ currentQuest }); + + if (currentQuest) { + // Update the objective in the users' quest + let objectiveFound = false; + let unique = false; + currentQuest.pve = currentQuest.pve.map((pve) => { + // Does this math.random actually work? + if (pve.chance > Math.random()) { + objectiveFound = true; + pve.completed = true; + + // If you can only do the fight once + unique = !!pve.unique; + } + return pve; + }); + + if (unique) { + this.user.removeExploredArea(currentLocation, place); + } + + // Find the quest in the quest object + let questObj; + currentQuest.questKeySequence.forEach((questKey) => { + questObj = questObj ? questObj[questKey] : allQuests[questKey]; + }); + if (objectiveFound) { + this.user.updateQuestObjective(currentQuest); + if (questObj.foundNewQuest) questObj.foundNewQuest(this.user); + return questObj.found; + } + return questObj.notFound; + } + + // GETTING A NEW QUEST + // Is there a quest for the location, and has it been started/found already? + const quest = Object.values(allQuests[currentLocation]).find( + (q) => + q.obtaining && + q.obtaining.area === place && + !this.user.completedQuests.includes(q.name) && + !this.user.quests.find((startedQuests) => startedQuests.name === q.name) + ); + + // If no quest or low luck, return + const obtainNumber = Math.random(); + if (!quest || obtainNumber > quest.obtaining.chance) return; + + // Add the new quest to the user + const newQuest = { + name: quest.name, + started: false, + questKeySequence: quest.questKeySequence, + pve: quest.pve, + }; + + this.user.addNewQuest(newQuest); + + this.messageAPI.queueMessage({ + name: `${getIcon("quest")}Quest${getIcon("quest")}`, + value: quest.intro, + }); + } + + // removes spaces and returns lowercased string + #formatName = (name) => name.replace(/\s/g, "").toLowerCase(); } - -module.exports = WorldCombat; \ No newline at end of file +module.exports = WorldCombat; From 1a48b0cd8c2121d40c77336952cf31957993c89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tormod=20Flesj=C3=B8?= Date: Sat, 8 Jan 2022 01:36:40 +0100 Subject: [PATCH 18/19] add more reward logic --- .../advancedClassesCombat/CombatMessageAPI.js | 27 +++--- combat/advancedClassesCombat/CombatWrapper.js | 48 +++++----- combat/advancedClassesCombat/Raid.js | 2 +- combat/advancedClassesCombat/WorldCombat.js | 3 +- test/raid/index.test.js | 88 ------------------- 5 files changed, 39 insertions(+), 129 deletions(-) delete mode 100644 test/raid/index.test.js diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 484e0f3..31eb0bb 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -6,7 +6,6 @@ class CombatMessageAPI { this.message = message; this.options = options; this.game = null; - this.defaultSideColor = "#45b6fe"; this.previousAbilityResponse = []; this.effectMessages = []; @@ -108,7 +107,7 @@ class CombatMessageAPI { extraFields ); await this.message.channel.send(lastCombatTurnEmbed); - this.endGame(this.game.winningTeam, this.game.losingTeam); + this.endGame(this.game.winningTeam, this.game.losingTeam, this.options.rewards); }; _getName = (player) => { @@ -287,20 +286,18 @@ class CombatMessageAPI { fields.push(bottomLeftField); if (winningTeam.some((player) => !player.isNpc)) { - const {rewards} = this.options - const bottomRightField = { - name: `Rewards:`, - value: Object.entries(rewards) - .map((reward) => `${reward[0]}: ${reward[1]}`) - .join("\n") - .replace(/\\n$/), - inline: true, - }; - fields.push(bottomRightField); - } + const { rewards } = this.options; + const bottomRightField = { + name: `Rewards:`, + value: Object.entries(rewards) + .map((reward) => `${reward[0]}: ${reward[1]}`) + .join("\n") + .replace(/\\n$/), + inline: true, + }; + fields.push(bottomRightField); + } }; - - } module.exports = { CombatMessageAPI }; diff --git a/combat/advancedClassesCombat/CombatWrapper.js b/combat/advancedClassesCombat/CombatWrapper.js index f2f9632..177c789 100644 --- a/combat/advancedClassesCombat/CombatWrapper.js +++ b/combat/advancedClassesCombat/CombatWrapper.js @@ -5,8 +5,7 @@ const { CombatMessageAPI } = require("./CombatMessageAPI"); const { asyncForEach } = require("../../game/_GLOBAL_HELPERS"); const { getIcon } = require("../../game/_CONSTS/icons"); -/* -const options = { +/* const options = { maxRounds: Number, armyAllowed: Boolean, helpersAllowed: Boolean, @@ -17,16 +16,14 @@ const options = { class CombatWrapper { constructor(data) { - console.log("data START", data, "data"); - if (!data.user || !data.nameOfClass || !data.message || !data.options) { - throw new Error( - "Cannot create an instance without user, nameOfClass, message or options" - ); + const { user, nameOfClass, message, options } = data; + if ([user, nameOfClass, message, options].includes(undefined)) { + throw new Error("Cannot create an instance without user, nameOfClass, message and options"); } - this.user = data.user; - this.nameOfClass = data.nameOfClass; - this.options = { ...data.options, rewards: this.rewards }, - this.message = data.message; + this.user = user; + this.nameOfClass = nameOfClass; + this.options = options; + this.message = message; this.game; this.messageAPI; @@ -40,7 +37,6 @@ class CombatWrapper { if (!this.combatCanStart) { return; } - console.log("this START", this, "This"); await this.game.startGame(); } async setupCombat() { @@ -48,16 +44,18 @@ class CombatWrapper { await this.handleCombatInvitation(); } this.checkCombatAllowed(); + const options = { ...this.options, rewards: this.rewards }; + this.messageAPI = new CombatMessageAPI( this.message, - this.options, + options, this.endGame ); this.game = new GameEngine( this.messageAPI, this.greenTeam, this.redTeam, - this.options + options ); } checkCombatAllowed() { @@ -81,7 +79,6 @@ class CombatWrapper { } convertWorldUnitToNpc(worldUnit) { // todo - // classname? // defense? const { name, stats } = worldUnit; return { @@ -119,19 +116,23 @@ class CombatWrapper { }; } convertNpcToArmy(npc) { - // TODO calculate loss of health and remove percentage of units - return npc; - } + // TODO + // - calculate loss of health and remove percentage of units + // - convert back to army unit + // - update user army in another method + return npc; + } errorHandler(error) { console.error("ERROR: ", error); this.combatCanStart = false; this.messageAPI.sendMessage(error); + throw new Error(error); } - async endGame(winningTeam, losingTeam) { - // TODO give penalty to losing team if real players - const realPlayers = winningTeam.filter(player => !player.isNpc); - realPlayers.forEach(player => player.gainManyResources(this.rewards)); - await Promise.all(realPlayers.map(player => player.save())); + async endGame(winningTeam, losingTeam, rewards) { + // TODO give penalty to losing team if real players. eg health loss or whatever + const realPlayersWinners = winningTeam.filter(player => !player.isNpc); + realPlayersWinners.forEach(player => player.gainManyResources(rewards)); + await Promise.all(realPlayersWinners.map(player => player.save())); } async handleCombatInvitation() { @@ -172,7 +173,6 @@ class CombatWrapper { module.exports = CombatWrapper; const createEmbedInvitation = (place, user) => { - console.log("NOOOOOOOOOO"); const sideColor = "#45b6fe"; const { username } = user.account; const placeIcon = getIcon("place"); diff --git a/combat/advancedClassesCombat/Raid.js b/combat/advancedClassesCombat/Raid.js index 5af4d7b..d071add 100644 --- a/combat/advancedClassesCombat/Raid.js +++ b/combat/advancedClassesCombat/Raid.js @@ -23,7 +23,7 @@ class Raid extends WorldCombat { } checkRaidAllowed() { if (this.user.hero.currentHealth < this.user.hero.health * config.minHealthPercentage && this.user.hero.currentHealth < config.minHealthPoints) { - return this.errorHandler(`Your'e too weak to raid (**${this.user.hero.currentHealth} hp**)`); + return this.errorHandler(`You're too weak to raid (**${this.user.hero.currentHealth} hp**)`); } } setupRaid() { diff --git a/combat/advancedClassesCombat/WorldCombat.js b/combat/advancedClassesCombat/WorldCombat.js index ac7babd..c481978 100644 --- a/combat/advancedClassesCombat/WorldCombat.js +++ b/combat/advancedClassesCombat/WorldCombat.js @@ -7,7 +7,7 @@ const { userIsOnCooldown } = require("../../game/_CONSTS/cooldowns"); class WorldCombat extends CombatWrapper { constructor(data) { - super({...data}); + super({...data }); this.place = data.place = ""; this.worldIcon = getIcon(this.user.world.currentLocation); this.placeInfo = this.getPlaceInfo(); @@ -24,6 +24,7 @@ class WorldCombat extends CombatWrapper { return this.placeInfo.rewards } checkWorldCombatAllowed() { + // todo, cooldown // cooldown if (!this.placeInfo) { return this.errorHandler("Missing placeinfo"); diff --git a/test/raid/index.test.js b/test/raid/index.test.js deleted file mode 100644 index 83ce3e6..0000000 --- a/test/raid/index.test.js +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable no-undef */ - -const { expect } = require("chai"); -const raidCommand = require("../../commands/raid"); -const { createTestUser, generateDiscordMessage, mockDays } = require("../helper"); - -const opTestStats = { - hero:{ - currentHealth:500, health:500, attack:500, - }, - world:{ - locations:{ - "Grassy Plains":{ - explored:["Collapsed Mine", "Bandit Camp"], - }, - }, - }, - army: { - units:{ - archery:{ - ranger:500, - }, - }, - }, -}; - - -describe("raid command", () => { - - it("should exist", () => { - expect(raidCommand).to.not.equal(undefined); - }); - it("should not be able if no raiding places explored", async ()=>{ - const testUser = await createTestUser(); - const mockMessage = generateDiscordMessage(testUser); - const result = await raidCommand.execute(mockMessage, [], testUser); - expect(result).to.be.equal("You have not explored any place to raid in :deciduous_tree: Grassy Plains, try `!explore` to find a place to raid"); - }); - it("should run into cooldown if triggered too fast", async ()=>{ - const testUser = await createTestUser({ world:{ locations:{ "Grassy Plains":{ explored:["Bandit Camp"] } } } }); - const mockMessage = generateDiscordMessage(testUser); - await raidCommand.execute(mockMessage, [], testUser); - const result = await raidCommand.execute(mockMessage, [], testUser); - expect(result.title).to.be.equal("Cooldown"); - }); - it("should not be able to hunt if health is too low", async ()=>{ - const testUser = await createTestUser({ hero:{ currentHealth:0 } }); - const mockMessage = generateDiscordMessage(testUser); - const result = await raidCommand.execute(mockMessage, [], testUser); - expect(result).to.have.string("Your hero's health is too low (**0**)"); - }); - it("should not be able to raid a hunting, dungeon or miniboss place", async ()=>{ - const places = ["Collapsed Mine", "Forest"]; - const testUser = await createTestUser({ world:{ locations:{ "Grassy Plains":{ explored:places } } } }); - const mockMessage = generateDiscordMessage(testUser); - const result = await raidCommand.execute(mockMessage, [places[1]], testUser); - expect(result).to.be.equal("This place cannot be raided"); - }); - it("should not be able to raid a place even though the player knows the name", async ()=>{ - const unknownPlace = "Bandit Camp"; - const testUser = await createTestUser({ world:{ locations:{ "Grassy Plains":{ explored:["Collapsed Mine"] } } } }); - const mockMessage = generateDiscordMessage(testUser); - const result = await raidCommand.execute(mockMessage, [unknownPlace], testUser); - expect(result).to.be.equal("You haven't explored this place yet. Try `!explore` in order to find it!"); - }); - it("should be able to raid if a raiding place is explored", async ()=>{ - const testUser = await createTestUser(opTestStats); - const mockMessage = generateDiscordMessage(testUser); - const result = await raidCommand.execute(mockMessage, [], testUser); - expect(result.title).to.have.string("Anniken Avisbud's army raided :man_supervillain:"); - await testUser.setNewCooldown("raid", mockDays(1)); - testUser.hero.currentHealth = testUser.hero.health; - await testUser.save(); - const result2 = await raidCommand.execute(mockMessage, ["Bandit Camp"], testUser); - expect(result2.title).to.be.equal("Anniken Avisbud's army raided :man_supervillain: Bandit Camp"); - - }); - it("should gain resources when when raiding successfully", async ()=>{ - const testUser = await createTestUser(opTestStats); - const mockMessage = generateDiscordMessage(testUser); - - for (let i = 0; i < 5; i++) { - await raidCommand.execute(mockMessage, [], testUser); - await testUser.setNewCooldown("hunt", mockDays(i + 1)); - } - expect(testUser.resources.gold).to.not.equal(0); - }); -}); From 79a1f86845f54a353e87e1a5f2521441eae9a773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tormod=20Flesj=C3=B8?= Date: Sat, 8 Jan 2022 21:18:07 +0100 Subject: [PATCH 19/19] Add more raid logic --- .../advancedClassesCombat/CombatMessageAPI.js | 18 ++++++- combat/advancedClassesCombat/CombatWrapper.js | 53 +++++++++++-------- combat/advancedClassesCombat/Raid.js | 3 +- combat/advancedClassesCombat/WorldCombat.js | 2 +- commands/raid.js | 4 +- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/combat/advancedClassesCombat/CombatMessageAPI.js b/combat/advancedClassesCombat/CombatMessageAPI.js index 31eb0bb..5b03cf4 100644 --- a/combat/advancedClassesCombat/CombatMessageAPI.js +++ b/combat/advancedClassesCombat/CombatMessageAPI.js @@ -1,6 +1,6 @@ const Discord = require("discord.js"); const combatConstants = require("../../game/_CONSTS/combat.json"); - +const { getIcon } = require("../../game/_CONSTS/icons"); class CombatMessageAPI { constructor(message, options = {}, cb) { this.message = message; @@ -107,6 +107,8 @@ class CombatMessageAPI { extraFields ); await this.message.channel.send(lastCombatTurnEmbed); + console.log("End game message sent"); + console.log("THIS:GAME", this.game); this.endGame(this.game.winningTeam, this.game.losingTeam, this.options.rewards); }; @@ -216,6 +218,7 @@ class CombatMessageAPI { this.effectMessages.join("\n \n") + this.deathMessages .map((p) => this._getName(p) + " has died") + .filter(onlyUnique) .join("\n"), inline: true, }; @@ -290,7 +293,10 @@ class CombatMessageAPI { const bottomRightField = { name: `Rewards:`, value: Object.entries(rewards) - .map((reward) => `${reward[0]}: ${reward[1]}`) + .map( + ([reward, rewardAmount]) => + `${getIcon(reward)} ${makeFirstLetterUpperCase(reward)}: ${rewardAmount}` + ) .join("\n") .replace(/\\n$/), inline: true, @@ -300,4 +306,12 @@ class CombatMessageAPI { }; } +// https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates +const onlyUnique = (value, index, self) => { + return self.indexOf(value) === index; +} +const makeFirstLetterUpperCase = (str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +} + module.exports = { CombatMessageAPI }; diff --git a/combat/advancedClassesCombat/CombatWrapper.js b/combat/advancedClassesCombat/CombatWrapper.js index 177c789..7a6327b 100644 --- a/combat/advancedClassesCombat/CombatWrapper.js +++ b/combat/advancedClassesCombat/CombatWrapper.js @@ -98,30 +98,32 @@ class CombatWrapper { }; } convertArmyToNpc(user) { - // todo balance this unit (with armory) - return { - _id: Math.random().toString(), - isNpc: true, - account: { - username: `${user.account.username}'s army'`, - }, - hero: { - rank: 3, - health: 200, - currentHealth: 200, - attack: 30, - defense: 30, - className: "UserArmy", - }, - }; - } + // todo + // - balance this unit (with armory) + // - create an actual function and not this mock up + return { + _id: Math.random().toString(), + isNpc: true, + account: { + username: `${user.account.username}'s army'`, + }, + hero: { + rank: 3, + health: 200, + currentHealth: 200, + attack: 1, + defense: 1, + className: "UserArmy", + }, + }; + } convertNpcToArmy(npc) { - // TODO - // - calculate loss of health and remove percentage of units + // TODO + // - calculate loss of health and remove percentage of units // - convert back to army unit // - update user army in another method - return npc; - } + return npc; + } errorHandler(error) { console.error("ERROR: ", error); this.combatCanStart = false; @@ -129,6 +131,11 @@ class CombatWrapper { throw new Error(error); } async endGame(winningTeam, losingTeam, rewards) { + console.log({ + winningTeam: JSON.stringify(winningTeam), + losingTeam: JSON.stringify(losingTeam), + rewards, + }); // TODO give penalty to losing team if real players. eg health loss or whatever const realPlayersWinners = winningTeam.filter(player => !player.isNpc); realPlayersWinners.forEach(player => player.gainManyResources(rewards)); @@ -136,11 +143,11 @@ class CombatWrapper { } async handleCombatInvitation() { - const getCombatIcons = () => ["🟢", "🔴"]; // should be 3 + const getCombatIcons = () => ["🟢", "🔴"]; const icons = getCombatIcons(); - const invitation = await message.channel.send(createEmbedInvitation(this)); + const invitation = await this.message.channel.send(createEmbedInvitation(this)); const reactionIcon = getIcon("place", "icon"); const reactionFilter = (reaction) => icons.includes(reaction.emoji.name); diff --git a/combat/advancedClassesCombat/Raid.js b/combat/advancedClassesCombat/Raid.js index d071add..3f189f4 100644 --- a/combat/advancedClassesCombat/Raid.js +++ b/combat/advancedClassesCombat/Raid.js @@ -2,13 +2,14 @@ const WorldCombat = require("./WorldCombat"); const NAME_OF_CLASS = "raid"; + const config = { minHealthPercentage: 0.05, // 5% minHealthPoints: 50, }; const options = { - maxRounds: 3, + maxRounds: 10, combatInvitationsAllowed: false, armyAllowed: true, }; diff --git a/combat/advancedClassesCombat/WorldCombat.js b/combat/advancedClassesCombat/WorldCombat.js index c481978..8558de2 100644 --- a/combat/advancedClassesCombat/WorldCombat.js +++ b/combat/advancedClassesCombat/WorldCombat.js @@ -8,7 +8,7 @@ const { userIsOnCooldown } = require("../../game/_CONSTS/cooldowns"); class WorldCombat extends CombatWrapper { constructor(data) { super({...data }); - this.place = data.place = ""; + this.place = data.place || ""; this.worldIcon = getIcon(this.user.world.currentLocation); this.placeInfo = this.getPlaceInfo(); this.actionIcon = getIcon(this.nameOfClass); diff --git a/commands/raid.js b/commands/raid.js index b96d7b5..87dd528 100644 --- a/commands/raid.js +++ b/commands/raid.js @@ -14,8 +14,8 @@ module.exports = { bv: "Bandit Vault", }, async execute(message, args, user) { - const location = args.join("").toLowerCase(); - const raid = new Raid({ message, user, location }); + const place = args.join("").toLowerCase(); + const raid = new Raid({ message, user, place }); await raid.startCombat(); }, };