Browse Source

allow start direct game

Johan Le Baut 3 years ago
parent
commit
3c6f709e7c
9 changed files with 786 additions and 355 deletions
  1. 4 1
      .env.development
  2. 1 0
      code.extensions
  3. 263 319
      package-lock.json
  4. 15 15
      package.json
  5. 1 2
      project.code-workspace
  6. 37 17
      src/App.vue
  7. 1 0
      tests/db/initdb/twelve_heroes.sql
  8. 462 0
      tests/game-start.json
  9. 2 1
      vue.config.js

+ 4 - 1
.env.development

@@ -9,6 +9,9 @@ export DB_SOCKET=/run/mysqld/mysqld.sock
 export DB_USER=th
 export DB_PASS=th123
 
-export BROWSER=firefox
+export BROWSER=brave-browser
 export BABEL_ENV=debug
 export NODE_ENV=development
+export VUE_APP_DEV_START_GAME_ID=47
+export VUE_APP_DEV_START_GAME_PLAYER_1=user2
+export VUE_APP_DEV_START_GAME_PLAYER_2=user1

+ 1 - 0
code.extensions

@@ -11,3 +11,4 @@ code --install-extension sdras.vue-vscode-snippets
 code --install-extension shakram02.bash-beautify
 code --install-extension thekalinga.bootstrap4-vscode
 code --install-extension yzhang.markdown-all-in-one
+code --install-extension febean.vue-format

+ 263 - 319
package-lock.json

@@ -1086,13 +1086,58 @@
       }
     },
     "@nuxt/opencollective": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.0.tgz",
-      "integrity": "sha512-Vf09BxCdj1iT2IRqVwX5snaY2WCTkvM0O4cWWSO1ThCFuc4if0Q/nNwAgCxRU0FeYHJ7DdyMUNSdswCLKlVqeg==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz",
+      "integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==",
       "requires": {
-        "chalk": "^2.4.2",
-        "consola": "^2.10.1",
-        "node-fetch": "^2.6.0"
+        "chalk": "^4.1.0",
+        "consola": "^2.15.0",
+        "node-fetch": "^2.6.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
       }
     },
     "@soda/friendly-errors-webpack-plugin": {
@@ -1210,6 +1255,12 @@
         "@types/node": "*"
       }
     },
+    "@types/json-schema": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
+      "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
+      "dev": true
+    },
     "@types/minimatch": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -2163,6 +2214,7 @@
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
       "requires": {
         "color-convert": "^1.9.0"
       }
@@ -2391,7 +2443,8 @@
     "async-limiter": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
-      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+      "dev": true
     },
     "asynckit": {
       "version": "0.4.0",
@@ -2535,9 +2588,9 @@
       }
     },
     "base64-arraybuffer": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
-      "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
+      "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
     },
     "base64-js": {
       "version": "1.5.1",
@@ -2560,14 +2613,6 @@
         "tweetnacl": "^0.14.3"
       }
     },
-    "better-assert": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
-      "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
-      "requires": {
-        "callsite": "1.0.0"
-      }
-    },
     "bfj": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
@@ -2698,17 +2743,17 @@
       "dev": true
     },
     "bootstrap": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz",
-      "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA=="
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
+      "integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
     },
     "bootstrap-vue": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.12.0.tgz",
-      "integrity": "sha512-cnW89Ig0OBbKTA6Hv8daijSWziNSDErAme9jTOmjBDtzqYAd9D4NCp0wDjfNRaZBojTRx/UR1SCatxP3bE+SMw==",
+      "version": "2.21.2",
+      "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.21.2.tgz",
+      "integrity": "sha512-0Exe+4MZysqhZNXIKf4TzkvXaupxh9EHsoCRez0o5Dc0J7rlafayOEwql63qXv74CgZO8E4U8ugRNJko1vMvNw==",
       "requires": {
-        "@nuxt/opencollective": "^0.3.0",
-        "bootstrap": ">=4.4.1 <5.0.0",
+        "@nuxt/opencollective": "^0.3.2",
+        "bootstrap": ">=4.5.3 <5.0.0",
         "popper.js": "^1.16.1",
         "portal-vue": "^2.1.7",
         "vue-functional-data-merge": "^3.1.0"
@@ -3105,11 +3150,6 @@
         "caller-callsite": "^2.0.0"
       }
     },
-    "callsite": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-      "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
-    },
     "callsites": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
@@ -3190,16 +3230,16 @@
       }
     },
     "chai": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
