From 01d5aafda8a2a05d3820ab4a5b36fec93404983e Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Tue, 19 Jan 2021 11:54:10 +0100 Subject: [PATCH 01/43] refactor(Player): Change `attributes.attribute` to `attributes.name` in Player class. Closes #105 --- CHANGELOG.md | 26 + package-lock.json | 1145 +++++++++-------- package.json | 32 +- src/classes/Player.js | 2 +- .../UsePotionPlayField.vue | 10 +- .../GameVillagersSide/GameVillagersSide.vue | 3 +- .../GameWerewolvesSide/GameWerewolvesSide.vue | 3 +- 7 files changed, 653 insertions(+), 568 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f0181..3584eca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # 📈 LIST OF CHANGES FOR WEREWOLVES ASSISTANT WEB +## 1.0.0-beta.10 (2021-??-??) + +### ♻️ Refactoring + +* [#105](https://github.com/antoinezanardi/werewolves-assistant-web/issues/105) - Change `attributes.attribute` to `attributes.name` in Player class. + +### 📦 Packages + +* `@sentry/browser` updated to version `5.30.0`. +* `@sentry/integrations` updated to version `5.30.0`. +* `@vue/cli-plugin-e2e-cypress` updated to version `4.5.10`. +* `@vue/cli-plugin-eslint` updated to version `4.5.10`. +* `@vue/cli-plugin-router` updated to version `4.5.10`. +* `@vue/cli-plugin-unit-mocha` updated to version `4.5.10`. +* `@vue/cli-plugin-vuex` updated to version `4.5.10`. +* `@vue/cli-service` updated to version `4.5.10`. +* `eslint` updated to version `7.18.0`. +* `eslint-plugin-vue` updated to version `7.4.1`. +* `qs` updated to version `6.9.6`. +* `sass-loader` updated to version `10.1.1`. +* `sweetalert2` updated to version `10.13.0`. +* `v-tooltip` updated to version `2.1.2`. +* `vue-i18n` updated to version `8.22.4`. + +--- + ## 1.0.0-beta.9 (2020-12-30) ### 🚀 New features diff --git a/package-lock.json b/package-lock.json index ab69fed..4f49d16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,18 +5,18 @@ "requires": true, "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==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "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==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { @@ -135,9 +135,9 @@ } }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -147,7 +147,7 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -192,6 +192,12 @@ "resolve-from": "^4.0.0" } }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -213,9 +219,9 @@ } }, "@fortawesome/fontawesome-free": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.1.tgz", - "integrity": "sha512-OEdH7SyC1suTdhBGW91/zBfR6qaIhThbcN8PUXtXilY4GYnSBbVqOntdHbC1vXwsDnX0Qix2m2+DSU1J51ybOQ==" + "version": "5.15.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.2.tgz", + "integrity": "sha512-7l/AX41m609L/EXI9EKH3Vs3v0iA8tKlIOGtw+kgcoanI7p+e4I4GYLqW3UXWiTnjSFymKSmTTPKYrivzbxxqA==" }, "@hapi/address": { "version": "2.1.4", @@ -278,19 +284,19 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" }, "dependencies": { "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true } } @@ -302,12 +308,12 @@ "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, @@ -344,109 +350,91 @@ } }, "@sentry/browser": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.29.2.tgz", - "integrity": "sha512-uxZ7y7rp85tJll+RZtXRhXPbnFnOaxZqJEv05vJlXBtBNLQtlczV5iCtU9mZRLVHDtmZ5VVKUV8IKXntEqqDpQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.30.0.tgz", + "integrity": "sha512-rOb58ZNVJWh1VuMuBG1mL9r54nZqKeaIlwSlvzJfc89vyfd7n6tQ1UXMN383QBz/MS5H5z44Hy5eE+7pCrYAfw==", "requires": { - "@sentry/core": "5.29.2", - "@sentry/types": "5.29.2", - "@sentry/utils": "5.29.2", + "@sentry/core": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", "tslib": "^1.9.3" } }, "@sentry/core": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.29.2.tgz", - "integrity": "sha512-7WYkoxB5IdlNEbwOwqSU64erUKH4laavPsM0/yQ+jojM76ErxlgEF0u//p5WaLPRzh3iDSt6BH+9TL45oNZeZw==", - "requires": { - "@sentry/hub": "5.29.2", - "@sentry/minimal": "5.29.2", - "@sentry/types": "5.29.2", - "@sentry/utils": "5.29.2", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.29.2.tgz", - "integrity": "sha512-LaAIo2hwUk9ykeh9RF0cwLy6IRw+DjEee8l1HfEaDFUM6TPGlNNGObMJNXb9/95jzWp7jWwOpQjoIE3jepdQJQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "requires": { - "@sentry/types": "5.29.2", - "@sentry/utils": "5.29.2", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", "tslib": "^1.9.3" } }, "@sentry/integrations": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-5.29.2.tgz", - "integrity": "sha512-bH50B0xubbHrJFq8xZRxOc5BgXe1PXKfC0OqQkhhSd+Bu2WDLCHcn0CEzV+8thZTYkipAoFAFJNdEWcsM2Wcew==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-5.30.0.tgz", + "integrity": "sha512-Fqh4ALLoQWdd+1ih0iBduANWFyNmFWMxwvBu3V/wLDRi8OcquI0lEzWai1InzTJTiNhRHPnhuU++l/vkO0OCww==", "requires": { - "@sentry/types": "5.29.2", - "@sentry/utils": "5.29.2", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", "localforage": "1.8.1", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.29.2.tgz", - "integrity": "sha512-0aINSm8fGA1KyM7PavOBe1GDZDxrvnKt+oFnU0L+bTcw8Lr+of+v6Kwd97rkLRNOLw621xP076dL/7LSIzMuhw==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "requires": { - "@sentry/hub": "5.29.2", - "@sentry/types": "5.29.2", + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", "tslib": "^1.9.3" } }, "@sentry/types": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.29.2.tgz", - "integrity": "sha512-dM9wgt8wy4WRty75QkqQgrw9FV9F+BOMfmc0iaX13Qos7i6Qs2Q0dxtJ83SoR4YGtW8URaHzlDtWlGs5egBiMA==" + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" }, "@sentry/utils": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.29.2.tgz", - "integrity": "sha512-nEwQIDjtFkeE4k6yIk4Ka5XjGRklNLThWLs2xfXlL7uwrYOH2B9UBBOOIRUraBm/g/Xrra3xsam/kRxuiwtXZQ==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "requires": { - "@sentry/types": "5.29.2", + "@sentry/types": "5.30.0", "tslib": "^1.9.3" } }, "@soda/friendly-errors-webpack-plugin": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz", - "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.0.tgz", + "integrity": "sha512-RLotfx6k1+nfLacwNCenj7VnTMPxVwYKoGOcffMFoJDKM8tXzBiCN0hMHFJNnoAojduYAsxuiMm0EOMixgiRow==", "dev": true, "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" + "chalk": "^2.4.2", + "error-stack-parser": "^2.0.2", + "string-width": "^2.0.0", + "strip-ansi": "^5" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, "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", @@ -463,12 +451,6 @@ "strip-ansi": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -481,19 +463,21 @@ } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^4.1.0" + }, + "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==", + "dev": true + } } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, @@ -520,9 +504,9 @@ } }, "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", "dev": true, "requires": { "@types/node": "*" @@ -539,21 +523,21 @@ } }, "@types/express": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", - "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", + "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "*", + "@types/express-serve-static-core": "^4.17.18", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", - "integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==", + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz", + "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==", "dev": true, "requires": { "@types/node": "*", @@ -572,9 +556,9 @@ } }, "@types/http-proxy": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.4.tgz", - "integrity": "sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", + "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", "dev": true, "requires": { "@types/node": "*" @@ -603,9 +587,9 @@ "dev": true }, "@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/minimatch": { @@ -621,9 +605,9 @@ "dev": true }, "@types/node": { - "version": "14.14.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.8.tgz", - "integrity": "sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA==", + "version": "14.14.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", + "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", "dev": true }, "@types/normalize-package-data": { @@ -651,12 +635,12 @@ "dev": true }, "@types/serve-static": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", - "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", "dev": true, "requires": { - "@types/mime": "*", + "@types/mime": "^1", "@types/node": "*" } }, @@ -696,9 +680,9 @@ } }, "@types/webpack": { - "version": "4.41.25", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz", - "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==", + "version": "4.41.26", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.26.tgz", + "integrity": "sha512-7ZyTfxjCRwexh+EJFwRUM+CDB2XvgHl4vfuqf1ZKrgGvcS5BrNvPQqJh3tsZ0P6h6Aa1qClVHaJZszLPzpqHeA==", "dev": true, "requires": { "@types/anymatch": "*", @@ -731,9 +715,9 @@ } }, "@types/webpack-sources": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz", - "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", "dev": true, "requires": { "@types/node": "*", @@ -750,29 +734,29 @@ } }, "@vue/cli-overlay": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.9.tgz", - "integrity": "sha512-E2PWv6tCdUz+eEDj2Th2oxiKmzMe02qi0PcxiNaO7oaqggmEOrp1rLgop7DWpiLDBiqUZk2x0vjK/q2Tz8z/eg==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.10.tgz", + "integrity": "sha512-BydPsWJTXHTzH8wBcN1rinwLe5QRee52sf/Tceixpn4VVZCio2k8VkNG/o6hRTA+MeGuetXOhmAz0UQfIxfX8w==", "dev": true }, "@vue/cli-plugin-e2e-cypress": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.5.9.tgz", - "integrity": "sha512-UUlA3wt5gqMxQ8BhvtwQ/4poMcx/6/dwhrXVUFizkYQs3Az8HDt5GHjrd02FN1shRc3JtfsNvkFiRa0ToIm7zw==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.5.10.tgz", + "integrity": "sha512-0j42utcD5Jnw0M5A2Zhgt23GmbKOkJ3fjqSVqd0uHM4IXuPLe8Kcem9MZ1wmeWeCAbG4BBSk1QQZhTrnFolt6Q==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^4.5.9", + "@vue/cli-shared-utils": "^4.5.10", "cypress": "^3.8.3", "eslint-plugin-cypress": "^2.10.3" } }, "@vue/cli-plugin-eslint": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.9.tgz", - "integrity": "sha512-wTsWRiRWPW5ik4bgtlh4P4h63Zgjsyvqx2FY0kcj+bSAnQGPJ3bKUOMU9KQP5EyNH6pAXMVGh2LEXK9WwJMf1w==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.10.tgz", + "integrity": "sha512-2ud8lurlMJCtcErjhYBcTWhu5eN79sCBGz5dHBAmtLP0k7p7xZq7/1mo2ahnZioUskYrfz94Vo9i+D3pOUMuMQ==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^4.5.9", + "@vue/cli-shared-utils": "^4.5.10", "eslint-loader": "^2.2.1", "globby": "^9.2.0", "inquirer": "^7.1.0", @@ -781,21 +765,21 @@ } }, "@vue/cli-plugin-router": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.9.tgz", - "integrity": "sha512-eBBfbZpQ1sJrdlx8i7iReFxSnuzwmrv+s2OCT3kjBd6uWRqGnD4VihpS4srC7vZLzDQrDplumSn0a93L9Qf3wQ==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.10.tgz", + "integrity": "sha512-roiZTx2W59kTRaqNzHEnjnakP89MS+pVf3zWBlwsNXZpQuvqwFvoNfH/nBSJjqGRgZTRtCUe6vGgVPUEFYi/cg==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^4.5.9" + "@vue/cli-shared-utils": "^4.5.10" } }, "@vue/cli-plugin-unit-mocha": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-4.5.9.tgz", - "integrity": "sha512-dM8EAqUocLW44J0Grm7nYPnu3yI2hxEoj5bzK9l3soOerBFu48Z5ONIeSx+0Lpxldxmnh0KRmIDtsbQNfLoc1g==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-4.5.10.tgz", + "integrity": "sha512-mNt5mN2VY0PsnQUv45dti9ZQ7VZmCUmG8PvJBsOjG8G/RWHJF7prUZK5uUUXQ7N26wk7WWIbRmCZv/eBwVRcMA==", "dev": true, "requires": { - "@vue/cli-shared-utils": "^4.5.9", + "@vue/cli-shared-utils": "^4.5.10", "jsdom": "^15.2.1", "jsdom-global": "^3.0.2", "mocha": "^6.2.2", @@ -803,15 +787,15 @@ } }, "@vue/cli-plugin-vuex": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.9.tgz", - "integrity": "sha512-mFNIJhYiJjzCgytkDHX00ROy5Yzl7prkZpUbeDE0biwcLteMf2s3qZVbESOQl6GcviqcfEt2f3tHQQtLNa+OLg==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.10.tgz", + "integrity": "sha512-Z5pnL3Eg2uwkKqP09NoM46/rwQCJ1j/1cZMgO4JF817O9n5AsFgV456UE6lK2cVCvIfvt7+S3HLrSPZUsYNQjQ==", "dev": true }, "@vue/cli-service": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.9.tgz", - "integrity": "sha512-E3XlfM0q+UnnjbC9rwLIWNo2umZCRwnlMJY0KOhY1hFvqisGIYzFmQQ4o01KGyTx2BZNMuQg7Kw+BZ5gyM1Wig==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.10.tgz", + "integrity": "sha512-HnVkbc+Zb6J1lu0ojuKC6aQ4PjCW2fqlJE0G9Zqg+7VsUZ2e15UVRoIXj2hcIWtQiFF6n2FDxEkvZLslht9rkg==", "dev": true, "requires": { "@intervolga/optimize-cssnano-plugin": "^1.0.5", @@ -820,10 +804,10 @@ "@types/minimist": "^1.2.0", "@types/webpack": "^4.0.0", "@types/webpack-dev-server": "^3.11.0", - "@vue/cli-overlay": "^4.5.9", - "@vue/cli-plugin-router": "^4.5.9", - "@vue/cli-plugin-vuex": "^4.5.9", - "@vue/cli-shared-utils": "^4.5.9", + "@vue/cli-overlay": "^4.5.10", + "@vue/cli-plugin-router": "^4.5.10", + "@vue/cli-plugin-vuex": "^4.5.10", + "@vue/cli-shared-utils": "^4.5.10", "@vue/component-compiler-utils": "^3.1.2", "@vue/preload-webpack-plugin": "^1.1.0", "@vue/web-component-wrapper": "^1.2.0", @@ -863,7 +847,7 @@ "thread-loader": "^2.1.3", "url-loader": "^2.2.0", "vue-loader": "^15.9.2", - "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.7", + "vue-loader-v16": "npm:vue-loader@^16.1.0", "vue-style-loader": "^4.1.2", "webpack": "^4.0.0", "webpack-bundle-analyzer": "^3.8.0", @@ -958,9 +942,9 @@ "dev": true }, "debug": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", - "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1124,9 +1108,9 @@ } }, "@vue/cli-shared-utils": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.9.tgz", - "integrity": "sha512-anvsrv+rkQC+hgxaT2nQQxnSWSsIzyysZ36LO7qPjXvDRBvcvKLAAviFlUkYbZ+ntbV8puzJ3zw+gUhQw4SEVA==", + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.10.tgz", + "integrity": "sha512-Lid6FflDqcvo/JBIBjUriAQ1RkQaKbBpzXSLEK/JmoKkQRHW/rRhDLGI1dEVyOLYnDEiL1m8o1xPJaplUUiXpA==", "dev": true, "requires": { "@hapi/joi": "^15.0.1", @@ -1935,9 +1919,9 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "optional": true }, @@ -2182,16 +2166,16 @@ } }, "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.1.tgz", + "integrity": "sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001157", + "caniuse-lite": "^1.0.30001173", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", + "electron-to-chromium": "^1.3.634", "escalade": "^3.1.1", - "node-releases": "^1.1.66" + "node-releases": "^1.1.69" } }, "buffer": { @@ -2208,8 +2192,7 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -2491,9 +2474,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001159", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", - "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==", + "version": "1.0.30001178", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001178.tgz", + "integrity": "sha512-VtdZLC0vsXykKni8Uztx45xynytOi71Ufx9T8kHptSw9AL4dpqailUJJHavttuzUe1KYuBYtChiWv+BAb7mPmQ==", "dev": true }, "case-sensitive-paths-webpack-plugin": { @@ -2557,15 +2540,15 @@ "dev": true }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "optional": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -2705,17 +2688,17 @@ } }, "cli-highlight": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", - "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.10.tgz", + "integrity": "sha512-CcPFD3JwdQ2oSzy+AMG6j3LRTkNjM82kzcSKzoVw6cLanDCJNlsLjeqVTOTfOfucnWv5F0rmBemVf1m9JiIasw==", "dev": true, "requires": { - "chalk": "^3.0.0", - "highlight.js": "^9.6.0", + "chalk": "^4.0.0", + "highlight.js": "^10.0.0", "mz": "^2.4.0", "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^5.1.1", - "yargs": "^15.0.0" + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" }, "dependencies": { "ansi-styles": { @@ -2728,9 +2711,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2738,14 +2721,14 @@ } }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -2763,16 +2746,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2785,36 +2758,12 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -2836,9 +2785,9 @@ } }, "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==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -2846,34 +2795,32 @@ "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -3349,9 +3296,9 @@ } }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-util-is": { @@ -3661,18 +3608,18 @@ "dev": true }, "csso": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.1.1.tgz", - "integrity": "sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "^1.0.0" + "css-tree": "^1.1.2" }, "dependencies": { "css-tree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.1.tgz", - "integrity": "sha512-NVN42M2fjszcUNpDbdkvutgQSlFYsr1z7kqeuCagHnNLBfYor6uP1WL1KrkmdYZ5Y1vTBCIOI/C/+8T98fJ71w==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", + "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", "dev": true, "requires": { "mdn-data": "2.0.14", @@ -3786,6 +3733,38 @@ "strip-eof": "^1.0.0" } }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "~1.0.1" + } + } + } + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -3804,6 +3783,29 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -4290,9 +4292,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true } } @@ -4453,9 +4455,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.601", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.601.tgz", - "integrity": "sha512-ctRyXD9y0mZu8pgeNwBUhLP3Guyr5YuqkfLKYmpTwYx7o9JtCEJme9JVX4xBXPr5ZNvr/iBXUvHLFEVJQThATg==", + "version": "1.3.641", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.641.tgz", + "integrity": "sha512-b0DLhsHSHESC1I+Nx6n4w4Lr61chMd3m/av1rZQhS2IXTzaS5BMM5N+ldWdMIlni9CITMRM09m8He4+YV/92TA==", "dev": true }, "elegant-spinner": { @@ -4513,9 +4515,9 @@ } }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4569,9 +4571,9 @@ "integrity": "sha512-nFyHmFuBFO6LpT37Xu68lQqKDYK50gXoZ6Yj/mpoS1Uslku0YkMtAGDzH8nbeFSiifAIoT1rUDB3S7e/ifnnxg==" }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { "prr": "~1.0.1" @@ -4676,13 +4678,13 @@ } }, "eslint": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", - "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", + "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4706,7 +4708,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -4828,6 +4830,12 @@ "type-check": "~0.4.0" } }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5212,9 +5220,9 @@ } }, "eslint-plugin-vue": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.4.0.tgz", - "integrity": "sha512-bYJV3nHSGV5IL40Ti1231vlY8I2DzjDHYyDjRv9Z1koEI7qyV2RR3+uKMafHdOioXYH9W3e1+iwe4wy7FIBNCQ==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.4.1.tgz", + "integrity": "sha512-W/xPNHYIkGJphLUM2UIYYGKbRw3BcDoMIPY9lu1TTa2YLiZoxurddfnmOP+UOVywxb5vi438ejzwvKdZqydtIw==", "dev": true, "requires": { "eslint-utils": "^2.1.0", @@ -5649,14 +5657,14 @@ } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { @@ -5667,31 +5675,10 @@ "ms": "2.0.0" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" - } } } }, @@ -5731,18 +5718,18 @@ "dev": true }, "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -5752,6 +5739,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, "requires": { "pend": "~1.2.0" } @@ -6054,9 +6042,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", "dev": true, "optional": true }, @@ -6427,9 +6415,9 @@ "dev": true }, "highlight.js": { - "version": "9.18.4", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.4.tgz", - "integrity": "sha512-Bb4K6pAKRr3WCRI4dZaak0lPgerK/bMDuaDhKpomWdeKnpcunMtSWi4KFqeoLrHlITf88TISu2ZX7dZe6fSJfQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.5.0.tgz", + "integrity": "sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==", "dev": true }, "hmac-drbg": { @@ -6494,9 +6482,9 @@ } }, "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "html-minifier": { @@ -6641,6 +6629,12 @@ } } }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -7064,10 +7058,13 @@ } }, "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-arrayish": { "version": "0.2.1", @@ -8202,9 +8199,9 @@ } }, "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, "loud-rejection": { @@ -8741,9 +8738,9 @@ }, "dependencies": { "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "anymatch": { @@ -8838,9 +8835,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -9273,9 +9270,9 @@ } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "1.1.70", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz", + "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==", "dev": true }, "node-sass": { @@ -9521,13 +9518,51 @@ "dev": true }, "object-is": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "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 + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "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, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "dependencies": { "es-abstract": { @@ -9566,9 +9601,9 @@ } }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object.assign": { @@ -9585,62 +9620,60 @@ } } }, - "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 - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "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, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "object.getownpropertydescriptors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", + "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "es-abstract": "^1.18.0-next.1" }, "dependencies": { "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", + "is-negative-zero": "^2.0.1", "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, "is-callable": { @@ -9649,6 +9682,12 @@ "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", @@ -9675,19 +9714,29 @@ "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } } } }, - "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, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -9934,9 +9983,9 @@ } }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -9952,18 +10001,18 @@ "dev": true }, "parse5-htmlparser2-tree-adapter": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", - "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "parse5": "^5.1.1" + "parse5": "^6.0.1" }, "dependencies": { "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } @@ -10954,9 +11003,9 @@ "dev": true }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "query-string": { "version": "4.3.4", @@ -11186,13 +11235,36 @@ } }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + } } }, "regexpp": { @@ -11213,14 +11285,14 @@ "dev": true }, "renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", + "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", "dev": true, "requires": { - "css-select": "^1.1.0", + "css-select": "^2.0.2", "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", + "htmlparser2": "^3.10.1", "lodash": "^4.17.20", "strip-ansi": "^3.0.0" }, @@ -11231,34 +11303,6 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", @@ -11362,6 +11406,12 @@ "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==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -11517,9 +11567,9 @@ } }, "sass-loader": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz", - "integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.1.tgz", + "integrity": "sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==", "requires": { "klona": "^2.0.4", "loader-utils": "^2.0.0", @@ -11557,6 +11607,14 @@ "json5": "^2.1.2" } }, + "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" + } + }, "schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -11568,9 +11626,17 @@ } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -11982,39 +12048,28 @@ } }, "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" } }, "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", "dev": true, "requires": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.4.7" } }, "sort-keys": { @@ -12114,9 +12169,9 @@ }, "dependencies": { "debug": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", - "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -12139,9 +12194,9 @@ }, "dependencies": { "debug": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", - "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -12462,9 +12517,9 @@ } }, "sweetalert2": { - "version": "10.12.6", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-10.12.6.tgz", - "integrity": "sha512-kkPRpNqP0wF9tAVu1Ygp4pQx4pXY/pgseyW3dOXXRu0S6s7HKfHEmpBUIZrBylRfeJFPOsSEk6sALSwKzNZ9RQ==" + "version": "10.13.0", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-10.13.0.tgz", + "integrity": "sha512-kF6Pnr7s7GDqVYRqqgyfxvG5vlUqfP+j+JF7oZ7DOs0/35jg6sTu8hyi6oD6Rb3fIKWIf1S9mCU7wR8iKa7dAA==" }, "symbol-observable": { "version": "1.0.1", @@ -12479,26 +12534,26 @@ "dev": true }, "table": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", - "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.12.4", + "ajv": "^7.0.2", "lodash": "^4.17.20", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" }, "dependencies": { "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", + "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, @@ -12532,6 +12587,12 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", @@ -13203,13 +13264,13 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "v-tooltip": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.3.tgz", - "integrity": "sha512-KZZY3s+dcijzZmV2qoDH4rYmjMZ9YKGBVoUznZKQX0e3c2GjpJm3Sldzz8HHH2Ud87JqhZPB4+4gyKZ6m98cKQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.1.2.tgz", + "integrity": "sha512-6c4NotnvDvinmZnBiqW50Rn6Q3MMk+pUV9Nla+JHkgJulgXh5snrU3RYbIZVf9p2ZlFoaZL/3QhTNgcQIc2GFQ==", "requires": { "lodash": "^4.17.15", "popper.js": "^1.16.0", - "vue-resize": "^0.4.5" + "vue-resize": "^1.0.0" } }, "v8-compile-cache": { @@ -13365,9 +13426,9 @@ "dev": true }, "vue-i18n": { - "version": "8.22.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.22.2.tgz", - "integrity": "sha512-rb569fVJInPUgS/bbCxEQ9DrAoFTntuJvYoK4Fpk2VfNbA09WzdTKk57ppjz3S+ps9hW+p9H+2ASgMvojedkow==" + "version": "8.22.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.22.4.tgz", + "integrity": "sha512-XLI5s0AdqMP2Lf4I4CmdmOq8kjb5DDFGR77wAuxCfpEuYSfhTRyyx6MetgZMiL6Lxa0DasjBOiOcciU3NkL3/Q==" }, "vue-js-toggle-button": { "version": "1.3.3", @@ -13385,9 +13446,9 @@ "integrity": "sha512-uHnq0FTEeNmqnbBC2aRKlmtd9LofMZ6Q3mWvgfLa+i9vhxU8fDK+nGs9c1iVT85axSua/AUnMttIq3xPaU9G3A==" }, "vue-loader": { - "version": "15.9.5", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.5.tgz", - "integrity": "sha512-oeMOs2b5o5gRqkxfds10bCx6JeXYTwivRgbb8hzOrcThD2z1+GqEKE3EX9A2SGbsYDf4rXwRg6D5n1w0jO5SwA==", + "version": "15.9.6", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", + "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -13406,9 +13467,9 @@ } }, "vue-loader-v16": { - "version": "npm:vue-loader@16.0.0-rc.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.2.tgz", - "integrity": "sha512-cz8GK4dgIf1UTC+do80pGvh8BHcCRHLIQVHV9ONVQ8wtoqS9t/+H02rKcQP+TVNg7khgLyQV2+8eHUq7/AFq3g==", + "version": "npm:vue-loader@16.1.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz", + "integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==", "dev": true, "optional": true, "requires": { @@ -13505,9 +13566,9 @@ } }, "vue-resize": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.5.tgz", - "integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-1.0.0.tgz", + "integrity": "sha512-SkIi19neeJClapYavfmHiewFZkkTfITVWskg/dIL8b1Eb+RlvnCb8fjGUwLjQJmsw2qsRiiAo4o7BAJVM4pcOA==" }, "vue-roller": { "version": "1.12.4", @@ -13761,9 +13822,9 @@ "dev": true }, "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -13774,7 +13835,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", + "enhanced-resolve": "^4.5.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -13852,9 +13913,9 @@ } }, "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -13865,9 +13926,9 @@ } }, "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -13890,11 +13951,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -13959,9 +14020,9 @@ } }, "debug": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", - "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -14071,11 +14132,13 @@ } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -14194,9 +14257,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", "dev": true }, "xml-name-validator": { @@ -14323,7 +14386,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -14333,7 +14395,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, "requires": { "pend": "~1.2.0" } diff --git a/package.json b/package.json index b06cfc4..4b77f06 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ }, "dependencies": { "@chenfengyuan/vue-countdown": "^1.1.5", - "@fortawesome/fontawesome-free": "^5.15.1", - "@sentry/browser": "^5.29.2", - "@sentry/integrations": "^5.29.2", + "@fortawesome/fontawesome-free": "^5.15.2", + "@sentry/browser": "^5.30.0", + "@sentry/integrations": "^5.30.0", "animate.css": "^4.1.1", "axios": "^0.21.1", "bootstrap": "^4.5.3", @@ -26,17 +26,17 @@ "node-sass": "^5.0.0", "popper.js": "^1.16.1", "prerender-spa-plugin": "^3.4.0", - "qs": "^6.9.4", - "sass-loader": "^10.1.0", - "sweetalert2": "^10.12.6", + "qs": "^6.9.6", + "sass-loader": "^10.1.1", + "sweetalert2": "^10.13.0", "uniqid": "^5.2.0", - "v-tooltip": "^2.0.3", + "v-tooltip": "^2.1.2", "vee-validate": "^3.4.5", "vue": "^2.6.12", "vue-flip": "1.0.2", "vue-github-buttons": "^3.1.0", "vue-gtag": "^1.10.0", - "vue-i18n": "^8.22.2", + "vue-i18n": "^8.22.4", "vue-js-toggle-button": "^1.3.3", "vue-keypress": "^2.1.1", "vue-lazyload": "^1.3.3", @@ -51,18 +51,18 @@ "xss": "^1.0.8" }, "devDependencies": { - "@vue/cli-plugin-e2e-cypress": "^4.5.9", - "@vue/cli-plugin-eslint": "^4.5.9", - "@vue/cli-plugin-router": "^4.5.9", - "@vue/cli-plugin-unit-mocha": "^4.5.9", - "@vue/cli-plugin-vuex": "^4.5.9", - "@vue/cli-service": "^4.5.9", + "@vue/cli-plugin-e2e-cypress": "^4.5.10", + "@vue/cli-plugin-eslint": "^4.5.10", + "@vue/cli-plugin-router": "^4.5.10", + "@vue/cli-plugin-unit-mocha": "^4.5.10", + "@vue/cli-plugin-vuex": "^4.5.10", + "@vue/cli-service": "^4.5.10", "@vue/eslint-config-airbnb": "^5.3.0", "@vue/test-utils": "^1.1.2", "chai": "^4.1.2", - "eslint": "^7.16.0", + "eslint": "^7.18.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-vue": "^7.4.0", + "eslint-plugin-vue": "^7.4.1", "vue-template-compiler": "^2.6.12" } } diff --git a/src/classes/Player.js b/src/classes/Player.js index 19f43c9..2906fd3 100644 --- a/src/classes/Player.js +++ b/src/classes/Player.js @@ -21,7 +21,7 @@ class Player { } hasAttribute(attributeName) { - return !!this.attributes.find(({ attribute }) => attribute === attributeName); + return !!this.attributes.find(({ name }) => name === attributeName); } get currentRole() { diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue index bdf56af..ff21ea9 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue @@ -49,11 +49,11 @@ \ No newline at end of file diff --git a/src/components/shared/Game/Sides/AliveVillagers.vue b/src/components/shared/Game/Sides/AliveVillagers.vue index 6200d9b..4ec769a 100644 --- a/src/components/shared/Game/Sides/AliveVillagers.vue +++ b/src/components/shared/Game/Sides/AliveVillagers.vue @@ -1,7 +1,7 @@ diff --git a/src/components/shared/Game/Sides/AliveWerewolves.vue b/src/components/shared/Game/Sides/AliveWerewolves.vue index 4dd320e..0fe5018 100644 --- a/src/components/shared/Game/Sides/AliveWerewolves.vue +++ b/src/components/shared/Game/Sides/AliveWerewolves.vue @@ -1,7 +1,7 @@ diff --git a/src/helpers/functions/Player.js b/src/helpers/functions/Player.js index e1105cd..0200e8f 100644 --- a/src/helpers/functions/Player.js +++ b/src/helpers/functions/Player.js @@ -41,7 +41,7 @@ export function maxTargetLengthForPlayerAttribute(attribute) { "delegate", "shoot", ]; - const twoTargetsAttributes = ["in-love"]; + const twoTargetsAttributes = ["in-love", "charmed"]; if (oneTargetAttributes.includes(attribute)) { return 1; } else if (twoTargetsAttributes.includes(attribute)) { diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index 38b6ac2..476b6c1 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -270,6 +270,12 @@ }, "big-bad-wolf": { "eat": "Au tour du grand-méchant-loup" + }, + "pied-piper": { + "charm": "Au tour du joueur de flûte" + }, + "charmed": { + "meet-each-other": "Au tour des charmés par le joueur de flûte" } } }, @@ -298,6 +304,9 @@ "all": { "vote": "Temps pour le débat du village", "elect-sheriff": "Temps pour l'élection du maire" + }, + "charmed": { + "meet-each-other": "Temps pour la rencontre des charmés" } }, "timeIsUpFor": { @@ -313,6 +322,9 @@ "all": { "vote": "Il est temps pour le village de voter", "elect-sheriff": "Il est temps pour le village d'élire son maire" + }, + "charmed": { + "meet-each-other": "Il est temps pour les charmés de se rendormir" } } }, @@ -376,10 +388,11 @@ }, "elect-sheriff": { "howToPlay": "Comment élire le maire ?", - "sheriffIsElectedWhen": "Au début de la partie, un maire doit être élu par tous les joueurs vivants.", - "sheriffSettlesVotes": "Être le maire possède deux avantages: départager une éventuelle égalité des votes lors de la pendaison et avoir un vote comptant double durant cette dernière ! Le double vote peut être annulé dans les options de la partie.", + "sheriffIsElectedWhen": "Au début de la partie, un maire doit être élu par tous les joueurs vivants. La présence du maire peut être retirée dans les options de la partie.", + "sheriffSettlesVotes": "Être le maire possède deux avantages: départager une éventuelle égalité des votes lors de la pendaison et avoir un vote comptant double durant cette dernière !.", "playersHave5Min": "Les joueurs ont 5 minutes pour se mettre d'accord sur qui sera leur prochain maire. À la fin du temps, le maître du jeu doit stopper les discussions et procéder à l'élection.", "eachPlayerVoteForSheriff": "Chaque joueur a donc une voix à donner pour l'élection, mais ne peut voter pour lui-même. Il peut néanmoins voter blanc. Le maître du jeu demande le vote de chacun à tour de rôle.", + "optionsCanBeChanged": "La présence du maire dans la partie ou son vote double peuvent être modifiés dans les options de la partie.", "toValidateAnElection": "Pour passer à la suite, au moins un joueur doit avoir voté et l'égalité dans les votes est impossible." } }, @@ -467,6 +480,25 @@ "bigBadWolfPointsAtVictim": "Le grand-méchant-loup doit pointer du doigt sa victime.", "toValidateEat": "Pour passer à la suite, le grand-méchant-loup doit obligatoirement choisir une victime." } + }, + "pied-piper": { + "charm": { + "howToPlay": "Comment jouer le joueur de flûte ?", + "piedPiperCharmsWhen": "Chaque nuit, s'il est vivant, le joueur de flûte se réveille.", + "piedPiperCanCharm": "Le joueur de flûte peut charmer deux joueurs grâce son talent de musicien hors pair. Le maître du jeu devra, en silence et le plus discrètement possible, tapoter le dos des joueurs charmés une fois le choix du joueur de flûte fait.", + "ifAllAreCharmed": "Si tous les joueurs vivants sont charmés par le joueur de flûte, ce dernier gagne la partie seul !", + "ifPiedPiperIsInfected": "Si l'infect père des loups choisit d'infecter le joueur de flûte, ce dernier perd son pouvoir de charme et ne peut plus gagner seul mais avec les Loups-Garous.", + "toValidateCharm": "Pour passer à la suite, le joueur de flûte doit obligatoirement choisir deux cibles." + } + }, + "charmed": { + "meet-each-other": { + "howToPlay": "Comment jouer le joueur charmés ?", + "charmedMeetEachOtherWhen": "Chaque fois que le joueur de flûte utilise son talent de musicien, tous les joueurs charmés se réveillent et se recontrent.", + "ifAllAreCharmed": "Les joueurs charmés doivent se dépécher de trouver qui est le joueur de flûte, car si tous les joueurs vivants sont charmés, le musicien gagnera la partie à lui tout seul !", + "charmedHave20s": "Les joueurs charmés ont environ 20 secondes pendant leur tour, ce qui est suffisant pour se découvrir et déduire qui pourrait être le joueur de flûte.", + "noActionRequiredToValidate": "Aucune action n'est requise pour passer à la suite." + } } }, "PlayerAttribute": { @@ -480,7 +512,8 @@ "protected": "Ce joueur est protégé", "ravenMarked": "Ce joueur est marqué par le corbeau", "inLove": "Ce joueur est amoureux à en mourir d'un autre", - "worshiped": "Ce joueur est le modèle de l'enfant sauvage" + "worshiped": "Ce joueur est le modèle de l'enfant sauvage", + "charmed": "Ce joueur a été charmé par le joueur de flûte" } }, "PlayerThumbnail": { @@ -676,6 +709,9 @@ }, "hunter": { "shoot": "souhaite tirer sur" + }, + "pied-piper": { + "charmed": "souhaite charmer" } }, "CancelActionButton": { @@ -685,7 +721,8 @@ }, "MeetEachOtherPlayField": { "meetEachOtherTheFirstTime": "se rencontrent pour la première fois", - "meetEachOtherForTalking": "se concertent discrètement" + "meetEachOtherForTalking": "se concertent discrètement", + "meetEachOtherInSilence": "se rencontrent sans un bruit" }, "NoActionExpected": { "noActionExpected": "Aucune action requise" @@ -735,8 +772,13 @@ "threeBrothersWakeUpToTalk": "Les trois frères se réveillent et vont se concerter discrètement.", "wildChildStarts": "L'enfant sauvage se réveille pour choisir son modèle parmi les habitants.", "bigBadWolfStarts": "Le grand-méchant-loup se réveille pour choisir la seconde victime des loups-garous.", + "piedPiperStarts": "Le Joueur de flûte se réveille pour choisir deux victimes qui seront sous l'emprise de son charme.", "sheriffSettlesVote": "Le maire va départager pour régler l'égalité des votes sur la pendaison.", - "sheriffDelegates": "Dans son dernier souffle, le maire va déléguer son rôle à l'un des survivants." + "sheriffDelegates": "Dans son dernier souffle, le maire va déléguer son rôle à l'un des survivants.", + "piedPiperCharmedTwoPlayers": "Le joueur de flûte a charmé deux personnes de plus, il se rapproche de son but ultime de vengeance.", + "gameMasterWillTouchCharmed": "Le maître du jeu va faire le tour des habitants et toucher dans le dos les deux nouveaux charmés.", + "charmedWakeUp": "Les tout juste charmés par le joueur de flûte se réveillent pour se reconnaître.", + "charmedWakeUpWithOldOnes": "Les tout juste charmés par le joueur de flûte se réveillent avec les anciens charmés pour se reconnaître." } }, "Statistics": { From 8364db72268b8bc61b7e88b13edfba3b1718922d Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Fri, 22 Jan 2021 23:57:53 +0100 Subject: [PATCH 13/43] feat(Player): Implementing pied piper --- src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue index c8b7127..962098d 100644 --- a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue +++ b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue @@ -96,7 +96,7 @@ export default { "charmed": { "pied-piper": { tooltip: this.$t("PlayerAttribute.attributes.charmed"), - SVG: charmedSVG , + SVG: charmedSVG, }, }, }, From a67a4ed7ea1700ad86a2156c79940107fe6cffb6 Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Sat, 23 Jan 2021 12:15:27 +0100 Subject: [PATCH 14/43] feat(Player): Dead players are revealed when day rises --- src/classes/GameHistory.js | 2 + .../Game/GameContent/GameContent.vue | 48 +++++++++---------- .../GameEventMonitor/GameEvent/GameEvent.vue | 6 +++ .../GameEvent/GameEventImage.vue | 8 +++- src/plugins/vue-i18n/fr.json | 4 +- 5 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/classes/GameHistory.js b/src/classes/GameHistory.js index bdd5852..fdbd2d8 100644 --- a/src/classes/GameHistory.js +++ b/src/classes/GameHistory.js @@ -27,6 +27,8 @@ class GameHistory { }))), side: getProp(gameHistory, "play.side"), }; + this.deadPlayers = getProp(gameHistory, "deadPlayers", [], players => players.map(player => new Player(player))); + this.revealedPlayers = getProp(gameHistory, "revealedPlayers", [], players => players.map(player => new Player(player))); } } diff --git a/src/components/Game/GameContent/GameContent.vue b/src/components/Game/GameContent/GameContent.vue index b0ce8b4..87b297d 100644 --- a/src/components/Game/GameContent/GameContent.vue +++ b/src/components/Game/GameContent/GameContent.vue @@ -31,20 +31,20 @@ export default { computed: { ...mapGetters("game", { game: "game" }) }, watch: { game: { - handler(newGame, oldGame) { + handler(newGame) { this.resetPlay(); - this.generateLastGameHistoryEvents(); + this.generateLastActionEvents(); if (newGame.tick === 1) { this.events.push(new GameEvent({ type: "game-starts" })); } if (newGame.phase === "day") { - this.generateGamePhaseEvent(newGame, oldGame); - this.generateGameDeathEvents(newGame, oldGame); + this.generateGamePhaseEvent(); + this.generateGameDeathEvents(); } else { - this.generateGameDeathEvents(newGame, oldGame); - this.generateGamePhaseEvent(newGame, oldGame); + this.generateGameDeathEvents(); + this.generateGamePhaseEvent(); } - this.generateGameRoleTurnEvents(newGame, oldGame); + this.generateGameRoleTurnEvents(); }, deep: true, immediate: true, @@ -90,7 +90,7 @@ export default { this.play.targets = []; this.play.side = undefined; }, - generateLastGameHistoryEvents() { + generateLastActionEvents() { if (this.game.history.length) { const lastGameHistoryEntry = this.game.history[0]; const lastGameHistoryEntryName = lastGameHistoryEntry.play.source.name; @@ -103,32 +103,32 @@ export default { } } }, - generateGamePhaseEvent(newGame, oldGame) { - if (newGame.tick === 2) { + generateGamePhaseEvent() { + if (this.game.tick === 2) { return this.events.push(new GameEvent({ type: "night-falls" })); - } else if (newGame && oldGame && newGame.phase !== oldGame.phase) { - const event = newGame.phase === "day" ? new GameEvent({ type: "day-rises" }) : new GameEvent({ type: "night-falls" }); + } else if (this.game.history.length && this.game.phase !== this.game.history[0].phase) { + const event = this.game.phase === "day" ? new GameEvent({ type: "day-rises" }) : new GameEvent({ type: "night-falls" }); return this.events.push(event); } }, - generateGameDeathEvents(newGame, oldGame) { - if (!newGame || !oldGame) { + generateGameDeathEvents() { + if (!this.game.history.length) { return; } - for (const newPlayer of newGame.players) { - const oldPlayer = oldGame.players.find(({ _id }) => _id === newPlayer._id); - if (!newPlayer.isAlive && oldPlayer.isAlive) { - this.events.push(new GameEvent({ type: "player-dies", targets: [{ player: newPlayer }] })); + const { deadPlayers } = this.game.history[0]; + if (this.game.phase === "day") { + if (!deadPlayers.length) { + this.events.push(new GameEvent({ type: "no-death-during-night" })); + } else { + this.events.push(new GameEvent({ type: "deaths-during-night", targets: deadPlayers })); } } - if (newGame.phase === "day" && !this.events.find(({ type }) => type === "player-dies")) { - this.events.push(new GameEvent({ type: "no-death-during-night" })); + for (const deadPlayer of deadPlayers) { + this.events.push(new GameEvent({ type: "player-dies", targets: [{ player: deadPlayer }] })); } }, - generateGameRoleTurnEvents(newGame, oldGame) { - if (!oldGame || newGame.firstWaiting.for !== oldGame.firstWaiting.for || newGame.firstWaiting.to !== oldGame.firstWaiting.to) { - this.events.push(new GameEvent({ type: `${newGame.firstWaiting.for}-turn` })); - } + generateGameRoleTurnEvents() { + this.events.push(new GameEvent({ type: `${this.game.firstWaiting.for}-turn` })); }, removeEvent(event) { const idx = this.events.findIndex(({ _id }) => _id === event._id); diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue index 9e819ca..d178b22 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue @@ -122,6 +122,12 @@ export default { ], }, "day-rises": { messages: [i18n.t("GameEvent.messages.dayRises")] }, + "deaths-during-night": { + messages: [ + i18n.tc("GameEvent.messages.deathDuringNight", this.event.targets.length, { numberOfDeaths: this.event.targets.length }), + i18n.t("GameEvent.messages.letsSeeWhoIsDead"), + ], + }, "no-death-during-night": { messages: [i18n.t("GameEvent.messages.noDeathDuringNight")] }, "seer-turn": { messages: [i18n.t("GameEvent.messages.seerStarts")] }, "seer-looks": { diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue index b87dfa2..3d4aba7 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue @@ -37,6 +37,7 @@ + + \ No newline at end of file diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/GamePlayFieldContent.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/GamePlayFieldContent.vue index 6f80fce..d7bbb8b 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/GamePlayFieldContent.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/GamePlayFieldContent.vue @@ -28,6 +28,8 @@ +
?
@@ -53,10 +55,12 @@ import MeetEachOtherPlayField from "@/components/Game/GameContent/GamePlayField/GamePlayFieldContent/MeetEachOtherPlayField"; import ChooseModelPlayField from "@/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ChooseModelPlayField"; +import BanVotingPlayField from "@/components/Game/GameContent/GamePlayField/GamePlayFieldContent/BanVotingPlayField"; export default { name: "GamePlayFieldContent", components: { + BanVotingPlayField, ChooseModelPlayField, MeetEachOtherPlayField, CharmPlayField, diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue index 6cb9a82..eeb513f 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue @@ -51,6 +51,7 @@ import threeBrothersPNG from "@/assets/img/roles/three-brothers.png"; import worshipedSVG from "@/assets/svg/attributes/worshiped.svg"; import bigBadWolfSVG from "@/assets/svg/roles/big-bad-wolf.svg"; import charmedSVG from "@/assets/svg/attributes/charmed.svg"; +import cantVoteSVG from "@/assets/svg/attributes/cant-vote.svg"; export default { name: "GamePlayFieldHeader", @@ -169,6 +170,12 @@ export default { role: "pied-piper", }, }, + "scapegoat": { + "ban-voting": { + icon: cantVoteSVG, + role: "scapegoat", + }, + }, }, }; }, diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue index c7e1012..f547a6d 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue @@ -27,6 +27,7 @@ export default { const { firstWaiting } = this.game; const sistersWakingUpInterval = this.gameOptions.roles.twoSisters.wakingUpInterval; const brothersWakingUpInterval = this.gameOptions.roles.threeBrothers.wakingUpInterval; + const scapegoatPlayer = this.game.scapegoatPlayer; const action = `${firstWaiting.for}.${firstWaiting.to}`; const header = { title: this.$t(`GamePlayFieldTutorial.${action}.howToPlay`) }; const steps = { @@ -79,6 +80,11 @@ export default { { header, target: "#game-waiting-label", content: this.$t("GamePlayFieldTutorial.all.vote.allVoteWhen") }, { header, target: ".countdown", content: this.$t("GamePlayFieldTutorial.all.vote.playersHave5Min") }, { header, target: "#player-votes", content: this.$t("GamePlayFieldTutorial.all.vote.eachPlayerVote") }, + ...insertIf(!!scapegoatPlayer && scapegoatPlayer.isAlive, { + header, + target: `#player-vote-${scapegoatPlayer._id}`, + content: this.$t("GamePlayFieldTutorial.all.vote.scapegoatWillDieIfTie"), + }), { header, target: "#vote-play-requirements", content: this.$t("GamePlayFieldTutorial.all.vote.toValidateAVote") }, ], "elect-sheriff": [ diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue index d178b22..a86e76e 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue @@ -177,6 +177,7 @@ export default { ...insertIf(this.game.turn !== 1, i18n.t("GameEvent.messages.charmedWakeUpWithOldOnes")), ], }, + "scapegoat-turn": { messages: [i18n.t("GameEvent.messages.scapegoatStarts")] }, }; }, hasGameEventTarget() { diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue index 3d4aba7..804fabb 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEventImage.vue @@ -103,6 +103,7 @@ export default { return []; } const { firstWaiting, alivePlayersExpectedToPlay, playersExpectedToPlay } = this.game; + const deadPlayerActions = ["delegate", "shoot", "ban-voting"]; if (this.event.type === "no-death-during-night") { return this.game.alivePlayers; } else if (this.event.type === "deaths-during-night") { @@ -110,7 +111,7 @@ export default { } else if (this.isEffectGameEvent) { return this.event.targets.map(({ player }) => player); } - return firstWaiting.to === "delegate" || firstWaiting.to === "shoot" ? playersExpectedToPlay : alivePlayersExpectedToPlay; + return deadPlayerActions.includes(firstWaiting.to) ? playersExpectedToPlay : alivePlayersExpectedToPlay; }, }, created() { diff --git a/src/components/shared/Game/PlayerVotes/PlayerVote.vue b/src/components/shared/Game/PlayerVotes/PlayerVote.vue index 07cf628..c188689 100644 --- a/src/components/shared/Game/PlayerVotes/PlayerVote.vue +++ b/src/components/shared/Game/PlayerVotes/PlayerVote.vue @@ -1,5 +1,5 @@ diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue index f547a6d..ac94f06 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue @@ -299,6 +299,21 @@ export default { }, ], }, + "scapegoat": { + "ban-voting": [ + { + header, target: "#game-waiting-label", + content: this.$t(`GamePlayFieldTutorial.scapegoat.ban-voting.scapegoatBansVotingWhen`), + }, + { header, target: "#player-targets", content: this.$t("GamePlayFieldTutorial.scapegoat.ban-voting.scapegoatCanBanVoting") }, + { header, target: "#player-targets", content: this.$t("GamePlayFieldTutorial.scapegoat.ban-voting.noVoteIfAllCantVote") }, + { + header, + target: "#play-submit-button", + content: this.$t("GamePlayFieldTutorial.scapegoat.ban-voting.toValidateBanVoting"), + }, + ], + }, }; return steps[firstWaiting.for] && steps[firstWaiting.for][firstWaiting.to] ? steps[firstWaiting.for][firstWaiting.to] : []; }, diff --git a/src/components/shared/Game/PlayField/CancelActionButton.vue b/src/components/shared/Game/PlayField/CancelActionButton.vue index f763cd9..9cc817d 100644 --- a/src/components/shared/Game/PlayField/CancelActionButton.vue +++ b/src/components/shared/Game/PlayField/CancelActionButton.vue @@ -50,10 +50,4 @@ export default { \ No newline at end of file diff --git a/src/components/shared/Game/PlayField/PlayFieldActionText.vue b/src/components/shared/Game/PlayField/PlayFieldActionText.vue index 5c6cb68..c830d26 100644 --- a/src/components/shared/Game/PlayField/PlayFieldActionText.vue +++ b/src/components/shared/Game/PlayField/PlayFieldActionText.vue @@ -4,8 +4,10 @@

-
- +
+ +
@@ -14,10 +16,11 @@ + + \ No newline at end of file diff --git a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue index 962098d..31d3833 100644 --- a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue +++ b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue @@ -14,6 +14,7 @@ import inLoveSVG from "@/assets/svg/attributes/in-love.svg"; import worshipedSVG from "@/assets/svg/attributes/worshiped.svg"; import bigBadWolfSVG from "@/assets/svg/roles/big-bad-wolf.svg"; import charmedSVG from "@/assets/svg/attributes/charmed.svg"; +import cantVoteSVG from "@/assets/svg/attributes/cant-vote.svg"; export default { name: "PlayerAttribute", @@ -99,6 +100,12 @@ export default { SVG: charmedSVG, }, }, + "cant-vote": { + scapegoat: { + tooltip: this.$t("PlayerAttribute.attributes.cantVoteByScapegoat"), + SVG: cantVoteSVG, + }, + }, }, }; }, diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index d373ebb..487c840 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -503,6 +503,15 @@ "charmedHave20s": "Les joueurs charmés ont environ 20 secondes pendant leur tour, ce qui est suffisant pour se découvrir et déduire qui pourrait être le joueur de flûte.", "noActionRequiredToValidate": "Aucune action n'est requise pour passer à la suite." } + }, + "scapegoat": { + "ban-voting": { + "howToPlay": "Comment jouer le bouc-émissaire ?", + "scapegoatBansVotingWhen": "Suite à une égalité des votes où il a été la victime, le bouc-émissaire a une dernière prérogative avant de rendre l'âme.", + "scapegoatCanBanVoting": "Le bouc-émissaire peut retirer le droit de vote à autant de joueurs qu'il souhaite pour le jour suivant.", + "noVoteIfAllCantVote": "Si aucun joueur ne peut voter le jour suivant, alors il n'y aura pas de pendaison.", + "toValidateBanVoting": "Durant son tour, le bouc-émissaire peut désigner autant de cibles qu'il souhaite ou passer son tour." + } } }, "PlayerAttribute": { @@ -718,8 +727,8 @@ "charmed": "souhaite charmer" }, "scapegoat": { - "no-ban-voting": "ne souhaite interdire personne de vote le jour suivant", - "ban-voting": "souhaite interdire de vote le jour suivant" + "no-ban-voting": "ne souhaite interdire personne de vote pour la prochaine journée", + "ban-voting": "souhaite interdire de vote pour la prochaine journée" } }, "CancelActionButton": { @@ -727,6 +736,10 @@ "cancelTarget": "Annuler cette cible", "cancelSide": "Annuler le choix du camp" }, + "SelectAllTargetsButton": { + "selectAll": "Tout sélectionner", + "selectAllTargets": "Sélectionner toutes les cibles" + }, "MeetEachOtherPlayField": { "meetEachOtherTheFirstTime": "se rencontrent pour la première fois", "meetEachOtherForTalking": "se concertent discrètement", From ec9abdd288e0173413f3da82ba9305ade3ca0766 Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Sun, 24 Jan 2021 15:17:38 +0100 Subject: [PATCH 19/43] feat(Role): Guard refactored --- CHANGELOG.md | 2 +- package-lock.json | 6 +- package.json | 2 +- .../Game/GameContent/GameContent.vue | 2 + .../GamePlayFieldContent/ProtectPlayField.vue | 73 +++++++++++++------ .../GameEventMonitor/GameEvent/GameEvent.vue | 6 ++ .../GameEvent/GameEventImage.vue | 12 ++- .../Game/PlayerAttribute/PlayerAttribute.vue | 8 +- src/helpers/functions/Player.js | 4 + src/plugins/APIs/WerewolvesAssistantAPI.js | 5 ++ src/plugins/vue-i18n/fr.json | 10 ++- 11 files changed, 99 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a090828..7bcb155 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,7 +41,7 @@ * `eslint-plugin-vue` updated to version `7.5.0`. * `qs` updated to version `6.9.6`. * `sass-loader` updated to version `10.1.1`. -* `sweetalert2` updated to version `10.13.0`. +* `sweetalert2` updated to version `10.13.1`. * `v-tooltip` updated to version `2.1.2`. * `vue-i18n` updated to version `8.22.4`. diff --git a/package-lock.json b/package-lock.json index fbdb669..47932ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12522,9 +12522,9 @@ } }, "sweetalert2": { - "version": "10.13.0", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-10.13.0.tgz", - "integrity": "sha512-kF6Pnr7s7GDqVYRqqgyfxvG5vlUqfP+j+JF7oZ7DOs0/35jg6sTu8hyi6oD6Rb3fIKWIf1S9mCU7wR8iKa7dAA==" + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-10.13.1.tgz", + "integrity": "sha512-m5X9st+/yuuvrSNwsXhq0+Imh3qZx6y5jceaf8JrluiRUIGTuHe16YPOT9V6lD69RtMAdjG8ZfT2DaxW4Tx6yg==" }, "symbol-observable": { "version": "1.0.1", diff --git a/package.json b/package.json index 889f3d6..5baa343 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "prerender-spa-plugin": "^3.4.0", "qs": "^6.9.6", "sass-loader": "^10.1.1", - "sweetalert2": "^10.13.0", + "sweetalert2": "^10.13.1", "uniqid": "^5.2.0", "v-tooltip": "^2.1.2", "vee-validate": "^3.4.5", diff --git a/src/components/Game/GameContent/GameContent.vue b/src/components/Game/GameContent/GameContent.vue index 01db4d4..f6dde05 100644 --- a/src/components/Game/GameContent/GameContent.vue +++ b/src/components/Game/GameContent/GameContent.vue @@ -100,6 +100,8 @@ export default { this.events.push(new GameEvent({ type: "sheriff-elected", targets: lastGameHistoryEntry.play.targets })); } else if (lastGameHistoryEntry.play.action === "charm") { this.events.push(new GameEvent({ type: `${lastGameHistoryEntryName}-charms`, targets: lastGameHistoryEntry.play.targets })); + } else if (lastGameHistoryEntry.play.action === "mark") { + this.events.push(new GameEvent({ type: `raven-marks`, targets: lastGameHistoryEntry.play.targets })); } } }, diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue index 086f7e3..6593c10 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue @@ -6,45 +6,72 @@ - + +
+ +
+
+