-      "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
+      "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
       "dev": true,
       "requires": {
         "assertion-error": "^1.1.0",
         "check-error": "^1.0.2",
         "deep-eql": "^3.0.1",
         "get-func-name": "^2.0.0",
-        "pathval": "^1.1.0",
+        "pathval": "^1.1.1",
         "type-detect": "^4.0.5"
       }
     },
@@ -3207,6 +3247,7 @@
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
       "requires": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -3710,6 +3751,7 @@
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
       "requires": {
         "color-name": "1.1.3"
       }
@@ -3717,7 +3759,8 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
     },
     "color-string": {
       "version": "1.5.3",
@@ -3751,9 +3794,9 @@
       "dev": true
     },
     "comment-parser": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.4.tgz",
-      "integrity": "sha512-Nnl77/mt6sj1BiYSVMeMWzvD0183F2MFOJyFRmZHimUVDYS9J40AvXpiFA7RpU5pQH+HkvYc0dnsHpwW2xmbyQ==",
+      "version": "0.7.6",
+      "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz",
+      "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==",
       "dev": true
     },
     "commondir": {
@@ -3770,8 +3813,7 @@
     "component-emitter": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
-      "dev": true
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
     },
     "component-inherit": {
       "version": "0.0.3",
@@ -3891,9 +3933,9 @@
       "dev": true
     },
     "consola": {
-      "version": "2.11.3",
-      "resolved": "https://registry.npmjs.org/consola/-/consola-2.11.3.tgz",
-      "integrity": "sha512-aoW0YIIAmeftGR8GSpw6CGQluNdkWMWh3yEFjH/hmynTYnMtibXszii3lxCXmk8YxJtI3FAK5aTiquA5VH68Gw=="
+      "version": "2.15.3",
+      "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
+      "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
     },
     "console-browserify": {
       "version": "1.2.0",
@@ -4044,9 +4086,9 @@
       }
     },
     "core-js": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
-      "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz",
+      "integrity": "sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA=="
     },
     "core-js-compat": {
       "version": "3.6.5",
@@ -4444,6 +4486,7 @@
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
       "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+      "dev": true,
       "requires": {
         "ms": "^2.1.1"
       }
@@ -5042,46 +5085,46 @@
       }
     },
     "engine.io-client": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz",
-      "integrity": "sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
+      "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
       "requires": {
-        "component-emitter": "1.2.1",
+        "component-emitter": "~1.3.0",
         "component-inherit": "0.0.3",
-        "debug": "~4.1.0",
+        "debug": "~3.1.0",
         "engine.io-parser": "~2.2.0",
         "has-cors": "1.1.0",
         "indexof": "0.0.1",
-        "parseqs": "0.0.5",
-        "parseuri": "0.0.5",
-        "ws": "~6.1.0",
-        "xmlhttprequest-ssl": "~1.5.4",
+        "parseqs": "0.0.6",
+        "parseuri": "0.0.6",
+        "ws": "~7.4.2",
+        "xmlhttprequest-ssl": "~1.6.2",
         "yeast": "0.1.2"
       },
       "dependencies": {
-        "component-emitter": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
-        },
-        "ws": {
-          "version": "6.1.4",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
-          "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
           "requires": {
-            "async-limiter": "~1.0.0"
+            "ms": "2.0.0"
           }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
         }
       }
     },
     "engine.io-parser": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
-      "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
+      "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
       "requires": {
         "after": "0.8.2",
         "arraybuffer.slice": "~0.0.7",
-        "base64-arraybuffer": "0.1.5",
+        "base64-arraybuffer": "0.1.4",
         "blob": "0.0.5",
         "has-binary2": "~1.0.2"
       }
@@ -5187,7 +5230,8 @@
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
     },
     "escodegen": {
       "version": "1.14.1",
@@ -5352,9 +5396,9 @@
       }
     },
     "eslint-plugin-jsdoc": {
-      "version": "25.4.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-25.4.1.tgz",
-      "integrity": "sha512-EixCLTv36/etbr5GGC89n0GLDkU/5NmadPzI3x6gSzldqrZpyQVh6qqN3jarWdfTvJsimorP4KNCIwe5mk/7TA==",
+      "version": "25.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-25.4.3.tgz",
+      "integrity": "sha512-5FyIKcNoM+AMBf1sTHvs2DVyij2x6eCYO1hxOUWFLBZV6H5AIdXPT3fVc9H6hrxOYe9SRF+5SjY1hqimV3Q+gQ==",
       "dev": true,
       "requires": {
         "comment-parser": "^0.7.4",
@@ -5363,7 +5407,7 @@
         "lodash": "^4.17.15",
         "regextras": "^0.7.1",
         "semver": "^6.3.0",
-        "spdx-expression-parse": "^3.0.0"
+        "spdx-expression-parse": "^3.0.1"
       },
       "dependencies": {
         "semver": {
@@ -5371,13 +5415,23 @@
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
           "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
+        },
+        "spdx-expression-parse": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+          "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+          "dev": true,
+          "requires": {
+            "spdx-exceptions": "^2.1.0",
+            "spdx-license-ids": "^3.0.0"
+          }
         }
       }
     },
     "eslint-plugin-prettier": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz",
-      "integrity": "sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==",
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz",
+      "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==",
       "dev": true,
       "requires": {
         "prettier-linter-helpers": "^1.0.0"
@@ -5858,9 +5912,9 @@
       "optional": true
     },
     "filelist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz",
-      "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
+      "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
       "dev": true,
       "requires": {
         "minimatch": "^3.0.4"
@@ -6860,13 +6914,13 @@
       }
     },
     "globule": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
-      "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+      "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
       "dev": true,
       "requires": {
         "glob": "~7.1.1",
-        "lodash": "~4.17.12",
+        "lodash": "~4.17.10",
         "minimatch": "~3.0.2"
       }
     },
@@ -6963,7 +7017,8 @@
     "has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
     },
     "has-symbols": {
       "version": "1.0.1",
@@ -7972,9 +8027,9 @@
       "dev": true
     },
     "jake": {
-      "version": "10.6.1",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.6.1.tgz",
-      "integrity": "sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ==",
+      "version": "10.8.2",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
+      "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
       "dev": true,
       "requires": {
         "async": "0.9.x",
@@ -7998,9 +8053,9 @@
       "dev": true
     },
     "js-base64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
-      "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
+      "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
       "dev": true
     },
     "js-beautify": {
@@ -8112,18 +8167,18 @@
       }
     },
     "jsdoc-vuejs": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/jsdoc-vuejs/-/jsdoc-vuejs-3.0.8.tgz",
-      "integrity": "sha512-NuOicHZnTYJZ3xSdv/8cHADybwJvKl9eYwyIn4KC3PnCg9zNpe0ACSVQAmx93frtznf360LUcJUnqCreoEtUgg==",
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/jsdoc-vuejs/-/jsdoc-vuejs-3.0.9.tgz",
+      "integrity": "sha512-5HLgQJmSufnpwTIIfAzXl0jw7h+KOoRa7fonobQMNQOma3oA3eecztjqRONurXv2WV3BWckWOLVjUPlmgSzt2g==",
       "dev": true,
       "requires": {
         "ejs": "^3.0.1"
       },
       "dependencies": {
         "ejs": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.3.tgz",
-          "integrity": "sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==",
+          "version": "3.1.6",
+          "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
+          "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
           "dev": true,
           "requires": {
             "jake": "^10.6.1"
@@ -9425,7 +9480,8 @@
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "dev": true
     },
     "multicast-dns": {
       "version": "6.2.3",
@@ -9633,9 +9689,9 @@
       "dev": true
     },
     "node-sass": {
-      "version": "4.14.0",
-      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz",
-      "integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==",
+      "version": "4.14.1",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz",
+      "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==",
       "dev": true,
       "requires": {
         "async-foreach": "^0.1.3",
@@ -9652,7 +9708,7 @@
         "node-gyp": "^3.8.0",
         "npmlog": "^4.0.0",
         "request": "^2.88.0",
-        "sass-graph": "^2.2.4",
+        "sass-graph": "2.2.5",
         "stdout-stream": "^1.4.0",
         "true-case-path": "^1.0.2"
       },
@@ -9837,11 +9893,6 @@
       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
       "dev": true
     },
-    "object-component": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
-      "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
-    },
     "object-copy": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@@ -10229,20 +10280,14 @@
       }
     },
     "parseqs": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
-      "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
-      "requires": {
-        "better-assert": "~1.0.0"
-      }
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
+      "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
     },
     "parseuri": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
-      "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
-      "requires": {
-        "better-assert": "~1.0.0"
-      }
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
+      "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
     },
     "parseurl": {
       "version": "1.3.3",
@@ -10322,9 +10367,9 @@
       }
     },
     "pathval": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