+ + +

+ +
+ +
diff --git a/src/helpers/functions/Player.js b/src/helpers/functions/Player.js index 0200e8f..0710b47 100644 --- a/src/helpers/functions/Player.js +++ b/src/helpers/functions/Player.js @@ -48,4 +48,8 @@ export function maxTargetLengthForPlayerAttribute(attribute) { return 2; } return 0; +} + +export function isPlayerAttributeActive({ activeAt }, game) { + return !activeAt || activeAt.turn <= game.turn && (!activeAt.phase || activeAt.phase === "night" || game.phase === "day"); } \ No newline at end of file diff --git a/src/plugins/APIs/WerewolvesAssistantAPI.js b/src/plugins/APIs/WerewolvesAssistantAPI.js index 5b292a4..9e2d191 100644 --- a/src/plugins/APIs/WerewolvesAssistantAPI.js +++ b/src/plugins/APIs/WerewolvesAssistantAPI.js @@ -46,6 +46,11 @@ const WerewolvesAssistantAPI = { Vue.prototype.$werewolvesAssistantAPI.makeAPlay = (gameId, play) => axios.post(`/games/${gameId}/play`, play); + Vue.prototype.$werewolvesAssistantAPI.getGameHistory = (gameId, queryStrings) => { + const URL = `/games/${gameId}/history?${stringify(queryStrings)}`; + return axios.get(URL); + }; + Vue.prototype.$werewolvesAssistantAPI.getRoles = () => axios.get(`/roles`); }, }; diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index 487c840..53ebf57 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -526,7 +526,8 @@ "ravenMarked": "Ce joueur est marqué par le corbeau", "inLove": "Ce joueur est amoureux à en mourir d'un autre", "worshiped": "Ce joueur est le modèle de l'enfant sauvage", - "charmed": "Ce joueur a été charmé par le joueur de flûte" + "charmed": "Ce joueur a été charmé par le joueur de flûte", + "cantVoteByScapegoat": "Ce joueur est interdit de vote par le bouc-émissaire" } }, "PlayerThumbnail": { @@ -740,6 +741,11 @@ "selectAll": "Tout sélectionner", "selectAllTargets": "Sélectionner toutes les cibles" }, + "ProtectPlayField": { + "loadingTargets": "Chargement des cibles du salvateur", + "cantLoadGuardTargets": "Impossible de charger les cibles du salvateur", + "retry": "Réessayer" + }, "MeetEachOtherPlayField": { "meetEachOtherTheFirstTime": "se rencontrent pour la première fois", "meetEachOtherForTalking": "se concertent discrètement", @@ -783,6 +789,8 @@ "witchStarts": "La sorcière se réveille et va, si elle le souhaite, utiliser ses potions.", "guardStarts": "Le salvateur se réveille et va protéger la personne de son choix.", "ravenStarts": "Le corbeau se réveille et va, s'il le souhaite, marquer de sa plume un des habitants.", + "ravenHasMarked": "Le corbeau a choisi où déposer sa plume.", + "gameMasterWillDepositMark": "Le maître du jeu va faire le tour des habitants et déposer la marque du corbeau devant la victime.", "hunterStarts": "Dans son dernier souffle, le chasseur s'apprête à choisir la cible de sa vengeance.", "dogWolfStarts": "Le chien-loup se réveille et va choisir son camp pour le reste de la partie.", "cupidStarts": "Cupidon se réveille et va rendre inséparables deux personnes grâce à ses flèches de l'Amour.", From 40d72534b1f8f1d25a9a127abcbace95d861df87 Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Sun, 24 Jan 2021 19:21:58 +0100 Subject: [PATCH 20/43] feat(Role): Implementing vile father of wolves --- src/classes/GameHistory.js | 6 +++ .../GamePlayFieldContent/EatPlayField.vue | 3 +- .../GamePlayFieldFooter.vue | 53 +++++++++++++++---- .../GamePlayFieldTutorial.vue | 11 ++++ src/plugins/vue-i18n/fr.json | 2 + 5 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/classes/GameHistory.js b/src/classes/GameHistory.js index fdbd2d8..09f2e2a 100644 --- a/src/classes/GameHistory.js +++ b/src/classes/GameHistory.js @@ -16,6 +16,7 @@ class GameHistory { action: getProp(gameHistory, "play.action"), targets: getProp(gameHistory, "play.targets", [], targets => targets.map(target => ({ player: new Player(target.player), + isInfected: getProp(target, "isInfected"), potion: { life: getProp(target, "potion.life"), death: getProp(target, "potion.death"), @@ -30,6 +31,11 @@ class GameHistory { this.deadPlayers = getProp(gameHistory, "deadPlayers", [], players => players.map(player => new Player(player))); this.revealedPlayers = getProp(gameHistory, "revealedPlayers", [], players => players.map(player => new Player(player))); } + + get didVileFatherOfWolvesInfectTarget() { + const { play } = this; + return play.source.name === "werewolves" && play.action === "eat" && !!play.targets.find(({ isInfected }) => isInfected); + } } export default GameHistory; \ No newline at end of file diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/EatPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/EatPlayField.vue index cf620fa..b52b941 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/EatPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/EatPlayField.vue @@ -1,7 +1,8 @@ @@ -85,6 +85,11 @@ export default { sideSelected(side) { this.play.side = side; }, + vileFatherOfWolvesInfects() { + if (this.play.targets.length) { + this.play.targets[0].isInfected = true; + } + }, resetPlay() { this.play.votes = []; this.play.targets = []; @@ -93,15 +98,19 @@ export default { generateLastActionEvents() { if (this.game.history.length) { const lastGameHistoryEntry = this.game.history[0]; - const lastGameHistoryEntryName = lastGameHistoryEntry.play.source.name; + const lastGameHistoryEntrySourceName = lastGameHistoryEntry.play.source.name; + const { vileFatherOfWolvesPlayer } = this.game; if (lastGameHistoryEntry.play.action === "look") { this.events.push(new GameEvent({ type: "seer-looks", targets: lastGameHistoryEntry.play.targets })); } else if (lastGameHistoryEntry.play.action === "elect-sheriff" || lastGameHistoryEntry.play.action === "delegate") { this.events.push(new GameEvent({ type: "sheriff-elected", targets: lastGameHistoryEntry.play.targets })); } else if (lastGameHistoryEntry.play.action === "charm") { - this.events.push(new GameEvent({ type: `${lastGameHistoryEntryName}-charms`, targets: lastGameHistoryEntry.play.targets })); + this.events.push(new GameEvent({ type: `${lastGameHistoryEntrySourceName}-charms`, targets: lastGameHistoryEntry.play.targets })); } else if (lastGameHistoryEntry.play.action === "mark") { this.events.push(new GameEvent({ type: `raven-marks`, targets: lastGameHistoryEntry.play.targets })); + } else if (lastGameHistoryEntry.play.action === "eat" && lastGameHistoryEntrySourceName === "werewolves" && + !!vileFatherOfWolvesPlayer && vileFatherOfWolvesPlayer.isAlive) { + this.events.push(new GameEvent({ type: `vile-father-of-wolves-infects`, targets: lastGameHistoryEntry.play.targets })); } } }, diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayField.vue index 0c4dac9..8f569ec 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayField.vue @@ -3,7 +3,7 @@ - + @@ -36,6 +36,9 @@ export default { startTutorial() { this.$refs.gamePlayFieldTutorial.startTour(); }, + vileFatherOfWolvesInfects() { + this.$emit("vile-father-of-wolves-infects"); + }, }, }; diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue index 1e8906c..0e545e1 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue @@ -53,12 +53,14 @@ \ No newline at end of file diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index dcf8fd3..8ec5b48 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -535,7 +535,8 @@ "inLove": "Ce joueur est amoureux à en mourir d'un autre", "worshiped": "Ce joueur est le modèle de l'enfant sauvage", "charmed": "Ce joueur a été charmé par le joueur de flûte", - "cantVoteByScapegoat": "Ce joueur est interdit de vote par le bouc-émissaire" + "cantVoteByScapegoat": "Ce joueur est interdit de vote par le bouc-émissaire", + "cantVoteByAll": "Ce joueur est interdit de vote par le village" } }, "PlayerThumbnail": { @@ -826,7 +827,8 @@ "gameMasterWillTouchCharmed": "Le maître du jeu va faire le tour des habitants et toucher dans le dos les deux nouveaux charmés.", "charmedWakeUp": "Les tout juste charmés par le joueur de flûte se réveillent pour se reconnaître.", "charmedWakeUpWithOldOnes": "Les tout juste charmés par le joueur de flûte se réveillent avec les anciens charmés pour se reconnaître.", - "scapegoatStarts": "Face à l'injustice de sa mort, le bouc-émissaire va choisir qui n'aura pas le droit de vote au jour suivant dans son dernier souffle." + "scapegoatStarts": "Face à l'injustice de sa mort, le bouc-émissaire va choisir qui n'aura pas le droit de vote au jour suivant dans son dernier souffle.", + "idiotIsForgivenAndRevealed": "Le village se rend compte que le joueur pendu était en vérité l'idiot ! Les villageois ayant pitié de lui, décident de le gracier. Le joueur retourne sa carte mais ne pourra plus voter jusqu'à la fin de la partie." } }, "Statistics": { From 24b402612c576c4e5761323f40cd591f08b711df Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Tue, 26 Jan 2021 18:32:32 +0100 Subject: [PATCH 26/43] feat(Game): Add an icon, and a tooltip in player thumbnails in sides. Closes #113 --- CHANGELOG.md | 6 ++++-- package-lock.json | 12 ++++++------ package.json | 4 ++-- .../Game/GameEventMonitor/GameEvent/GameEvent.vue | 4 ++-- src/components/shared/Game/PlayerThumbnail.vue | 8 +++++++- src/plugins/v-tooltip/index.js | 2 +- src/plugins/vue-i18n/fr.json | 7 +++++-- 7 files changed, 27 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cae878..d356c2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * [#98](https://github.com/antoinezanardi/werewolves-assistant-web/issues/98) - Extend player limit. * [#109](https://github.com/antoinezanardi/werewolves-assistant-web/issues/109) - Add limits to waking up interval options. * [#110](https://github.com/antoinezanardi/werewolves-assistant-web/issues/110) - Better filter for vue-select. +* [#113](https://github.com/antoinezanardi/werewolves-assistant-web/issues/113) - Add an icon, and a tooltip in player thumbnails in sides. ### 🐛 Bug fixes @@ -27,7 +28,7 @@ ### 📦 Packages -* `fuse.js` updated to version `6.4.6`. +* `fuse.js` installed with version `6.4.6`. * `@sentry/browser` updated to version `6.0.2`. * `@sentry/integrations` updated to version `6.0.2`. * `@vue/cli-plugin-e2e-cypress` updated to version `4.5.11`. @@ -44,7 +45,8 @@ * `sweetalert2` updated to version `10.13.3`. * `v-tooltip` updated to version `2.1.2`. * `vue-i18n` updated to version `8.22.4`. -* `vue-router` updated to version `3.5.0`. +* `vue-router` updated to version `3.6.2`. +* `vuex` updated to version `3.6.2`. --- diff --git a/package-lock.json b/package-lock.json index e79e8ba..0bbeaa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13594,9 +13594,9 @@ } }, "vue-router": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.0.tgz", - "integrity": "sha512-QYrPzHMJiJCq20ezhlGok+NbrmjzhQDG6pnpJaD14Eg3NvT07s3acYz2ktxJ7vGHd/Ts4TgG9Tt8a2PA+Js5fw==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.1.tgz", + "integrity": "sha512-RRQNLT8Mzr8z7eL4p7BtKvRaTSGdCbTy2+Mm5HTJvLGYSSeG9gDzNasJPP/yOYKLy+/cLG/ftrqq5fvkFwBJEw==" }, "vue-scrollto": { "version": "2.20.0", @@ -13670,9 +13670,9 @@ } }, "vuex": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz", - "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ==" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" }, "w3c-hr-time": { "version": "1.0.2", diff --git a/package.json b/package.json index 25cd39d..50cf414 100644 --- a/package.json +++ b/package.json @@ -42,13 +42,13 @@ "vue-keypress": "^2.1.1", "vue-lazyload": "^1.3.3", "vue-roller": "^1.12.4", - "vue-router": "^3.5.0", + "vue-router": "^3.5.1", "vue-scrollto": "^2.20.0", "vue-select": "^3.11.2", "vue-star-rating": "^1.7.0", "vue-toasted": "^1.1.28", "vue-tour": "^1.5.0", - "vuex": "^3.6.0", + "vuex": "^3.6.2", "xss": "^1.0.8" }, "devDependencies": { diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue index 3e4c122..3c8fbc9 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue @@ -106,8 +106,8 @@ export default { }, "player-role-revealed": { messages: [ - ...insertIf(gameEventTargetRole === "idiot", - i18n.t("GameEvent.messages.idiotIsForgivenAndRevealed")), + ...insertIf(gameEventTargetRole === "idiot", i18n.t("GameEvent.messages.idiotIsForgiven")), + i18n.t("GameEvent.messages.playerRoleIsRevealed"), ], }, "sheriff-elected": { diff --git a/src/components/shared/Game/PlayerThumbnail.vue b/src/components/shared/Game/PlayerThumbnail.vue index 4b48960..ea9a524 100644 --- a/src/components/shared/Game/PlayerThumbnail.vue +++ b/src/components/shared/Game/PlayerThumbnail.vue @@ -70,7 +70,13 @@ export default { }, playerThumbnailTooltip() { if (this.game._id || this.player.role.current) { - return this.$tc(`Role.${this.player.role.current}`, 1); + let content = `
${this.$t(`Role.${this.player.role.current}`)}
`; + if (this.player.isAlive === false) { + content += `
${this.$t("PlayerThumbnail.thisPlayerIsDead")}
`; + } else if (this.player.isRoleRevealed) { + content += `
${this.$t("PlayerThumbnail.thisPlayerRoleIsRevealed")}
`; + } + return { content }; } return this.$t("PlayerThumbnail.chooseRole"); }, diff --git a/src/plugins/v-tooltip/index.js b/src/plugins/v-tooltip/index.js index b500a23..a59e0f8 100644 --- a/src/plugins/v-tooltip/index.js +++ b/src/plugins/v-tooltip/index.js @@ -1,4 +1,4 @@ import Vue from "vue"; import VTooltip from "v-tooltip"; -Vue.use(VTooltip, { defaultContainer: "body" }); \ No newline at end of file +Vue.use(VTooltip, { defaultContainer: "body", defaultBoundariesElement: "body" }); \ No newline at end of file diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index 8ec5b48..4007b09 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -545,7 +545,9 @@ "nominated": { "elect-sheriff": "Ce joueur est nominé pour devenir maire", "vote": "Ce joueur est nominé pour la pendaison" - } + }, + "thisPlayerIsDead": "Ce joueur est mort", + "thisPlayerRoleIsRevealed": "Le rôle de ce joueur est connu des autres (sa carte n'est pas cachée)" }, "PlayerVote": { "voteFor": "Vote pour", @@ -828,7 +830,8 @@ "charmedWakeUp": "Les tout juste charmés par le joueur de flûte se réveillent pour se reconnaître.", "charmedWakeUpWithOldOnes": "Les tout juste charmés par le joueur de flûte se réveillent avec les anciens charmés pour se reconnaître.", "scapegoatStarts": "Face à l'injustice de sa mort, le bouc-émissaire va choisir qui n'aura pas le droit de vote au jour suivant dans son dernier souffle.", - "idiotIsForgivenAndRevealed": "Le village se rend compte que le joueur pendu était en vérité l'idiot ! Les villageois ayant pitié de lui, décident de le gracier. Le joueur retourne sa carte mais ne pourra plus voter jusqu'à la fin de la partie." + "idiotIsForgiven": "Le village se rend compte que le joueur pendu était en vérité l'idiot ! Les villageois ayant pitié de lui, décident de le gracier mais il ne pourra plus voter jusqu'à la fin de la partie.", + "playerRoleIsRevealed": "Le joueur retourne sa carte et continue à jouer." } }, "Statistics": { From e1718cf59dfec2a82d6b7d1f703d99615322ccdf Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Tue, 26 Jan 2021 20:35:34 +0100 Subject: [PATCH 27/43] feat(Game): Add remaining phases and active in for attributes in sides. Closes #112 --- CHANGELOG.md | 1 + src/assets/svg/misc/chronometer.svg | 63 ++++++++++++++++ src/assets/svg/misc/cross-circle.svg | 44 ++++++++++++ src/assets/svg/misc/endless.svg | 1 + src/assets/svg/misc/hourglass.svg | 1 + .../GameVillagersSide/GameVillagersSide.vue | 2 +- .../GameWerewolvesSide/GameWerewolvesSide.vue | 2 +- .../Game/PlayerAttribute/PlayerAttribute.vue | 72 +++++++++++++++---- .../shared/Game/PlayerThumbnail.vue | 4 +- src/plugins/v-tooltip/index.js | 2 +- src/plugins/vue-i18n/fr.json | 7 +- 11 files changed, 180 insertions(+), 19 deletions(-) create mode 100644 src/assets/svg/misc/chronometer.svg create mode 100644 src/assets/svg/misc/cross-circle.svg create mode 100644 src/assets/svg/misc/endless.svg create mode 100644 src/assets/svg/misc/hourglass.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index d356c2b..94f8d02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * [#98](https://github.com/antoinezanardi/werewolves-assistant-web/issues/98) - Extend player limit. * [#109](https://github.com/antoinezanardi/werewolves-assistant-web/issues/109) - Add limits to waking up interval options. * [#110](https://github.com/antoinezanardi/werewolves-assistant-web/issues/110) - Better filter for vue-select. +* [#112](https://github.com/antoinezanardi/werewolves-assistant-web/issues/112) - Add remaining phases and active in for attributes in sides. * [#113](https://github.com/antoinezanardi/werewolves-assistant-web/issues/113) - Add an icon, and a tooltip in player thumbnails in sides. ### 🐛 Bug fixes diff --git a/src/assets/svg/misc/chronometer.svg b/src/assets/svg/misc/chronometer.svg new file mode 100644 index 0000000..e12c92f --- /dev/null +++ b/src/assets/svg/misc/chronometer.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/misc/cross-circle.svg b/src/assets/svg/misc/cross-circle.svg new file mode 100644 index 0000000..627f945 --- /dev/null +++ b/src/assets/svg/misc/cross-circle.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/svg/misc/endless.svg b/src/assets/svg/misc/endless.svg new file mode 100644 index 0000000..dd79585 --- /dev/null +++ b/src/assets/svg/misc/endless.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/misc/hourglass.svg b/src/assets/svg/misc/hourglass.svg new file mode 100644 index 0000000..b686e6e --- /dev/null +++ b/src/assets/svg/misc/hourglass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Game/GameVillagersSide/GameVillagersSide.vue b/src/components/Game/GameVillagersSide/GameVillagersSide.vue index d92bb3e..45fde2d 100644 --- a/src/components/Game/GameVillagersSide/GameVillagersSide.vue +++ b/src/components/Game/GameVillagersSide/GameVillagersSide.vue @@ -17,7 +17,7 @@
- +
diff --git a/src/components/Game/GameWerewolvesSide/GameWerewolvesSide.vue b/src/components/Game/GameWerewolvesSide/GameWerewolvesSide.vue index fc79aec..e1fabb7 100644 --- a/src/components/Game/GameWerewolvesSide/GameWerewolvesSide.vue +++ b/src/components/Game/GameWerewolvesSide/GameWerewolvesSide.vue @@ -18,7 +18,7 @@
- +
diff --git a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue index b835bdf..d6d0371 100644 --- a/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue +++ b/src/components/shared/Game/PlayerAttribute/PlayerAttribute.vue @@ -1,10 +1,12 @@ \ No newline at end of file diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue index eeb513f..4de2b09 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldHeader/GamePlayFieldHeader.vue @@ -23,8 +23,8 @@
-
-
+
+
diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue index c56d55d..4672b40 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldTutorial/GamePlayFieldTutorial.vue @@ -88,6 +88,7 @@ export default { "all": { "vote": [ { header, target: "#game-waiting-label", content: this.$t("GamePlayFieldTutorial.all.vote.allVoteWhen") }, + { header, target: "#targetable-players-text", content: this.$t("GamePlayFieldTutorial.all.vote.targetablePlayerAreHere") }, { header, target: ".countdown", content: this.$t("GamePlayFieldTutorial.all.vote.playersHave5Min") }, { header, target: "#player-votes", content: this.$t("GamePlayFieldTutorial.all.vote.eachPlayerVote") }, ...insertIf(!!scapegoatPlayer && scapegoatPlayer.isAlive, { diff --git a/src/plugins/vue-i18n/fr.json b/src/plugins/vue-i18n/fr.json index 0807ea8..7d00110 100644 --- a/src/plugins/vue-i18n/fr.json +++ b/src/plugins/vue-i18n/fr.json @@ -391,6 +391,7 @@ "vote": { "howToPlay": "Comment procéder au vote ?", "allVoteWhen": "Chaque fois que le jour se lève, les habitants débattent pour mettre à mort l'un des leurs en espérant trouver un loup-garou.", + "targetablePlayerAreHere": "Les joueurs éligibles à la pendaison de ce vote sont spécifiés ici.", "playersHave5Min": "Les joueurs ont 5 minutes pour se mettre d'accord sur qui sera pendu. À la fin du temps, le maître du jeu doit stopper les discussions et procéder au vote.", "eachPlayerVote": "Chaque joueur a donc une voix à donner pour le vote, mais ne peut voter pour lui-même. Il peut néanmoins voter blanc. Le maître du jeu demande le vote de chacun à tour de rôle.", "scapegoatWillDieIfTie": "Le bouc-émissaire est dans la partie ! En cas d'égalité, c'est lui qui sera pendu, même s'il n'est pas inclu dans l'égalité.", From 1440750867618dc48893975922b8ccb26c02433d Mon Sep 17 00:00:00 2001 From: antoinezanardi Date: Thu, 28 Jan 2021 00:14:50 +0100 Subject: [PATCH 31/43] feat(Game): Implementing Ancient revenge --- src/assets/svg/attributes/powerless.svg | 46 +++++++++++++++++++ src/classes/GameHistory.js | 5 ++ .../Game/GameContent/GameContent.vue | 3 ++ .../UsePotionPlayField.vue | 2 +- .../GameEventMonitor/GameEvent/GameEvent.vue | 6 +++ .../GameEvent/GameEventImage.vue | 3 ++ src/plugins/vue-i18n/fr.json | 2 + 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/assets/svg/attributes/powerless.svg diff --git a/src/assets/svg/attributes/powerless.svg b/src/assets/svg/attributes/powerless.svg new file mode 100644 index 0000000..9c49e4e --- /dev/null +++ b/src/assets/svg/attributes/powerless.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/classes/GameHistory.js b/src/classes/GameHistory.js index e0b11e3..a80254a 100644 --- a/src/classes/GameHistory.js +++ b/src/classes/GameHistory.js @@ -46,6 +46,11 @@ class GameHistory { const { play } = this; return play.source.name === "witch" && play.action === "use-potion" && !!play.targets.find(({ potion }) => potion.death); } + + get wasVotePlayWithoutDeath() { + const { play, deadPlayers } = this; + return play.source.name === "all" && play.action === "vote" && !deadPlayers.length; + } } export default GameHistory; \ No newline at end of file diff --git a/src/components/Game/GameContent/GameContent.vue b/src/components/Game/GameContent/GameContent.vue index eaefd03..4ac1384 100644 --- a/src/components/Game/GameContent/GameContent.vue +++ b/src/components/Game/GameContent/GameContent.vue @@ -111,6 +111,9 @@ export default { } else if (lastGameHistoryEntry.play.action === "eat" && lastGameHistoryEntrySourceName === "werewolves" && !!vileFatherOfWolvesPlayer && vileFatherOfWolvesPlayer.isAlive) { this.events.push(new GameEvent({ type: `vile-father-of-wolves-infects`, targets: lastGameHistoryEntry.play.targets })); + } else if (this.game.history.length > 1 && lastGameHistoryEntry.wasVotePlayWithoutDeath && + this.game.history[1].wasVotePlayWithoutDeath) { + this.events.push(new GameEvent({ type: `no-death-after-votes`, targets: this.game.history[1].play.targets })); } } }, diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue index 135075c..c907af3 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue @@ -5,7 +5,7 @@ -
+
Date: Thu, 28 Jan 2021 19:45:16 +0100 Subject: [PATCH 32/43] feat(Game): Refactor Game History Modal with tabs, source players and more. Closes #101 --- CHANGELOG.md | 1 + src/assets/scss/_cursor.scss | 8 + src/classes/Game.js | 4 + .../GamePlayFieldContent/ProtectPlayField.vue | 8 +- .../UsePotionPlayField.vue | 8 +- .../GamePlayFieldFooter.vue | 14 +- .../GameEventMonitor/GameEvent/GameEvent.vue | 4 +- .../Game/GameWinners/GameWinners.vue | 2 +- .../GameSummaryHistoryLine.vue | 22 ++- .../GameSummaryModal/GameSummaryModal.vue | 160 ++++++++++++------ .../Game/PlayerAttribute/PlayerAttribute.vue | 7 + src/plugins/vue-i18n/fr.json | 7 +- 12 files changed, 164 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1708f7..651b169 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ ### ♻️ Refactoring * [#95](https://github.com/antoinezanardi/werewolves-assistant-web/issues/95) - Change game options structure. +* [#101](https://github.com/antoinezanardi/werewolves-assistant-web/issues/101) - Refactor Game History Modal with tabs, source players and more. * [#105](https://github.com/antoinezanardi/werewolves-assistant-web/issues/105) - Change `attributes.attribute` to `attributes.name` in Player class. ### 📦 Packages diff --git a/src/assets/scss/_cursor.scss b/src/assets/scss/_cursor.scss index cca0d37..f84b88f 100644 --- a/src/assets/scss/_cursor.scss +++ b/src/assets/scss/_cursor.scss @@ -1,3 +1,11 @@ .cursor-pointer { cursor: pointer; +} + +.cursor-text { + cursor: text; +} + +.cursor-default { + cursor: default; } \ No newline at end of file diff --git a/src/classes/Game.js b/src/classes/Game.js index ce9a125..c8180a5 100644 --- a/src/classes/Game.js +++ b/src/classes/Game.js @@ -327,6 +327,10 @@ class Game { return play.source.name === "all" && play.action === "vote" && play.targets.length > 1 && this.firstWaiting.for === "all" && this.firstWaiting.to === "vote"; } + + get didAncientTakeHisRevenge() { + return !!this.getPlayerWithAttribute("powerless"); + } } export default Game; \ No newline at end of file diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue index 6593c10..36ef6c1 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/ProtectPlayField.vue @@ -7,7 +7,7 @@
-
+
new GameHistory(gameHistoryEntry)); @@ -69,7 +69,7 @@ export default { } catch (e) { this.$error.display(e); } finally { - this.loadings.lastProtectEntry = false; + this.loading.lastProtectEntry = false; } }, playerSelected(payload) { diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue index c907af3..0978c32 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldContent/UsePotionPlayField.vue @@ -12,7 +12,7 @@ @player-selected="playerSelected"/>
-
+
new GameHistory(gameHistoryEntry)); @@ -138,7 +138,7 @@ export default { } catch (e) { this.$error.display(e); } finally { - this.loadings.potionUsage = false; + this.loading.potionUsage = false; } }, openLifePotionPanel() { diff --git a/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue b/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue index 0e545e1..56958c5 100644 --- a/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue +++ b/src/components/Game/GameContent/GamePlayField/GamePlayFieldFooter/GamePlayFieldFooter.vue @@ -7,10 +7,10 @@
- +
+ :loading="loading.makeAPlay" :disabled="!canSubmitPlay"> @@ -73,7 +73,7 @@ export default { }, data() { return { - loadings: { + loading: { makeAPlay: false, getHistory: false, }, @@ -124,7 +124,7 @@ export default { const { vileFatherOfWolvesPlayer } = this.game; if (this.game.firstWaiting.for === "werewolves" && !!vileFatherOfWolvesPlayer && vileFatherOfWolvesPlayer.isAlive) { try { - this.loadings.getHistory = true; + this.loading.getHistory = true; const queryStrings = { "play-source": "werewolves", "play-action": "eat" }; const { data } = await this.$werewolvesAssistantAPI.getGameHistory(this.game._id, queryStrings); const werewolvesActions = data.map(gameHistoryEntry => new GameHistory(gameHistoryEntry)); @@ -133,7 +133,7 @@ export default { } catch (e) { this.$error.display(e); } finally { - this.loadings.getHistory = false; + this.loading.getHistory = false; } } }, @@ -160,7 +160,7 @@ export default { }, async submitPlay() { try { - this.loadings.makeAPlay = true; + this.loading.makeAPlay = true; const playData = { ...this.play, source: this.game.firstWaiting.for, action: this.game.firstWaiting.to }; await this.launchPreSubmitRequest(); const { data } = await this.$werewolvesAssistantAPI.makeAPlay(this.game._id, playData); @@ -168,7 +168,7 @@ export default { } catch (e) { this.$error.display(e); } finally { - this.loadings.makeAPlay = false; + this.loading.makeAPlay = false; } }, }, diff --git a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue index 7811cdc..c9e134c 100644 --- a/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue +++ b/src/components/Game/GameEventMonitor/GameEvent/GameEvent.vue @@ -85,7 +85,7 @@ export default { }), // eslint-disable-next-line max-lines-per-function gameEventMetadata() { - const { ancientPlayer } = this.game; + const { ancientPlayer, didAncientTakeHisRevenge } = this.game; const gameEventFirstTarget = this.hasGameEventTargets ? this.event.targets[0] : null; const gameEventTargetName = this.hasGameEventTargets ? gameEventFirstTarget.player.name : null; const gameEventTargetRole = this.hasGameEventTargets ? gameEventFirstTarget.player.role.current : null; @@ -106,6 +106,8 @@ export default { i18n.t("GameEvent.messages.playerRevealsRole"), ...insertIf(gameEventTargetRole === "idiot" && gameEventFirstTarget.player.hasAttribute("sheriff"), i18n.t("GameEvent.messages.noIdiotSheriffAnymore")), + ...insertIf(gameEventTargetRole === "ancient" && didAncientTakeHisRevenge, + i18n.t("GameEvent.messages.ancientTakesHisRevenge")), ], }, "player-role-revealed": { diff --git a/src/components/Game/GameWinners/GameWinners.vue b/src/components/Game/GameWinners/GameWinners.vue index 15f5e9d..c8ac5f7 100644 --- a/src/components/Game/GameWinners/GameWinners.vue +++ b/src/components/Game/GameWinners/GameWinners.vue @@ -3,7 +3,7 @@
-
+
diff --git a/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryHistoryLine.vue b/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryHistoryLine.vue index 58ba919..cb1ad2e 100644 --- a/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryHistoryLine.vue +++ b/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryHistoryLine.vue @@ -8,8 +8,16 @@ Icon - - +
+ + +
+
+ +
+ +
@@ -18,13 +26,13 @@
- +
- +
@@ -96,12 +104,12 @@ export default { "wild-child": { "choose-model": worshipedSVG }, "big-bad-wolf": { eat: bigBadWolfSVG }, }; - return actionImageSource[play.source] ? actionImageSource[play.source][play.action] : undefined; + return actionImageSource[play.source.name] ? actionImageSource[play.source.name][play.action] : undefined; }, actionIconClass() { const { targets, votes, side, action, source } = this.gameHistoryEntry.play; if (action === "meet-each-other") { - return source === "lovers" ? "fa-grin-hearts" : "fa-comments"; + return source.name === "lovers" ? "fa-grin-hearts" : "fa-comments"; } else if (targets && targets.length || votes && votes.length || side) { return "fa-arrow-right"; } @@ -119,7 +127,7 @@ export default { } return this.$t(`GameSummaryHistoryLine.actions.witch.use-potion.death`); } - return this.$t(`GameSummaryHistoryLine.actions.${source}.${action}`); + return this.$t(`GameSummaryHistoryLine.actions.${source.name}.${action}`); }, }, }; diff --git a/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryModal.vue b/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryModal.vue index e55456e..f2b4ce3 100644 --- a/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryModal.vue +++ b/src/components/shared/Game/GameSummary/GameSummaryModal/GameSummaryModal.vue @@ -11,57 +11,80 @@