-      "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+      "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
       "dev": true
     },
     "pbkdf2": {
@@ -11868,157 +11913,15 @@
       "dev": true
     },
     "sass-graph": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
-      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz",
+      "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==",
       "dev": true,
       "requires": {
         "glob": "^7.0.0",
         "lodash": "^4.0.0",
         "scss-tokenizer": "^0.2.3",
-        "yargs": "^7.0.0"
-      },
-      "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
-        },
-        "camelcase": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
-          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "get-caller-file": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
-          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
-          "dev": true
-        },
-        "invert-kv": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
-          "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "lcid": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
-          "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^1.0.0"
-          }
-        },
-        "os-locale": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
-          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-          "dev": true,
-          "requires": {
-            "lcid": "^1.0.0"
-          }
-        },
-        "require-main-filename": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
-          "dev": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "which-module": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
-          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-          "dev": true
-        },
-        "wrap-ansi": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1"
-          }
-        },
-        "y18n": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-          "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
-          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0",
-            "cliui": "^3.2.0",
-            "decamelize": "^1.1.1",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^1.4.0",
-            "read-pkg-up": "^1.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^1.0.2",
-            "which-module": "^1.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^5.0.0"
-          }
-        },
-        "yargs-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
-          "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0"
-          }
-        }
+        "yargs": "^13.3.2"
       }
     },
     "sass-loader": {
@@ -12496,48 +12399,48 @@
       }
     },
     "socket.io-client": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
-      "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
+      "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
       "requires": {
         "backo2": "1.0.2",
-        "base64-arraybuffer": "0.1.5",
         "component-bind": "1.0.0",
-        "component-emitter": "1.2.1",
-        "debug": "~4.1.0",
-        "engine.io-client": "~3.4.0",
+        "component-emitter": "~1.3.0",
+        "debug": "~3.1.0",
+        "engine.io-client": "~3.5.0",
         "has-binary2": "~1.0.2",
-        "has-cors": "1.1.0",
         "indexof": "0.0.1",
-        "object-component": "0.0.3",
-        "parseqs": "0.0.5",
-        "parseuri": "0.0.5",
+        "parseqs": "0.0.6",
+        "parseuri": "0.0.6",
         "socket.io-parser": "~3.3.0",
         "to-array": "0.1.4"
       },
       "dependencies": {
-        "component-emitter": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
         }
       }
     },
     "socket.io-parser": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
-      "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
+      "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
       "requires": {
-        "component-emitter": "1.2.1",
+        "component-emitter": "~1.3.0",
         "debug": "~3.1.0",
         "isarray": "2.0.1"
       },
       "dependencies": {
-        "component-emitter": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
-        },
         "debug": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -12977,15 +12880,56 @@
       "dev": true
     },
     "style-resources-loader": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.3.3.tgz",
-      "integrity": "sha512-vDD2HyG6On8H9gWUN9O9q1eXR/JnXpCkNvpusvgFsRQ9JZGF9drzvwKEigR9vqlmUbXO2t/vIIabpYMmis0eAQ==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.4.1.tgz",
+      "integrity": "sha512-UaAoQXq20relw6B633z4QZDxDyW7gevTt1e0y3MZtzdZfnvB90UL658czAgNc609Y7Kn5ErdthK9bSVhnykBUA==",
       "dev": true,
       "requires": {
         "glob": "^7.1.6",
-        "is-promise": "^2.1.0",
-        "loader-utils": "^1.2.3",
-        "schema-utils": "^2.6.1"
+        "loader-utils": "^2.0.0",
+        "schema-utils": "^3.0.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "6.12.6",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+          "dev": true,
+          "requires": {
+            "fast-deep-equal": "^3.1.1",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.4.1",
+            "uri-js": "^4.2.2"
+          }
+        },
+        "ajv-keywords": {
+          "version": "3.5.2",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+          "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "schema-utils": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+          "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+          "dev": true,
+          "requires": {
+            "@types/json-schema": "^7.0.6",
+            "ajv": "^6.12.5",
+            "ajv-keywords": "^3.5.2"
+          }
+        }
       }
     },
     "stylehacks": {
@@ -13016,6 +12960,7 @@
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
       "requires": {
         "has-flag": "^3.0.0"
       }
@@ -13792,14 +13737,14 @@
       "dev": true
     },
     "vue": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz",
-      "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ=="
+      "version": "2.6.13",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.13.tgz",
+      "integrity": "sha512-O+pAdJkce1ooYS1XyoQtpBQr9An+Oys3w39rkqxukVO3ZD1ilYJkWBGoRuadiQEm2LLJnCL2utV4TMSf52ubjw=="
     },
     "vue-cli-plugin-style-resources-loader": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.4.tgz",
-      "integrity": "sha512-aK2TyVThZO6oVPZJpCckha8ALcg1RXKYLNqtuy1fNv+24x6zGWKpSK+FHAo47B7yeRlFS9DbKo+cvUFMqWaZ7Q==",
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.5.tgz",
+      "integrity": "sha512-LluhjWTZmpGl3tiXg51EciF+T70IN/9t6UvfmgluJBqxbrb6OV9i7L5lTd+OKtcTeghDkhcBmYhtTxxU4w/8sQ==",
       "dev": true
     },
     "vue-clickaway": {
@@ -13869,9 +13814,9 @@
       }
     },
     "vue-router": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.6.tgz",
-      "integrity": "sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA=="
+      "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-style-loader": {
       "version": "4.1.2",
@@ -13892,9 +13837,9 @@
       }
     },
     "vue-template-compiler": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz",
-      "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==",
+      "version": "2.6.13",
+      "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.13.tgz",
+      "integrity": "sha512-latKAqpUjCkovB8XppW5gnZbSdYQzkf8pavsMBZYZrQcG6lAnj0EH4Ty7jMwAwFw5Cf4mybKBHlp1UTjnLPOWw==",
       "dev": true,
       "requires": {
         "de-indent": "^1.0.2",
@@ -13908,9 +13853,9 @@
       "dev": true
     },
     "vuex": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.2.0.tgz",
-      "integrity": "sha512-qBZGJJ1gUNWZbfZlH7ylIPwENg3R0Ckpq+qPexF065kOMOt1Ixt8WDJmtssVv7OhepWD0+Qie7pOS8f0oQy1JA=="
+      "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",
@@ -14536,8 +14481,7 @@
     "ws": {
       "version": "7.4.6",
       "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
-      "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
-      "dev": true
+      "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
     },
     "xml-name-validator": {
       "version": "3.0.0",
@@ -14558,9 +14502,9 @@
       "dev": true
     },
     "xmlhttprequest-ssl": {
-      "version": "1.5.5",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
-      "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
+      "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
     },
     "xtend": {
       "version": "4.0.2",

+ 15 - 15
package.json

@@ -17,15 +17,15 @@
     "doc": "jsdoc -c jsdoc/jsdoc.conf"
   },
   "dependencies": {
-    "bootstrap": "^4.4.1",
-    "bootstrap-vue": "^2.12.0",
-    "core-js": "^3.6.4",
+    "bootstrap": "^4.6.0",
+    "bootstrap-vue": "^2.21.2",
+    "core-js": "^3.14.0",
     "lodash.clonedeep": "^4.5.0",
-    "socket.io-client": "^2.3.0",
-    "vue": "^2.6.11",
+    "socket.io-client": "^2.4.0",
+    "vue": "^2.6.13",
     "vue-clickaway": "^2.2.2",
-    "vue-router": "^3.1.6",
-    "vuex": "^3.1.3"
+    "vue-router": "^3.5.1",
+    "vuex": "^3.6.2"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "~4.3.0",
@@ -37,20 +37,20 @@
     "@vue/eslint-config-prettier": "^6.0.0",
     "@vue/test-utils": "1.0.0-beta.31",
     "babel-eslint": "^10.1.0",
-    "chai": "^4.1.2",
+    "chai": "^4.3.4",
     "eslint": "^6.7.2",
-    "eslint-plugin-jsdoc": "^25.4.1",
-    "eslint-plugin-prettier": "^3.1.1",
+    "eslint-plugin-jsdoc": "^25.4.3",
+    "eslint-plugin-prettier": "^3.4.0",
     "eslint-plugin-vue": "^6.2.2",
     "jsdoc-import-support": "^3.6.4",
-    "jsdoc-vuejs": "^3.0.8",
+    "jsdoc-vuejs": "^3.0.9",
     "jsdoc-vuex-plugin": "^1.0.0",
-    "node-sass": "^4.12.0",
+    "node-sass": "^4.14.1",
     "prettier": "^1.19.1",
     "sass-loader": "^8.0.2",
-    "style-resources-loader": "^1.3.2",
+    "style-resources-loader": "^1.4.1",
     "tui-jsdoc-template": "^1.2.2",
-    "vue-cli-plugin-style-resources-loader": "^0.1.4",
-    "vue-template-compiler": "^2.6.11"
+    "vue-cli-plugin-style-resources-loader": "^0.1.5",
+    "vue-template-compiler": "^2.6.13"
   }
 }

+ 1 - 2
project.code-workspace

@@ -8,7 +8,6 @@
 		}
 	],
 	"settings": {
-		"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe",
 		"javascript.updateImportsOnFileMove.enabled": "always",
 		"typescript.validate.enable": false,
 		"eslint.alwaysShowStatus": true,
@@ -44,6 +43,6 @@
 		"emmet.excludeLanguages": [
 			"markdown"
 		],
-		"javascript.implicitProjectConfig.checkJs": true
+		"js/ts.implicitProjectConfig.checkJs": true
 	}
 }

+ 37 - 17
src/App.vue

@@ -75,23 +75,43 @@ export default {
       }
     }
   },
-  beforeMount() {
-    let user = localStorage.getItem('username');
-    if (user) {
-      console.log('user in storage, try to connect ! : ', user);
-      this.$store
-        .dispatch('menu/connect', user)
-        .then(() => {
-          let gameId = localStorage.getItem('gameId');
-          if (gameId && gameId > -1) {
-            console.log('gameId in storage, try to join ! : ', gameId);
-            this.$store.dispatch('menu/joinOnlineGame', {
-              id: gameId,
-              isNew: false
-            });
-          }
-        })
-        .catch(() => {});
+  async beforeMount() {
+    let tryConnect = async function(user, gameId, store) {
+      return store.dispatch('menu/connect', user).then(() => {
+        if (gameId && gameId > -1) {
+          console.log('gameId in storage, try to join ! : ', gameId);
+          store.dispatch('menu/joinOnlineGame', {
+            id: gameId,
+            isNew: false
+          });
+        }
+      });
+    };
+    if (process.env.VUE_APP_DEV_START_GAME_ID) {
+      let user1 = process.env.VUE_APP_DEV_START_GAME_PLAYER_1;
+      let user2 = process.env.VUE_APP_DEV_START_GAME_PLAYER_2;
+      let tryUser2 = false;
+      try {
+        await tryConnect(
+          user1,
+          process.env.VUE_APP_DEV_START_GAME_ID,
+          this.$store
+        );
+      } catch (error) {
+        console.log('Fail connecting user 1, trying user 2', error);
+        if (!tryUser2) {
+          tryUser2 = true;
+          await tryConnect(
+            user2,
+            process.env.VUE_APP_DEV_START_GAME_ID,
+            this.$store
+          );
+        }
+      }
+    } else {
+      let user = localStorage.getItem('username');
+      let gameId = localStorage.getItem('gameId');
+      await tryConnect(user, gameId, this.$store);
     }
   },
   created() {

File diff suppressed because it is too large
+ 1 - 0
tests/db/initdb/twelve_heroes.sql


+ 462 - 0
tests/game-start.json

@@ -0,0 +1,462 @@
+{
+    "bluePlayer": {
+        "name": "user2",
+        "color": "blue",
+        "heroesInPile": [
+            1,
+            4,
+            7,
+            11,
+            5,
+            2,
+            3,
+            9,
+            0
+        ],
+        "twelveHeroes": [
+            {
+                "id": 0,
+                "name": "Paysan",
+                "cost": 0,
+                "power": 1,
+                "faction": "humans",
+                "ability": {
+                    "name": "PaysanAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Paysan est recrute, prenez 2 Nourritures."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 1,
+                "name": "Paysan",
+                "cost": 0,
+                "power": 1,
+                "faction": "humans",
+                "ability": {
+                    "name": "PaysanAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Paysan est recrute, prenez 2 Nourritures."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 2,
+                "name": "Dragon",
+                "cost": 7,
+                "power": 6,
+                "faction": "humans",
+                "ability": {
+                    "name": "DragonAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Dragon est recrute, chaque joueur doit defausser 1 Nourriture dans chaque region ou il le peut."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 3,
+                "name": "Archange",
+                "cost": 4,
+                "power": 3,
+                "faction": "humans",
+                "ability": {
+                    "name": "ArchangeAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand l'Archange est recrute, gagnez 4 Nourritures dans une region ou vous avez au moins un heros."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 4,
+                "name": "Chevalier",
+                "cost": 3,
+                "power": 4,
+                "faction": "humans",
+                "ability": {
+                    "name": "ChevalierAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Chevalier est recrute, vous devez reprendre dans votre main un de vos Heros en jeu (le Chevalier si besoin)."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 5,
+                "name": "Chevalier",
+                "cost": 3,
+                "power": 4,
+                "faction": "humans",
+                "ability": {
+                    "name": "ChevalierAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Chevalier est recrute, vous devez reprendre dans votre main un de vos Heros en jeu (le Chevalier si besoin)."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 6,
+                "name": "Faucon Geant",
+                "cost": 1,
+                "power": 2,
+                "faction": "humans",
+                "ability": {
+                    "name": "FauconAbility",
+                    "hook": "BeforeMilitary",
+                    "isOptionnal": "true",
+                    "desc": "Le Faucon Geant peut profiter gratuitement d'une action Deplacer au debut de votre phase Militaire."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 7,
+                "name": "Intendant",
+                "cost": 2,
+                "power": 2,
+                "faction": "humans",
+                "ability": {
+                    "name": "IntendantAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand l'Intendant est recrute, gagnez 1 Nourriture dans chaque region ou vous avez au moins un heros."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 8,
+                "name": "Canon",
+                "cost": 1,
+                "power": 4,
+                "faction": "humans",
+                "ability": {
+                    "name": "CanonAbility",
+                    "hook": "BeforeMaintenance",
+                    "isOptionnal": "false",
+                    "desc": "Au debut de votre Maintenance, vous devez defausser le canon."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 9,
+                "name": "Char",
+                "cost": 3,
+                "power": 3,
+                "faction": "humans",
+                "ability": {
+                    "name": "CharAbility",
+                    "hook": "AfterDeploy",
+                    "isOptionnal": "true",
+                    "desc": "Quand le Char est deploye, vous pouvez renvoyer (sans Nourriture) un heros adverse de cout 3 ou moins de cette region vers son Campement."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 10,
+                "name": "Chevre",
+                "cost": 1,
+                "power": 2,
+                "faction": "humans",
+                "ability": {
+                    "name": "ChevreAbility",
+                    "hook": "BeforeMaintenance",
+                    "isOptionnal": "true",
+                    "desc": "Au debut de votre Maintenance, si la chevre est dans une region, vous pouvez la defausser pour gagner une nourriture dans cette region."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 11,
+                "name": "Stratege",
+                "cost": 1,
+                "power": 2,
+                "faction": "humans",
+                "ability": {
+                    "name": "StrategeAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "true",
+                    "desc": "Quand le Stratege est recrute, vous pouvez renvoyer (sans Nourriture) n'importe quel nombre de vos Heros des regions vers votre Campement."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            }
+        ],
+        "instructions": "Wait for the next step to be coded by the developers...",
+        "faction": "humans",
+        "playerAvailActions": {
+            "canDrawCards": 0,
+            "canPass": false,
+            "canEndTurn": false
+        },
+        "heroesInHand": [
+            8,
+            10,
+            6
+        ]
+    },
+    "redPlayer": {
+        "name": "user1",
+        "color": "red",
+        "heroesInPile": [
+            30,
+            28,
+            27,
+            33,
+            35,
+            29,
+            34,
+            25,
+            31
+        ],
+        "twelveHeroes": [
+            {
+                "id": 24,
+                "name": "Orc",
+                "cost": 3,
+                "power": 3,
+                "faction": "orcs",
+                "ability": {
+                    "name": "orcsAbility",
+                    "hook": "AfterDeploy",
+                    "isOptionnal": "false",
+                    "desc": "Quand l'orcs est deploye, chaque joueur doit defausser 1 Nourriture dans cette region, s'il le peut."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 25,
+                "name": "Orc",
+                "cost": 3,
+                "power": 3,
+                "faction": "orcs",
+                "ability": {
+                    "name": "orcsAbility",
+                    "hook": "AfterDeploy",
+                    "isOptionnal": "false",
+                    "desc": "Quand l'orcs est deploye, chaque joueur doit defausser 1 Nourriture dans cette region, s'il le peut."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 26,
+                "name": "Behemoth",
+                "cost": 5,
+                "power": 5,
+                "faction": "orcs",
+                "ability": {
+                    "name": "BehemothAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Behemoth est recrute, l'adversaire doit defausser un Heros dans une region, s'il le peut."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 27,
+                "name": "Behemoth",
+                "cost": 5,
+                "power": 5,
+                "faction": "orcs",
+                "ability": {
+                    "name": "BehemothAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Behemoth est recrute, l'adversaire doit defausser un Heros dans une region, s'il le peut."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 28,
+                "name": "Gobelin",
+                "cost": 0,
+                "power": 2,
+                "faction": "orcs",
+                "ability": {
+                    "name": "GobelinAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Gobelin est recrute, deployez-le gratuitement dans une region, sans pouvoir emmener de Nourriture."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 29,
+                "name": "Gobelin",
+                "cost": 0,
+                "power": 2,
+                "faction": "orcs",
+                "ability": {
+                    "name": "GobelinAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Gobelin est recrute, deployez-le gratuitement dans une region, sans pouvoir emmener de Nourriture."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 30,
+                "name": "Char",
+                "cost": 3,
+                "power": 3,
+                "faction": "orcs",
+                "ability": {
+                    "name": "CharAbility",
+                    "hook": "AfterDeploy",
+                    "isOptionnal": "true",
+                    "desc": "Quand le Char est deploye, vous pouvez renvoyer (sans Nourriture) un heros adverse de cout 3 ou moins de cette region vers son Campement."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 31,
+                "name": "Char",
+                "cost": 3,
+                "power": 3,
+                "faction": "orcs",
+                "ability": {
+                    "name": "CharAbility",
+                    "hook": "AfterDeploy",
+                    "isOptionnal": "true",
+                    "desc": "Quand le Char est deploye, vous pouvez renvoyer (sans Nourriture) un heros adverse de cout 3 ou moins de cette region vers son Campement."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 32,
+                "name": "Chevre",
+                "cost": 1,
+                "power": 2,
+                "faction": "orcs",
+                "ability": {
+                    "name": "ChevreAbility",
+                    "hook": "BeforeMaintenance",
+                    "isOptionnal": "true",
+                    "desc": "Au debut de votre Maintenance, si la chevre est dans une region, vous pouvez la defausser pour gagner une nourriture dans cette region."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 33,
+                "name": "Chevre",
+                "cost": 1,
+                "power": 2,
+                "faction": "orcs",
+                "ability": {
+                    "name": "ChevreAbility",
+                    "hook": "BeforeMaintenance",
+                    "isOptionnal": "true",
+                    "desc": "Au debut de votre Maintenance, si la chevre est dans une region, vous pouvez la defausser pour gagner une nourriture dans cette region."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 34,
+                "name": "Paysan",
+                "cost": 0,
+                "power": 1,
+                "faction": "orcs",
+                "ability": {
+                    "name": "PaysanAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand le Paysan est recrute, prenez 2 Nourritures."
+                },
+                "isDraftable": false,
+                "popularity": "any",
+                "possibleActions": []
+            },
+            {
+                "id": 35,
+                "name": "Intendant",
+                "cost": 2,
+                "power": 2,
+                "faction": "orcs",
+                "ability": {
+                    "name": "IntendantAbility",
+                    "hook": "AfterRecruit",
+                    "isOptionnal": "false",
+                    "desc": "Quand l'Intendant est recrute, gagnez 1 Nourriture dans chaque region ou vous avez au moins un heros."
+                },
+                "isDraftable": true,
+                "popularity": "any",
+                "possibleActions": []
+            }
+        ],
+        "instructions": "Wait for the next step to be coded by the developers...",
+        "faction": "orcs",
+        "playerAvailActions": {
+            "canDrawCards": 0,
+            "canPass": false,
+            "canEndTurn": false
+        },
+        "heroesInHand": [
+            24,
+            32,
+            26
+        ]
+    },
+    "game": {
+        "allHeroes": [],
+        "deckMode": "faction",
+        "advRules": [],
+        "waitingFor/blue": false,
+        "waitingFor/red": false,
+        "currentPlayer": "both",
+        "battleTiles/left": [
+            {
+                "id": 0,
+                "name": "mine",
+                "redPoints": 3
+            }
+        ],
+        "updatePlayerState": "both",
+        "gameState": "2_CHANGE_UP_TO_3_CARDS",
+        "allHeroesJson": ""
+    }
+}

+ 2 - 1
vue.config.js

@@ -5,7 +5,8 @@ module.exports = {
     overlay: {
       warnings: true,
       errors: true
-    }
+    },
+    openPage: ['index.html', 'index.html']
   },
 
   runtimeCompiler: true,

Some files were not shown because too many files changed in this diff