From 8cde38b0d6515422bcbc75e8c977657f5a85ed60 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 26 Nov 2018 21:16:24 -0800 Subject: [PATCH 01/64] add app.js express framework --- .travis.yml | 1 - index.js | 2 +- package.json | 2 +- src/app.js | 29 +++++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/app.js diff --git a/.travis.yml b/.travis.yml index f63a98e..2ca9eae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,5 +3,4 @@ node_js: - "9" script: - - npm run lint - npm test diff --git a/index.js b/index.js index c9a1705..f634fd2 100644 --- a/index.js +++ b/index.js @@ -4,4 +4,4 @@ require('dotenv').config(); -require(./src/app.js).start(process.env.PORT); +require('./src/app.js').start(process.env.PORT); diff --git a/package.json b/package.json index 7cd83e4..194004b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "jest --verbose --coverage" }, "repository": { "type": "git", diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..d482223 --- /dev/null +++ b/src/app.js @@ -0,0 +1,29 @@ +'use strict'; + +require('dotenv').config(); +// Set up Express +const express = require('express'); +const app = express(); + +app.get('/', (request, response) => { + response.send('route works!'); +}); + +// app.listen(process.env.PORT, () => { +// console.log('Game-Engine Server up on port ', process.env.PORT); +// }); +let server = false; + +module.exports = { + start: (port) => { + if(!server) { + server = app.listen(port, (err) => { + if(err) { throw err; } + console.log('Game Engine Server running on ', port); + }); + } + else { + console.log('Server is already running'); + } + }, +}; \ No newline at end of file From aa0182d73cac1225704700cd3870e5883e3aae0f Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 26 Nov 2018 21:25:57 -0800 Subject: [PATCH 02/64] add test --- __tests__/game-engine.tests.js | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 __tests__/game-engine.tests.js diff --git a/__tests__/game-engine.tests.js b/__tests__/game-engine.tests.js new file mode 100644 index 0000000..d371aa4 --- /dev/null +++ b/__tests__/game-engine.tests.js @@ -0,0 +1,8 @@ +'use strict'; + +describe('tests', () => { + it('lame test to get travis up and running', () => { + let x = 5; + expect(x).toBe(5); + }); +}); \ No newline at end of file From 70072231ada004617dc9b4aaa40c22b13df90405 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 26 Nov 2018 21:36:16 -0800 Subject: [PATCH 03/64] add dotenv --- package-lock.json | 5 +++++ package.json | 1 + 2 files changed, 6 insertions(+) diff --git a/package-lock.json b/package-lock.json index 3846f39..68a118d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -274,6 +274,11 @@ "esutils": "^2.0.2" } }, + "dotenv": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", + "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index 194004b..24e9ac9 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "homepage": "https://github.com/icathaid/Game-Engine#readme", "dependencies": { + "dotenv": "^6.1.0", "eslint": "^5.9.0", "eslintrc": "^1.0.6", "express": "^4.16.4", From 754ce10c714ef6fc415c8d2c62b2824d93131f87 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Tue, 27 Nov 2018 12:47:44 -0800 Subject: [PATCH 04/64] add Socket-IO integration, add comments throughout code --- index.js | 6 +- package-lock.json | 279 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 + src/app.js | 85 ++++++++++---- src/index.html | 37 ++++++ views/site.ejs | 19 ++++ 6 files changed, 407 insertions(+), 21 deletions(-) create mode 100644 src/index.html create mode 100644 views/site.ejs diff --git a/index.js b/index.js index f634fd2..399ade0 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,8 @@ require('dotenv').config(); +// Pulling in start function from ./src/app.js +const start = require('./src/app.js'); - -require('./src/app.js').start(process.env.PORT); +// PORT defined in .env file +start(process.env.PORT || 3000); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 68a118d..6153f39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,6 +41,11 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, "ajv": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", @@ -83,16 +88,54 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "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" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -132,6 +175,11 @@ "callsites": "^0.2.0" } }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, "callsites": { "version": "0.2.0", "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", @@ -191,11 +239,21 @@ "delayed-stream": "~1.0.0" } }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -284,11 +342,79 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "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" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "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" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -615,6 +741,19 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -649,6 +788,11 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -703,6 +847,11 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -835,6 +984,11 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -877,6 +1031,22 @@ "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "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" + } + }, + "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" + } + }, "parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", @@ -1091,6 +1261,85 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "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" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.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", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "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" + } + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "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" + } + } + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1204,6 +1453,11 @@ "os-tmpdir": "~1.0.2" } }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -1226,6 +1480,11 @@ "mime-types": "~2.1.18" } }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1279,6 +1538,26 @@ "requires": { "mkdirp": "^0.5.1" } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/package.json b/package.json index 24e9ac9..1b87a37 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,11 @@ "homepage": "https://github.com/icathaid/Game-Engine#readme", "dependencies": { "dotenv": "^6.1.0", + "ejs": "^2.6.1", "eslint": "^5.9.0", "eslintrc": "^1.0.6", "express": "^4.16.4", + "socket.io": "^2.1.1", "superagent": "^4.0.0" } } diff --git a/src/app.js b/src/app.js index d482223..2f7960b 100644 --- a/src/app.js +++ b/src/app.js @@ -1,29 +1,76 @@ 'use strict'; +// --- DEPENDANCIES ------------------------------ + require('dotenv').config(); -// Set up Express + +// --- EXPRESS SETUP ----------------------------- + const express = require('express'); const app = express(); +// Setting the view engine to ejs and enabling JSON for POST requests +app.use(express.json()); +app.use(express.urlencoded({extended:true})); +app.set('view engine', 'ejs'); + + +// --- ROUTES ------------------------------------ +// Renders landing page app.get('/', (request, response) => { - response.send('route works!'); + response.render('site'); }); -// app.listen(process.env.PORT, () => { -// console.log('Game-Engine Server up on port ', process.env.PORT); +// app.post('/signup', (request, response => { +// Takes POST data and sends to API server // }); -let server = false; - -module.exports = { - start: (port) => { - if(!server) { - server = app.listen(port, (err) => { - if(err) { throw err; } - console.log('Game Engine Server running on ', port); - }); - } - else { - console.log('Server is already running'); - } - }, -}; \ No newline at end of file +// app.post('/login', auth, (request, response) => { + // Takes POST data and sends to API server +// }); + +// serves Socket.IO linked html page, see index.html for examples of Socket-IO client useage. +app.get('/join', (request, response) => { + response.sendFile(__dirname + '/index.html'); +}); + +// --- SOCKET IO --------------------------------- + +// Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. +const server = require('http').Server(app); +const io = require('socket.io')(server); + +// This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. +// Currently this triggers when clients got to the /join route or when they navigate away from the /join route. +// Simply console logging on connect or disconnect for now, but can be expanded to do other things. +io.on('connection', function(socket){ + console.log('a user connected'); + socket.on('disconnect', function(){ + console.log('user disconnected'); + }); +}); + +// This watches for chat messages from the index.html page and console logs them as they come. +io.on('connection', function(socket){ + socket.on('chat message', function(msg){ + console.log('message: ' + msg); + }); +}); + +// When a user posts a message, this is what is emitting the event that the socket connection above is listening for. +io.on('connection', function(socket){ + socket.on('chat message', function(msg){ + io.emit('chat message', msg); + }); +}); + +// --- EXPORTS ----------------------------------- + +// Start function exported for index.js. The port to use must be defined in index.js. +// Listens on `server` and not `app`, otherwise Socket.IO cannot connect. +const start = (port) => { + server.listen(port, () => { + console.log('Game Server Listening on port ', port); + }); +}; + +module.exports = start; \ No newline at end of file diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..b81222c --- /dev/null +++ b/src/index.html @@ -0,0 +1,37 @@ + + + + Socket.IO chat + + + +
    +
    + +
    + + + + + \ No newline at end of file diff --git a/views/site.ejs b/views/site.ejs new file mode 100644 index 0000000..0edc209 --- /dev/null +++ b/views/site.ejs @@ -0,0 +1,19 @@ + + + + Game Engine + + + + + + \ No newline at end of file From 5f21e931a2c07261335c9a4dac5fcdec3b81dd54 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Tue, 27 Nov 2018 13:00:55 -0800 Subject: [PATCH 05/64] add comments for index.html --- src/app.js | 2 +- src/index.html | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/app.js b/src/app.js index 2f7960b..39f58fb 100644 --- a/src/app.js +++ b/src/app.js @@ -56,7 +56,7 @@ io.on('connection', function(socket){ }); }); -// When a user posts a message, this is what is emitting the event that the socket connection above is listening for. +// When a user posts a message, this sends it back out for everyone to hear. io.on('connection', function(socket){ socket.on('chat message', function(msg){ io.emit('chat message', msg); diff --git a/src/index.html b/src/index.html index b81222c..a72ce84 100644 --- a/src/index.html +++ b/src/index.html @@ -14,22 +14,23 @@ -
      +
        - +
        - + From d54a4c0906fc8aeb63917248945a57a103191dc1 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Tue, 27 Nov 2018 18:47:36 -0800 Subject: [PATCH 06/64] fix package.json --- package.json | 3 ++- src/app.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1b87a37..527489a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "test": "jest --verbose --coverage" + "test": "jest --verbose --coverage", + "start": "node index.js" }, "repository": { "type": "git", diff --git a/src/app.js b/src/app.js index 39f58fb..f2159c5 100644 --- a/src/app.js +++ b/src/app.js @@ -25,7 +25,7 @@ app.get('/', (request, response) => { // Takes POST data and sends to API server // }); // app.post('/login', auth, (request, response) => { - // Takes POST data and sends to API server +// Takes POST data and sends to API server // }); // serves Socket.IO linked html page, see index.html for examples of Socket-IO client useage. From bea81e4f7af5abac2fc610f41010243be599da41 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Tue, 27 Nov 2018 21:06:25 -0800 Subject: [PATCH 07/64] work on 'join' event listener --- package-lock.json | 3180 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + src/app.js | 19 + 3 files changed, 3182 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6153f39..b30d62a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,6 +36,21 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==" }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", @@ -57,6 +72,21 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, "ansi-escapes": { "version": "3.1.0", "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -75,6 +105,15 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -83,16 +122,87 @@ "sprintf-js": "~1.0.2" } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, "arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "requires": { + "lodash": "^4.17.10" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -103,6 +213,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -113,16 +228,84 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, "base64id": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -131,11 +314,31 @@ "callsite": "1.0.0" } }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "bignumber.js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", + "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -162,11 +365,156 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -185,6 +533,20 @@ "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -200,11 +562,61 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -218,6 +630,37 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -239,6 +682,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -254,11 +702,46 @@ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, + "compressible": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "requires": { + "mime-db": ">= 1.36.0 < 2" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -284,6 +767,50 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -296,6 +823,37 @@ "which": "^1.2.9" } }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "d": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "^0.10.9" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -304,11 +862,63 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -319,11 +929,35 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "devtools-detect": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/devtools-detect/-/devtools-detect-2.2.0.tgz", + "integrity": "sha1-lb2SP+LlSw+S2RWV6CdT2QnuwxI=" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -332,6 +966,11 @@ "esutils": "^2.0.2" } }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, "dotenv": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", @@ -347,6 +986,25 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -415,22 +1073,125 @@ "has-binary2": "~1.0.2" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "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=" + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } }, - "eslint": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", - "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "@babel/code-frame": "^7.0.0", + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "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=" + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", + "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", + "requires": { + "@babel/code-frame": "^7.0.0", "ajv": "^6.5.3", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", @@ -569,6 +1330,87 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "events": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", @@ -606,6 +1448,33 @@ "vary": "~1.1.2" } }, + "express-basic-auth": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.1.6.tgz", + "integrity": "sha512-fRh/UU2q/YhvY0/Pkzi3VcLyjIExveW2NOOnOGgO6yO0jKXt6zcKPVPWSrL8nlhlh+YEH5LOjz+CGFML5dJQNw==", + "requires": { + "basic-auth": "^2.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -626,6 +1495,70 @@ } } }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -658,6 +1591,27 @@ "object-assign": "^4.0.1" } }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "finalhandler": { "version": "1.1.1", "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", @@ -672,6 +1626,14 @@ "unpipe": "~1.0.0" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, "flat-cache": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", @@ -683,6 +1645,11 @@ "write": "^0.2.1" } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -703,6 +1670,14 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -713,11 +1688,488 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "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==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -731,6 +2183,25 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "globals": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", @@ -759,6 +2230,68 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, "http-errors": { "version": "1.6.3", "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -770,6 +2303,11 @@ "statuses": ">= 1.4.0 < 2" } }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -778,6 +2316,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -827,16 +2370,119 @@ "through": "^2.3.6" } }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + }, + "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=" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -847,6 +2493,21 @@ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -857,6 +2518,11 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -871,6 +2537,11 @@ "esprima": "^4.0.0" } }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -881,6 +2552,51 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, + "json5": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "keylog.io": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/keylog.io/-/keylog.io-0.1.5.tgz", + "integrity": "sha512-vbcG5kWPeE6LepsmmWm8vDCMFqtMP4E5hSQDxDy983kOMGakhHLP7jiRtk1lc8Nro5qGUb3xpNixvMp2VTaGbw==", + "requires": { + "async": "^2.6.0", + "commander": "^2.13.0", + "compression": "^1.7.1", + "devtools-detect": "^2.2.0", + "express": "^4.16.2", + "express-basic-auth": "^1.1.3", + "moment": "^2.20.1", + "mysql": "^2.15.0", + "opn": "^5.2.0", + "socket.io": "^2.0.4", + "socket.io-client": "^2.0.4", + "webpack": "^3.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -890,16 +2606,131 @@ "type-check": "~0.3.2" } }, + "load-json-file": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "loader-runner": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", + "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==" + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "lru-cache": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", + "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^3.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "media-typer": { "version": "0.3.0", "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -910,6 +2741,42 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -933,6 +2800,16 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -946,6 +2823,25 @@ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -954,6 +2850,11 @@ "minimist": "0.0.8" } }, + "moment": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -964,6 +2865,69 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "mysql": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.16.0.tgz", + "integrity": "sha512-dPbN2LHonQp7D5ja5DJXNbCLe/HRdu+f3v61aguzNRQIrmZLOeRoymBYyeThrR6ug+FqzDL95Gc9maqZUJS+Gw==", + "requires": { + "bignumber.js": "4.1.0", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -974,11 +2938,109 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -989,6 +3051,42 @@ "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", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "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.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -997,6 +3095,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1013,6 +3116,14 @@ "mimic-fn": "^1.0.0" } }, + "opn": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "requires": { + "is-wsl": "^1.1.0" + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -1026,11 +3137,77 @@ "wordwrap": "~1.0.0" } }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -1052,6 +3229,26 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1072,16 +3269,56 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, "progress": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", @@ -1096,6 +3333,29 @@ "ipaddr.js": "1.8.0" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -1106,6 +3366,33 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -1122,6 +3409,25 @@ "unpipe": "1.0.0" } }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, "readable-stream": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", @@ -1132,11 +3438,76 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "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=" + }, "require-uncached": { "version": "1.0.3", "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -1151,6 +3522,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -1160,6 +3536,19 @@ "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -1168,6 +3557,15 @@ "glob": "^7.0.5" } }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -1189,6 +3587,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1224,17 +3630,57 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "sha.js": { + "version": "2.4.11", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1261,6 +3707,98 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + } + }, "socket.io": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", @@ -1340,16 +3878,166 @@ } } }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", + "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", + "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1375,6 +4063,16 @@ "ansi-regex": "^3.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -1435,6 +4133,11 @@ "string-width": "^2.1.1" } }, + "tapable": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -1445,6 +4148,14 @@ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "requires": { + "setimmediate": "^1.0.4" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -1458,11 +4169,49 @@ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -1480,16 +4229,133 @@ "mime-types": "~2.1.18" } }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -1498,6 +4364,40 @@ "punycode": "^2.1.0" } }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1508,11 +4408,103 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -1521,11 +4513,63 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "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=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "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": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1554,6 +4598,106 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^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=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "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=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index 527489a..0176391 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "eslint": "^5.9.0", "eslintrc": "^1.0.6", "express": "^4.16.4", + "keylog.io": "^0.1.5", "socket.io": "^2.1.1", "superagent": "^4.0.0" } diff --git a/src/app.js b/src/app.js index f2159c5..e526027 100644 --- a/src/app.js +++ b/src/app.js @@ -56,6 +56,25 @@ io.on('connection', function(socket){ }); }); +let player1 = null; +let player2 = null; +io.on('connection', function(socket){ + socket.on('join', function(user){ + let players = 0; + if(!player1 && !player2) { + player1 = user; + players++; + } + else if (player1 && !player2) { + player2 = user; + players++; + } + else if (player1 && player2 && players == 2) { + io.emit('ready'); + } + }); +}); + // When a user posts a message, this sends it back out for everyone to hear. io.on('connection', function(socket){ socket.on('chat message', function(msg){ From 7d44621f77ddbf1b73949cefb4ce15716cc01928 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 20:52:58 -0800 Subject: [PATCH 08/64] add api route for after the game --- src/app.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/app.js b/src/app.js index e526027..f133102 100644 --- a/src/app.js +++ b/src/app.js @@ -21,22 +21,22 @@ app.get('/', (request, response) => { response.render('site'); }); -// app.post('/signup', (request, response => { -// Takes POST data and sends to API server -// }); -// app.post('/login', auth, (request, response) => { -// Takes POST data and sends to API server -// }); - // serves Socket.IO linked html page, see index.html for examples of Socket-IO client useage. app.get('/join', (request, response) => { response.sendFile(__dirname + '/index.html'); }); +// Post to API after the game +app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { + request.body = {'name':'from-engine','win':true}; + // console.log(response.body); + request.send(request.body); +}); + // --- SOCKET IO --------------------------------- // Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. -const server = require('http').Server(app); +// const server = require('http').Server(app); const io = require('socket.io')(server); // This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. @@ -75,6 +75,7 @@ io.on('connection', function(socket){ }); }); + // When a user posts a message, this sends it back out for everyone to hear. io.on('connection', function(socket){ socket.on('chat message', function(msg){ From 54a32db5505388ea5f92a234fb134dfbe770d53f Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 20:58:34 -0800 Subject: [PATCH 09/64] add server-side socket'io code to test client connections --- src/app.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/app.js b/src/app.js index f133102..da68d3b 100644 --- a/src/app.js +++ b/src/app.js @@ -37,25 +37,35 @@ app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { // Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. // const server = require('http').Server(app); -const io = require('socket.io')(server); - +const io = require('socket.io')(3000); +let sockets = []; // This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. // Currently this triggers when clients got to the /join route or when they navigate away from the /join route. // Simply console logging on connect or disconnect for now, but can be expanded to do other things. -io.on('connection', function(socket){ - console.log('a user connected'); - socket.on('disconnect', function(){ - console.log('user disconnected'); +// when someone connects to the server (nodemon or node server.js) +io.on('connection', (socket) => { + sockets.push(socket); + console.log('sockets', sockets); + + // when someone connects via node client.js + socket.on('start', () => { + socket.emit('connected', `Player ${socket.id} ready`); + console.log(`Player ${socket.id} has joined the game`); + }); -}); -// This watches for chat messages from the index.html page and console logs them as they come. -io.on('connection', function(socket){ - socket.on('chat message', function(msg){ - console.log('message: ' + msg); + // when someone disconnects via node client.js + socket.on('disconnect', () => { + socket.removeAllListeners(); + console.log(`Player ${socket.id} has left the game`); }); + }); +console.log('Ready to play on port 3000'); + + + let player1 = null; let player2 = null; io.on('connection', function(socket){ From 0ff2a9b1fce8185ae319810465e37ec8cfaa7d11 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:01:59 -0800 Subject: [PATCH 10/64] fix server start code --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index da68d3b..9c4172d 100644 --- a/src/app.js +++ b/src/app.js @@ -98,7 +98,7 @@ io.on('connection', function(socket){ // Start function exported for index.js. The port to use must be defined in index.js. // Listens on `server` and not `app`, otherwise Socket.IO cannot connect. const start = (port) => { - server.listen(port, () => { + app.listen(port, () => { console.log('Game Server Listening on port ', port); }); }; From 0a7f5c15f1f3c22c4be05da2f94a7bce51a6d243 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:07:42 -0800 Subject: [PATCH 11/64] change socket.io port --- src/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index 9c4172d..728df4b 100644 --- a/src/app.js +++ b/src/app.js @@ -37,7 +37,7 @@ app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { // Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. // const server = require('http').Server(app); -const io = require('socket.io')(3000); +const io = require('socket.io')(3030); let sockets = []; // This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. // Currently this triggers when clients got to the /join route or when they navigate away from the /join route. @@ -62,7 +62,7 @@ io.on('connection', (socket) => { }); -console.log('Ready to play on port 3000'); +console.log('Ready to play on port 3030'); From 2a9de841c1bc04482fc11afc247f5f0f7a0391fa Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:10:51 -0800 Subject: [PATCH 12/64] refactor socket.io declaration --- src/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index 728df4b..ea54646 100644 --- a/src/app.js +++ b/src/app.js @@ -12,6 +12,8 @@ const app = express(); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); +const io = require('socket.io')(3030); +let sockets = []; // --- ROUTES ------------------------------------ @@ -37,8 +39,6 @@ app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { // Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. // const server = require('http').Server(app); -const io = require('socket.io')(3030); -let sockets = []; // This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. // Currently this triggers when clients got to the /join route or when they navigate away from the /join route. // Simply console logging on connect or disconnect for now, but can be expanded to do other things. From 701929c8d7b07a7cd5794e201b10255ad3091821 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:21:43 -0800 Subject: [PATCH 13/64] refactor socket.io --- src/app.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index ea54646..a583ec1 100644 --- a/src/app.js +++ b/src/app.js @@ -12,7 +12,14 @@ const app = express(); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); -const io = require('socket.io')(3030); +const server = require('http').createServer(app); +const io = require('socket.io')(server, { + path: '/join', + serveClient: true, + // below are engine.IO options + pingInterval: 10000, + pingTimeout: 5000, +}); let sockets = []; @@ -62,7 +69,7 @@ io.on('connection', (socket) => { }); -console.log('Ready to play on port 3030'); +console.log('Ready to play on port 3000'); From 250bec49ebf2eee304ea5348cadec5e6a01ef4d8 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:31:04 -0800 Subject: [PATCH 14/64] refactor socket.io --- src/app.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/app.js b/src/app.js index a583ec1..725293c 100644 --- a/src/app.js +++ b/src/app.js @@ -12,13 +12,19 @@ const app = express(); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); -const server = require('http').createServer(app); -const io = require('socket.io')(server, { - path: '/join', - serveClient: true, - // below are engine.IO options - pingInterval: 10000, - pingTimeout: 5000, +// const server = require('http').createServer(app); +// const io = require('socket.io')(server, { +// path: '/join', +// serveClient: true, +// // below are engine.IO options +// pingInterval: 10000, +// pingTimeout: 5000, +// }); +const http = require('http').Server(app); +var io = require('socket.io')(http); + +http.listen(3030, function(){ + console.log('Socket.IO listening on *:3030'); }); let sockets = []; @@ -69,10 +75,6 @@ io.on('connection', (socket) => { }); -console.log('Ready to play on port 3000'); - - - let player1 = null; let player2 = null; io.on('connection', function(socket){ From 779a099906ab2e490d9ed0153d7bd92edfef076f Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:40:32 -0800 Subject: [PATCH 15/64] work on socket.io address --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 725293c..01a688d 100644 --- a/src/app.js +++ b/src/app.js @@ -21,7 +21,7 @@ app.set('view engine', 'ejs'); // pingTimeout: 5000, // }); const http = require('http').Server(app); -var io = require('socket.io')(http); +var io = require(`${process.env.GAME_ENGINE_URL}:3030/socket.io/sockect.io.js`)(http); http.listen(3030, function(){ console.log('Socket.IO listening on *:3030'); From f4757950b823af24cd75c84e9ae0774750e701c0 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:43:20 -0800 Subject: [PATCH 16/64] refactor socket.io declaration --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 01a688d..76e2ecf 100644 --- a/src/app.js +++ b/src/app.js @@ -21,7 +21,7 @@ app.set('view engine', 'ejs'); // pingTimeout: 5000, // }); const http = require('http').Server(app); -var io = require(`${process.env.GAME_ENGINE_URL}:3030/socket.io/sockect.io.js`)(http); +var io = require(`https://enseven-game-engine.herokuapp.com/:3030/socket.io/sockect.io.js`)(http); http.listen(3030, function(){ console.log('Socket.IO listening on *:3030'); From 95b6b5bee3120f8b55c61910003e4d9c5836b18b Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Wed, 28 Nov 2018 21:45:21 -0800 Subject: [PATCH 17/64] refactor socket.io declaration --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 76e2ecf..ae1a175 100644 --- a/src/app.js +++ b/src/app.js @@ -21,7 +21,7 @@ app.set('view engine', 'ejs'); // pingTimeout: 5000, // }); const http = require('http').Server(app); -var io = require(`https://enseven-game-engine.herokuapp.com/:3030/socket.io/sockect.io.js`)(http); +var io = require(`https://enseven-game-engine.herokuapp.com:3030/socket.io/sockect.io.js`)(http); http.listen(3030, function(){ console.log('Socket.IO listening on *:3030'); From e25fb5ab65574dfd9a72fec972ffbbbb2a21fc4e Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 19:29:41 -0800 Subject: [PATCH 18/64] got 'start' and 'ready' emitters implemented --- index.js | 2 +- src/app.js | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/index.js b/index.js index 399ade0..649bd57 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,4 @@ require('dotenv').config(); const start = require('./src/app.js'); // PORT defined in .env file -start(process.env.PORT || 3000); \ No newline at end of file +start(4040); \ No newline at end of file diff --git a/src/app.js b/src/app.js index ae1a175..e03fc64 100644 --- a/src/app.js +++ b/src/app.js @@ -8,6 +8,7 @@ require('dotenv').config(); const express = require('express'); const app = express(); +const superagent = require('superagent'); // Setting the view engine to ejs and enabling JSON for POST requests app.use(express.json()); app.use(express.urlencoded({extended:true})); @@ -20,12 +21,9 @@ app.set('view engine', 'ejs'); // pingInterval: 10000, // pingTimeout: 5000, // }); -const http = require('http').Server(app); -var io = require(`https://enseven-game-engine.herokuapp.com:3030/socket.io/sockect.io.js`)(http); -http.listen(3030, function(){ - console.log('Socket.IO listening on *:3030'); -}); +const io = require('socket.io')(3030); + let sockets = []; @@ -42,10 +40,14 @@ app.get('/join', (request, response) => { }); // Post to API after the game -app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { - request.body = {'name':'from-engine','win':true}; +app.post('/postdata', (request, response) => { + let user = {'name':'from-engine','win':true}; + superagent.post(`${process.env.API_URL}/api/v1/singlestat`) + .send(user) + .then(() => { + response.send('made it'); + }); // console.log(response.body); - request.send(request.body); }); // --- SOCKET IO --------------------------------- @@ -58,27 +60,25 @@ app.post(`${process.env.API_URL}/api/v1/singlestat`, (request, response) => { // when someone connects to the server (nodemon or node server.js) io.on('connection', (socket) => { sockets.push(socket); - console.log('sockets', sockets); // when someone connects via node client.js socket.on('start', () => { - socket.emit('connected', `Player ${socket.id} ready`); - console.log(`Player ${socket.id} has joined the game`); - + socket.emit('connected', `Player ID ${socket.id} connected`); }); // when someone disconnects via node client.js socket.on('disconnect', () => { socket.removeAllListeners(); - console.log(`Player ${socket.id} has left the game`); + console.log(`Player ID ${socket.id} has left the game`); }); - }); let player1 = null; let player2 = null; io.on('connection', function(socket){ socket.on('join', function(user){ + console.log(`Welcome, ${JSON.parse(user.req.data).username}! + auth: ${user.text}`); let players = 0; if(!player1 && !player2) { player1 = user; From fb232b2145ae4d4022ee5e90a690ac5aef20d8ab Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 19:44:26 -0800 Subject: [PATCH 19/64] work on socketio --- src/app.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index e03fc64..b5a8f45 100644 --- a/src/app.js +++ b/src/app.js @@ -9,6 +9,7 @@ require('dotenv').config(); const express = require('express'); const app = express(); const superagent = require('superagent'); + // Setting the view engine to ejs and enabling JSON for POST requests app.use(express.json()); app.use(express.urlencoded({extended:true})); @@ -22,11 +23,21 @@ app.set('view engine', 'ejs'); // pingTimeout: 5000, // }); -const io = require('socket.io')(3030); +// const io = require('socket.io')(3030); let sockets = []; +const socketIO = require('socket.io'); + + +const PORT = 3030; + + +const server = express() + .use((req, res) => res.send('') ) + .listen(PORT, () => console.log(`Listening on ${ PORT }`)); +const io = socketIO(server); // --- ROUTES ------------------------------------ // Renders landing page From fb1d40a1e3e7cc521cfc0b2b1f499c0216b43aa8 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 19:49:43 -0800 Subject: [PATCH 20/64] fix PORT for heroku --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 649bd57..fcc801d 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,4 @@ require('dotenv').config(); const start = require('./src/app.js'); // PORT defined in .env file -start(4040); \ No newline at end of file +start(process.env.PORT || 4040); \ No newline at end of file From 65301b8040e633ed20d5c7b41ad9cc555499dd24 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 19:58:40 -0800 Subject: [PATCH 21/64] fix PORT for heroku --- src/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index b5a8f45..06be135 100644 --- a/src/app.js +++ b/src/app.js @@ -30,12 +30,12 @@ let sockets = []; const socketIO = require('socket.io'); -const PORT = 3030; + const server = express() .use((req, res) => res.send('') ) - .listen(PORT, () => console.log(`Listening on ${ PORT }`)); + .listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); const io = socketIO(server); // --- ROUTES ------------------------------------ From b37866338c32572dd5b86ff689e57737aa7d6f10 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:03:05 -0800 Subject: [PATCH 22/64] work on heroku deployment --- package.json | 2 +- src/app.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0176391..0fe167c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test": "jest --verbose --coverage", - "start": "node index.js" + "start": "node ./src/app.js" }, "repository": { "type": "git", diff --git a/src/app.js b/src/app.js index 06be135..38b8c7e 100644 --- a/src/app.js +++ b/src/app.js @@ -33,9 +33,8 @@ const socketIO = require('socket.io'); -const server = express() - .use((req, res) => res.send('') ) - .listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); +const server = express(); + const io = socketIO(server); // --- ROUTES ------------------------------------ @@ -71,12 +70,12 @@ app.post('/postdata', (request, response) => { // when someone connects to the server (nodemon or node server.js) io.on('connection', (socket) => { sockets.push(socket); - + // when someone connects via node client.js socket.on('start', () => { socket.emit('connected', `Player ID ${socket.id} connected`); }); - + // when someone disconnects via node client.js socket.on('disconnect', () => { socket.removeAllListeners(); @@ -123,4 +122,5 @@ const start = (port) => { }); }; -module.exports = start; \ No newline at end of file +server.listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); +// module.exports = start; \ No newline at end of file From 1db378b0e595279bf3c877f5fe7c522ce534fa57 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:10:24 -0800 Subject: [PATCH 23/64] work on heroku deployment --- src/app.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/app.js b/src/app.js index 38b8c7e..ec001b3 100644 --- a/src/app.js +++ b/src/app.js @@ -29,14 +29,7 @@ let sockets = []; const socketIO = require('socket.io'); - - - - -const server = express(); - - -const io = socketIO(server); +const io = socketIO(); // --- ROUTES ------------------------------------ // Renders landing page @@ -122,5 +115,5 @@ const start = (port) => { }); }; -server.listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); -// module.exports = start; \ No newline at end of file +// server.listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); +module.exports = start; \ No newline at end of file From 1104fbb5d5f6b3648e2227aaa0d58de85c3d86d3 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:18:47 -0800 Subject: [PATCH 24/64] change port for socketio --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index ec001b3..3722d6b 100644 --- a/src/app.js +++ b/src/app.js @@ -27,7 +27,7 @@ app.set('view engine', 'ejs'); let sockets = []; -const socketIO = require('socket.io'); +const socketIO = require('socket.io')(80); const io = socketIO(); // --- ROUTES ------------------------------------ From 91b7867470891cc6d8aea599cc812361b9316789 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:22:33 -0800 Subject: [PATCH 25/64] change port for socketio --- index.js | 2 +- src/app.js | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index fcc801d..334c31d 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,4 @@ require('dotenv').config(); const start = require('./src/app.js'); // PORT defined in .env file -start(process.env.PORT || 4040); \ No newline at end of file +start(process.env.PORT); \ No newline at end of file diff --git a/src/app.js b/src/app.js index 3722d6b..e6202ac 100644 --- a/src/app.js +++ b/src/app.js @@ -27,9 +27,7 @@ app.set('view engine', 'ejs'); let sockets = []; -const socketIO = require('socket.io')(80); - -const io = socketIO(); +const io = require('socket.io')(80); // --- ROUTES ------------------------------------ // Renders landing page From 0d3f5506017bc49afaaacefa0264c6299240a713 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:25:04 -0800 Subject: [PATCH 26/64] change port for socketio --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index e6202ac..9075a40 100644 --- a/src/app.js +++ b/src/app.js @@ -27,7 +27,7 @@ app.set('view engine', 'ejs'); let sockets = []; -const io = require('socket.io')(80); +const io = require('socket.io')(); // --- ROUTES ------------------------------------ // Renders landing page From 3e44d3a004542f99ece32b0d94e42f1f210c8b69 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:34:54 -0800 Subject: [PATCH 27/64] change port for socketio --- src/app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/app.js b/src/app.js index 9075a40..e00639d 100644 --- a/src/app.js +++ b/src/app.js @@ -9,12 +9,12 @@ require('dotenv').config(); const express = require('express'); const app = express(); const superagent = require('superagent'); - +const http = require('http'); // Setting the view engine to ejs and enabling JSON for POST requests app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); -// const server = require('http').createServer(app); +const ioserver = require('http').createServer(8080); // const io = require('socket.io')(server, { // path: '/join', // serveClient: true, @@ -27,7 +27,8 @@ app.set('view engine', 'ejs'); let sockets = []; -const io = require('socket.io')(); +const io = require('socket.io')(ioserver); +ioserver.listen(8080); // --- ROUTES ------------------------------------ // Renders landing page From 9e305a6492320c9323cfe5e7f0197961933e4b19 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 29 Nov 2018 20:39:13 -0800 Subject: [PATCH 28/64] change port for socketio --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index e00639d..3511f51 100644 --- a/src/app.js +++ b/src/app.js @@ -28,7 +28,7 @@ const ioserver = require('http').createServer(8080); let sockets = []; const io = require('socket.io')(ioserver); -ioserver.listen(8080); +ioserver.listen(process.env.PORT); // --- ROUTES ------------------------------------ // Renders landing page From 44f6a5a54674e03a273ccb490c7f9a555401f288 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sat, 1 Dec 2018 09:55:33 -0800 Subject: [PATCH 29/64] two players can join, then send 'ready' emit --- src/app.js | 68 ++++++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/src/app.js b/src/app.js index 3511f51..2e2596a 100644 --- a/src/app.js +++ b/src/app.js @@ -15,19 +15,9 @@ app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); const ioserver = require('http').createServer(8080); -// const io = require('socket.io')(server, { -// path: '/join', -// serveClient: true, -// // below are engine.IO options -// pingInterval: 10000, -// pingTimeout: 5000, -// }); - -// const io = require('socket.io')(3030); - -let sockets = []; - const io = require('socket.io')(ioserver); +let socketUsers = []; +let socketConnections = []; ioserver.listen(process.env.PORT); // --- ROUTES ------------------------------------ @@ -52,58 +42,45 @@ app.post('/postdata', (request, response) => { // console.log(response.body); }); + +let player1 = undefined; +let player2 = undefined; // --- SOCKET IO --------------------------------- -// Socket.IO requires a connection to a http server instance, so one is created here. It cannot attach directy to `app`. -// const server = require('http').Server(app); -// This uses built-in event emitters for when a user connects or disconnects to a Socket.IO linked resource. -// Currently this triggers when clients got to the /join route or when they navigate away from the /join route. -// Simply console logging on connect or disconnect for now, but can be expanded to do other things. -// when someone connects to the server (nodemon or node server.js) -io.on('connection', (socket) => { - sockets.push(socket); +// This holds all emitters and listeners for Socket.IO +io.sockets.on('connection', (socket) => { + socketConnections.push(socket); - // when someone connects via node client.js + // when someone connects via client.js socket.on('start', () => { socket.emit('connected', `Player ID ${socket.id} connected`); }); - // when someone disconnects via node client.js + // when someone disconnects via client.js socket.on('disconnect', () => { socket.removeAllListeners(); console.log(`Player ID ${socket.id} has left the game`); }); -}); -let player1 = null; -let player2 = null; -io.on('connection', function(socket){ - socket.on('join', function(user){ - console.log(`Welcome, ${JSON.parse(user.req.data).username}! - auth: ${user.text}`); - let players = 0; - if(!player1 && !player2) { - player1 = user; - players++; + // after the connection is confirmed. Takes a socket and assigns to players 1 and 2, then emits 'ready' + socket.on('join', function(socket){ + console.log(`Welcome, ${JSON.parse(socket.req.data).username}! + auth: ${socket.text}`); + if(player1 == undefined) { + player1 = JSON.parse(socket.req.data).username; + console.log(player1); } - else if (player1 && !player2) { - player2 = user; - players++; - } - else if (player1 && player2 && players == 2) { + else if (player2 == undefined) { + player2 = JSON.parse(socket.req.data).username; + console.log(player1, player2); + } + if(player1 && player2) { io.emit('ready'); } }); }); -// When a user posts a message, this sends it back out for everyone to hear. -io.on('connection', function(socket){ - socket.on('chat message', function(msg){ - io.emit('chat message', msg); - }); -}); - // --- EXPORTS ----------------------------------- // Start function exported for index.js. The port to use must be defined in index.js. @@ -114,5 +91,4 @@ const start = (port) => { }); }; -// server.listen(process.env.PORT, () => console.log(`Listening on ${ process.env.PORT }`)); module.exports = start; \ No newline at end of file From 5f93e11cf431afb935c646a662f8d7f5375275f0 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sat, 1 Dec 2018 11:45:15 -0800 Subject: [PATCH 30/64] push for staging branch --- src/app.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app.js b/src/app.js index 2e2596a..d5c4582 100644 --- a/src/app.js +++ b/src/app.js @@ -9,8 +9,6 @@ require('dotenv').config(); const express = require('express'); const app = express(); const superagent = require('superagent'); -const http = require('http'); -// Setting the view engine to ejs and enabling JSON for POST requests app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); @@ -19,6 +17,7 @@ const io = require('socket.io')(ioserver); let socketUsers = []; let socketConnections = []; ioserver.listen(process.env.PORT); + // --- ROUTES ------------------------------------ // Renders landing page @@ -45,6 +44,7 @@ app.post('/postdata', (request, response) => { let player1 = undefined; let player2 = undefined; + // --- SOCKET IO --------------------------------- // This holds all emitters and listeners for Socket.IO @@ -63,11 +63,12 @@ io.sockets.on('connection', (socket) => { }); // after the connection is confirmed. Takes a socket and assigns to players 1 and 2, then emits 'ready' - socket.on('join', function(socket){ + socket.on('join', (socket) => { console.log(`Welcome, ${JSON.parse(socket.req.data).username}! auth: ${socket.text}`); if(player1 == undefined) { player1 = JSON.parse(socket.req.data).username; + console.log(player1); } else if (player2 == undefined) { @@ -75,11 +76,14 @@ io.sockets.on('connection', (socket) => { console.log(player1, player2); } if(player1 && player2) { - io.emit('ready'); + io.emit('ready', JSON.parse(socket.req.data).username); } }); -}); + socket.on('h', (socket) => { + socket.emit('win'); + }); +}); // --- EXPORTS ----------------------------------- From e5b89cd8d33267cf5e1721a6aed1922ced67d8ff Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sat, 1 Dec 2018 15:54:28 -0800 Subject: [PATCH 31/64] refactor postdata route --- index.js | 2 +- src/app.js | 57 +++++++++++++++++++++++++++++++++--------------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/index.js b/index.js index 334c31d..649bd57 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,4 @@ require('dotenv').config(); const start = require('./src/app.js'); // PORT defined in .env file -start(process.env.PORT); \ No newline at end of file +start(4040); \ No newline at end of file diff --git a/src/app.js b/src/app.js index d5c4582..161702a 100644 --- a/src/app.js +++ b/src/app.js @@ -12,11 +12,12 @@ const superagent = require('superagent'); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.set('view engine', 'ejs'); -const ioserver = require('http').createServer(8080); +const ioserver = require('http').createServer(3000); const io = require('socket.io')(ioserver); -let socketUsers = []; +let nonPlayers = []; let socketConnections = []; ioserver.listen(process.env.PORT); +let isThereTwoPlayers = false; // --- ROUTES ------------------------------------ @@ -31,15 +32,8 @@ app.get('/join', (request, response) => { }); // Post to API after the game -app.post('/postdata', (request, response) => { - let user = {'name':'from-engine','win':true}; - superagent.post(`${process.env.API_URL}/api/v1/singlestat`) - .send(user) - .then(() => { - response.send('made it'); - }); - // console.log(response.body); -}); + + let player1 = undefined; @@ -66,22 +60,41 @@ io.sockets.on('connection', (socket) => { socket.on('join', (socket) => { console.log(`Welcome, ${JSON.parse(socket.req.data).username}! auth: ${socket.text}`); - if(player1 == undefined) { - player1 = JSON.parse(socket.req.data).username; - + let players = 0; + if(players < 1) { + player1 = socket.req; console.log(player1); + players++; } - else if (player2 == undefined) { - player2 = JSON.parse(socket.req.data).username; + else if (players == 1) { + player2 = socket.req; console.log(player1, player2); - } - if(player1 && player2) { - io.emit('ready', JSON.parse(socket.req.data).username); + isThereTwoPlayers = true; + players++; + io.emit('ready', JSON.parse(socket.req)); } + else if (players == 2) { + nonPlayers.push(socket.req.data); + console.log('spectators: ', nonPlayers); + socket.emit('spectate', socket.req); + } }); - - socket.on('h', (socket) => { - socket.emit('win'); + socket.on('quit', (socket) => { + console.log(socket); + io.emit('end', JSON.parse(socket.req.data)); + app.post('/postdata', (request, response) => { + let user = {'name':'from-engine','win':true}; + user.setHeader(`${socket.req.text}`); + superagent.post(`${process.env.API_URL}/api/v1/singlestat`) + .send(user) + .then(() => { + response.send('made it'); + }); + // console.log(response.body); + }); + player1 = undefined; + player2 = undefined; + console.log('Game server broadcasting "end"'); }); }); From 4d74188637d69d5c3efce876387f3051c005a074 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sun, 2 Dec 2018 23:23:13 -0800 Subject: [PATCH 32/64] modulariziation and refactored game functions --- package-lock.json | 1730 ++++++++++++++++++++-------------------- src/app.js | 166 ++-- src/index.html | 38 - src/lib/game-engine.js | 104 +++ 4 files changed, 1058 insertions(+), 980 deletions(-) delete mode 100644 src/index.html create mode 100644 src/lib/game-engine.js diff --git a/package-lock.json b/package-lock.json index b30d62a..ed11741 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "7.0.0" } }, "@babel/highlight": { @@ -17,9 +17,9 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "chalk": "2.4.1", + "esutils": "2.0.2", + "js-tokens": "4.0.0" } }, "accepts": { @@ -27,7 +27,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.21", "negotiator": "0.6.1" } }, @@ -41,7 +41,7 @@ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "requires": { - "acorn": "^4.0.3" + "acorn": "4.0.13" }, "dependencies": { "acorn": { @@ -66,10 +66,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-keywords": { @@ -82,9 +82,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, "ansi-escapes": { @@ -102,7 +102,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { @@ -110,8 +110,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "argparse": { @@ -119,7 +119,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -157,9 +157,9 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -195,7 +195,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.11" } }, "async-each": { @@ -233,13 +233,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -247,7 +247,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -255,7 +255,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -263,7 +263,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -271,9 +271,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -345,15 +345,15 @@ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "brace-expansion": { @@ -361,7 +361,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -370,16 +370,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -387,7 +387,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -402,12 +402,12 @@ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -415,9 +415,9 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -425,10 +425,10 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -436,8 +436,8 @@ "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -445,13 +445,13 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -459,7 +459,7 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { - "pako": "~1.0.5" + "pako": "1.0.6" } }, "buffer": { @@ -467,9 +467,9 @@ "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" }, "dependencies": { "isarray": { @@ -504,15 +504,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "caller-path": { @@ -520,7 +520,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "requires": { - "callsites": "^0.2.0" + "callsites": "0.2.0" } }, "callsite": { @@ -543,8 +543,8 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chalk": { @@ -552,9 +552,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "chardet": { @@ -567,19 +567,19 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.0" } }, "cipher-base": { @@ -587,8 +587,8 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "circular-json": { @@ -601,10 +601,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -612,7 +612,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -622,7 +622,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "2.0.0" } }, "cli-width": { @@ -635,8 +635,8 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { @@ -657,8 +657,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -679,7 +679,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -707,7 +707,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": "1.37.0" } }, "compression": { @@ -715,13 +715,13 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "2.0.15", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "1.0.1", "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "vary": "1.1.2" } }, "concat-map": { @@ -734,7 +734,7 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "constants-browserify": { @@ -782,8 +782,8 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -791,11 +791,11 @@ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -803,12 +803,12 @@ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -816,11 +816,11 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "crypto-browserify": { @@ -828,17 +828,17 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "d": { @@ -846,7 +846,7 @@ "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "0.10.46" } }, "date-now": { @@ -882,8 +882,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -891,7 +891,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -899,7 +899,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -907,9 +907,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -934,8 +934,8 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -953,9 +953,9 @@ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "doctrine": { @@ -963,7 +963,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "esutils": "^2.0.2" + "esutils": "2.0.2" } }, "domain-browser": { @@ -991,13 +991,13 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.5", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emojis-list": { @@ -1015,12 +1015,12 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "3.3.3" }, "dependencies": { "debug": { @@ -1040,14 +1040,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", "yeast": "0.1.2" }, "dependencies": { @@ -1067,10 +1067,10 @@ "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "requires": { "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", + "arraybuffer.slice": "0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.5", - "has-binary2": "~1.0.2" + "has-binary2": "1.0.3" } }, "enhanced-resolve": { @@ -1078,10 +1078,10 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.9" } }, "errno": { @@ -1089,7 +1089,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -1097,7 +1097,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es5-ext": { @@ -1105,9 +1105,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -1115,9 +1115,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-symbol": "3.1.1" } }, "es6-map": { @@ -1125,12 +1125,12 @@ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" } }, "es6-set": { @@ -1138,11 +1138,11 @@ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "event-emitter": "0.3.5" } }, "es6-symbol": { @@ -1150,8 +1150,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.46" } }, "es6-weak-map": { @@ -1159,10 +1159,10 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.46", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" } }, "escape-html": { @@ -1180,10 +1180,10 @@ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint": { @@ -1191,44 +1191,44 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" + "@babel/code-frame": "7.0.0", + "ajv": "6.5.5", + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "debug": "4.1.0", + "doctrine": "2.1.0", + "eslint-scope": "4.0.0", + "eslint-utils": "1.3.1", + "eslint-visitor-keys": "1.0.0", + "espree": "4.1.0", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.3", + "globals": "11.9.0", + "ignore": "4.0.6", + "imurmurhash": "0.1.4", + "inquirer": "6.2.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.12.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.1", + "regexpp": "2.0.1", + "require-uncached": "1.0.3", + "semver": "5.6.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "5.1.0", + "text-table": "0.2.0" }, "dependencies": { "debug": { @@ -1236,7 +1236,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -1261,8 +1261,8 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint-utils": { @@ -1280,8 +1280,8 @@ "resolved": "https://registry.npmjs.org/eslintrc/-/eslintrc-1.0.6.tgz", "integrity": "sha1-LmwgfFwVprHA5+XVy7GNe8sBpBM=", "requires": { - "eslint-config-react-app": "^2.1.0", - "eslint-plugin-requirejs": "^3.1.1" + "eslint-config-react-app": "2.1.0", + "eslint-plugin-requirejs": "3.2.0" } }, "espree": { @@ -1289,9 +1289,9 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "6.0.4", + "acorn-jsx": "5.0.1", + "eslint-visitor-keys": "1.0.0" } }, "esprima": { @@ -1304,7 +1304,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "4.2.0" } }, "esrecurse": { @@ -1312,7 +1312,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -1335,8 +1335,8 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.46" } }, "events": { @@ -1349,8 +1349,8 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "execa": { @@ -1358,13 +1358,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" }, "dependencies": { "cross-spawn": { @@ -1372,9 +1372,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.4", + "shebang-command": "1.2.0", + "which": "1.3.1" } } } @@ -1384,13 +1384,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -1398,7 +1398,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -1406,7 +1406,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1416,36 +1416,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", + "proxy-addr": "2.0.4", "qs": "6.5.2", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" } }, "express-basic-auth": { @@ -1453,7 +1453,7 @@ "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.1.6.tgz", "integrity": "sha512-fRh/UU2q/YhvY0/Pkzi3VcLyjIExveW2NOOnOGgO6yO0jKXt6zcKPVPWSrL8nlhlh+YEH5LOjz+CGFML5dJQNw==", "requires": { - "basic-auth": "^2.0.1" + "basic-auth": "2.0.1" } }, "extend-shallow": { @@ -1461,8 +1461,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -1470,7 +1470,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -1480,9 +1480,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" }, "dependencies": { "iconv-lite": { @@ -1490,7 +1490,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } } } @@ -1500,14 +1500,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -1515,7 +1515,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -1523,7 +1523,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -1531,7 +1531,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -1539,7 +1539,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -1547,9 +1547,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -1579,7 +1579,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { @@ -1587,8 +1587,8 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "1.3.4", + "object-assign": "4.1.1" } }, "fill-range": { @@ -1596,10 +1596,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -1607,7 +1607,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1618,12 +1618,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" } }, "find-up": { @@ -1631,7 +1631,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flat-cache": { @@ -1639,10 +1639,10 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "circular-json": "0.3.3", + "graceful-fs": "4.1.15", + "rimraf": "2.6.2", + "write": "0.2.1" } }, "for-in": { @@ -1655,9 +1655,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.21" } }, "formidable": { @@ -1675,7 +1675,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -1694,8 +1694,8 @@ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.11.1", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -1717,8 +1717,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -1729,7 +1729,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1783,7 +1783,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -1796,14 +1796,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { @@ -1811,12 +1811,12 @@ "bundled": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -1829,7 +1829,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -1837,7 +1837,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -1845,8 +1845,8 @@ "bundled": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1862,7 +1862,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -1874,7 +1874,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -1885,8 +1885,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { @@ -1894,7 +1894,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -1914,9 +1914,9 @@ "bundled": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -1924,16 +1924,16 @@ "bundled": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { @@ -1941,8 +1941,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -1955,8 +1955,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { @@ -1964,10 +1964,10 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -1983,7 +1983,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -2001,8 +2001,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -2020,10 +2020,10 @@ "bundled": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -2038,13 +2038,13 @@ "bundled": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -2052,7 +2052,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -2088,9 +2088,9 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -2098,14 +2098,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -2118,13 +2118,13 @@ "bundled": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "util-deprecate": { @@ -2137,7 +2137,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -2175,12 +2175,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-parent": { @@ -2188,8 +2188,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -2197,7 +2197,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -2235,9 +2235,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -2245,8 +2245,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -2254,7 +2254,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2264,8 +2264,8 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -2273,8 +2273,8 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "hmac-drbg": { @@ -2282,9 +2282,9 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.5", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hosted-git-info": { @@ -2297,10 +2297,10 @@ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.4.0" } }, "https-browserify": { @@ -2313,7 +2313,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -2341,8 +2341,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -2355,19 +2355,19 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "run-async": "2.3.0", + "rxjs": "6.3.3", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" } }, "interpret": { @@ -2390,7 +2390,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-arrayish": { @@ -2403,7 +2403,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.12.0" } }, "is-buffer": { @@ -2416,7 +2416,7 @@ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-data-descriptor": { @@ -2424,7 +2424,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-descriptor": { @@ -2432,9 +2432,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -2464,7 +2464,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -2472,7 +2472,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-plain-object": { @@ -2480,7 +2480,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-promise": { @@ -2533,8 +2533,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "json-loader": { @@ -2562,18 +2562,18 @@ "resolved": "https://registry.npmjs.org/keylog.io/-/keylog.io-0.1.5.tgz", "integrity": "sha512-vbcG5kWPeE6LepsmmWm8vDCMFqtMP4E5hSQDxDy983kOMGakhHLP7jiRtk1lc8Nro5qGUb3xpNixvMp2VTaGbw==", "requires": { - "async": "^2.6.0", - "commander": "^2.13.0", - "compression": "^1.7.1", - "devtools-detect": "^2.2.0", - "express": "^4.16.2", - "express-basic-auth": "^1.1.3", - "moment": "^2.20.1", - "mysql": "^2.15.0", - "opn": "^5.2.0", - "socket.io": "^2.0.4", - "socket.io-client": "^2.0.4", - "webpack": "^3.10.0" + "async": "2.6.1", + "commander": "2.19.0", + "compression": "1.7.3", + "devtools-detect": "2.2.0", + "express": "4.16.4", + "express-basic-auth": "1.1.6", + "moment": "2.22.2", + "mysql": "2.16.0", + "opn": "5.4.0", + "socket.io": "2.1.1", + "socket.io-client": "2.1.1", + "webpack": "3.12.0" } }, "kind-of": { @@ -2581,7 +2581,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "lazy-cache": { @@ -2594,7 +2594,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "levn": { @@ -2602,8 +2602,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "load-json-file": { @@ -2611,10 +2611,10 @@ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" } }, "loader-runner": { @@ -2627,9 +2627,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } }, "locate-path": { @@ -2637,8 +2637,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -2661,8 +2661,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^3.0.2" + "pseudomap": "1.0.2", + "yallist": "3.0.3" } }, "map-cache": { @@ -2675,7 +2675,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "md5.js": { @@ -2683,9 +2683,9 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "media-typer": { @@ -2698,7 +2698,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "memory-fs": { @@ -2706,8 +2706,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" }, "dependencies": { "isarray": { @@ -2720,13 +2720,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -2746,19 +2746,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -2773,8 +2773,8 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -2792,7 +2792,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "mimic-fn": { @@ -2815,7 +2815,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2828,8 +2828,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -2837,7 +2837,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -2886,13 +2886,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -2908,17 +2908,17 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -2958,28 +2958,28 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", + "url": "0.11.0", + "util": "0.10.4", "vm-browserify": "0.0.4" }, "dependencies": { @@ -2998,13 +2998,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -3014,10 +3014,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -3025,7 +3025,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npm-run-path": { @@ -3033,7 +3033,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -3056,9 +3056,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -3066,7 +3066,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -3076,7 +3076,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.pick": { @@ -3084,7 +3084,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "on-finished": { @@ -3105,7 +3105,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -3113,7 +3113,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "opn": { @@ -3121,7 +3121,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optionator": { @@ -3129,12 +3129,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "os-browserify": { @@ -3147,9 +3147,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "os-tmpdir": { @@ -3167,7 +3167,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -3175,7 +3175,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -3193,11 +3193,11 @@ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17" } }, "parse-json": { @@ -3205,7 +3205,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parseqs": { @@ -3213,7 +3213,7 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseuri": { @@ -3221,7 +3221,7 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseurl": { @@ -3274,7 +3274,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "pify": "^2.0.0" + "pify": "2.3.0" } }, "pbkdf2": { @@ -3282,11 +3282,11 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "pify": { @@ -3329,7 +3329,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3348,12 +3348,12 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "punycode": { @@ -3381,7 +3381,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -3389,8 +3389,8 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "range-parser": { @@ -3414,9 +3414,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" } }, "read-pkg-up": { @@ -3424,8 +3424,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" } }, "readable-stream": { @@ -3433,9 +3433,9 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -3443,9 +3443,9 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "4.1.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" }, "dependencies": { "isarray": { @@ -3458,13 +3458,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -3474,8 +3474,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexpp": { @@ -3513,8 +3513,8 @@ "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "caller-path": "0.1.0", + "resolve-from": "1.0.1" } }, "resolve-from": { @@ -3532,8 +3532,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "ret": { @@ -3546,7 +3546,7 @@ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -3554,7 +3554,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "^7.0.5" + "glob": "7.1.3" } }, "ripemd160": { @@ -3562,8 +3562,8 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-async": { @@ -3571,7 +3571,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "^2.1.0" + "is-promise": "2.1.0" } }, "rxjs": { @@ -3579,7 +3579,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "safe-buffer": { @@ -3592,7 +3592,7 @@ "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -3611,18 +3611,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" } }, "serve-static": { @@ -3630,9 +3630,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -3646,10 +3646,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -3657,7 +3657,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3677,8 +3677,8 @@ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "shebang-command": { @@ -3686,7 +3686,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -3704,7 +3704,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "requires": { - "is-fullwidth-code-point": "^2.0.0" + "is-fullwidth-code-point": "2.0.0" } }, "snapdragon": { @@ -3712,14 +3712,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -3727,7 +3727,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -3735,7 +3735,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3745,9 +3745,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -3755,7 +3755,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -3763,7 +3763,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -3771,7 +3771,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -3779,9 +3779,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -3796,7 +3796,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "socket.io": { @@ -3804,12 +3804,12 @@ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", + "debug": "3.1.0", + "engine.io": "3.2.1", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "socket.io-parser": "3.2.0" }, "dependencies": { "debug": { @@ -3836,15 +3836,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", + "socket.io-parser": "3.2.0", "to-array": "0.1.4" }, "dependencies": { @@ -3864,7 +3864,7 @@ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "requires": { "component-emitter": "1.2.1", - "debug": "~3.1.0", + "debug": "3.1.0", "isarray": "2.0.1" }, "dependencies": { @@ -3893,11 +3893,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-url": { @@ -3910,8 +3910,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.2" } }, "spdx-exceptions": { @@ -3924,8 +3924,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.2" } }, "spdx-license-ids": { @@ -3938,7 +3938,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -3956,8 +3956,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -3965,7 +3965,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -3980,8 +3980,8 @@ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" }, "dependencies": { "isarray": { @@ -3994,13 +3994,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -4010,11 +4010,11 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" }, "dependencies": { "isarray": { @@ -4027,13 +4027,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -4043,8 +4043,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "string_decoder": { @@ -4052,7 +4052,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -4060,7 +4060,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -4083,15 +4083,15 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-4.0.0.tgz", "integrity": "sha512-qaGDf+QUYxgMYdJBWCezHnc3UjrCUwxm5bCfxBhTXI5BbCluVzmVNYzxvCw1jP9PXmwUZeOW2yPpGm9fLbhtFg==", "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.2", - "debug": "^4.0.0", - "form-data": "^2.3.2", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^2.0.3", - "qs": "^6.5.1", - "readable-stream": "^3.0.3" + "component-emitter": "1.2.1", + "cookiejar": "2.1.2", + "debug": "4.1.0", + "form-data": "2.3.3", + "formidable": "1.2.1", + "methods": "1.1.2", + "mime": "2.4.0", + "qs": "6.5.2", + "readable-stream": "3.0.6" }, "dependencies": { "debug": { @@ -4099,7 +4099,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "mime": { @@ -4119,7 +4119,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "table": { @@ -4127,10 +4127,10 @@ "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", + "ajv": "6.5.5", + "lodash": "4.17.11", "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "string-width": "2.1.1" } }, "tapable": { @@ -4153,7 +4153,7 @@ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "tmp": { @@ -4161,7 +4161,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, "to-array": { @@ -4179,7 +4179,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -4187,10 +4187,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -4198,8 +4198,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "tslib": { @@ -4217,7 +4217,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -4226,7 +4226,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.21" } }, "uglify-js": { @@ -4234,9 +4234,9 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "yargs": { @@ -4244,9 +4244,9 @@ "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } } @@ -4263,9 +4263,9 @@ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "requires": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.3.0" } }, "ultron": { @@ -4278,10 +4278,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -4289,7 +4289,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -4297,10 +4297,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -4315,8 +4315,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -4324,9 +4324,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -4361,7 +4361,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -4413,8 +4413,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.2", + "spdx-expression-parse": "3.0.0" } }, "vary": { @@ -4435,9 +4435,9 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.0.4", + "graceful-fs": "4.1.15", + "neo-async": "2.6.0" } }, "webpack": { @@ -4445,28 +4445,28 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", "requires": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^2.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "async": "^2.1.2", - "enhanced-resolve": "^3.4.0", - "escope": "^3.6.0", - "interpret": "^1.0.0", - "json-loader": "^0.5.4", - "json5": "^0.5.1", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "mkdirp": "~0.5.0", - "node-libs-browser": "^2.0.0", - "source-map": "^0.5.3", - "supports-color": "^4.2.1", - "tapable": "^0.2.7", - "uglifyjs-webpack-plugin": "^0.4.6", - "watchpack": "^1.4.0", - "webpack-sources": "^1.0.1", - "yargs": "^8.0.2" + "acorn": "5.7.3", + "acorn-dynamic-import": "2.0.2", + "ajv": "6.5.5", + "ajv-keywords": "3.2.0", + "async": "2.6.1", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.9", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0", + "yargs": "8.0.2" }, "dependencies": { "acorn": { @@ -4484,7 +4484,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" } } } @@ -4494,8 +4494,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -4510,7 +4510,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -4533,8 +4533,8 @@ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -4547,7 +4547,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -4555,9 +4555,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -4565,7 +4565,7 @@ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -4580,7 +4580,7 @@ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.1" } }, "ws": { @@ -4588,9 +4588,9 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } }, "xmlhttprequest-ssl": { @@ -4618,19 +4618,19 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" }, "dependencies": { "ansi-regex": { @@ -4648,9 +4648,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" }, "dependencies": { "string-width": { @@ -4658,9 +4658,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } } } @@ -4670,7 +4670,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "strip-ansi": { @@ -4678,7 +4678,7 @@ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -4688,7 +4688,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" }, "dependencies": { "camelcase": { diff --git a/src/app.js b/src/app.js index 161702a..21e4a41 100644 --- a/src/app.js +++ b/src/app.js @@ -3,108 +3,120 @@ // --- DEPENDANCIES ------------------------------ require('dotenv').config(); - -// --- EXPRESS SETUP ----------------------------- - -const express = require('express'); -const app = express(); +const Game = require('./lib/game-engine.js'); const superagent = require('superagent'); -app.use(express.json()); -app.use(express.urlencoded({extended:true})); -app.set('view engine', 'ejs'); -const ioserver = require('http').createServer(3000); +const ioserver = require('http').createServer(8080); const io = require('socket.io')(ioserver); -let nonPlayers = []; +const players = io.of('/players'); +const spectators = io.of('spectators'); let socketConnections = []; -ioserver.listen(process.env.PORT); -let isThereTwoPlayers = false; - -// --- ROUTES ------------------------------------ - -// Renders landing page -app.get('/', (request, response) => { - response.render('site'); -}); - -// serves Socket.IO linked html page, see index.html for examples of Socket-IO client useage. -app.get('/join', (request, response) => { - response.sendFile(__dirname + '/index.html'); -}); - -// Post to API after the game - - - - -let player1 = undefined; -let player2 = undefined; // --- SOCKET IO --------------------------------- -// This holds all emitters and listeners for Socket.IO +// This function holds all emitters and listeners for Socket.IO io.sockets.on('connection', (socket) => { + socketConnections.push(socket); - // when someone connects via client.js + // when someone connects socket.on('start', () => { socket.emit('connected', `Player ID ${socket.id} connected`); }); - // when someone disconnects via client.js + // when someone disconnects6s6s socket.on('disconnect', () => { socket.removeAllListeners(); - console.log(`Player ID ${socket.id} has left the game`); + console.log(`${socket.username} has left the game`); }); - - // after the connection is confirmed. Takes a socket and assigns to players 1 and 2, then emits 'ready' + + // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} + socket.on('signin', (socket) => { + let user = `'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}, 'email' : ${socket.email.toString()}}`; + superagent.get(`${process.env.API_URL}/api/v1/users/${user.username}`) + .then(results => { + if (results.length[0]) { + socket.emit('signingup'); + superagent.post(`${process.env.API_URL}/signup`) + .send(user) + .set('Content-Type', 'application/json') + .then(data => { + user.auth = data.req.headers.auth; + socket.emit('signedin-new', user.username); + console.log(`${socket.username} has signed up and signed in`); + }) + .catch(error => { + if (error) { + console.log('Error signing in'); + } + }); + } + else { + superagent.post(`${process.env.API_URL}/signin`) + // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) + .set('Content-Type', 'application/json') + .then(data => { + socket.auth = data.req.headers.auth; + socket.emit('signedin-returning', socket.username); + console.log(`${socket.username} has returned and signed in`); + }) + .catch(error => { + if (error) { + console.log('Error signing in'); + } + }); + } + }) + .catch(err => console.log(err)); + }); + + // After a client signs in, joins a new game. Waits for two clients before starting the game + // Expected input: (String) 'username' socket.on('join', (socket) => { - console.log(`Welcome, ${JSON.parse(socket.req.data).username}! - auth: ${socket.text}`); - let players = 0; - if(players < 1) { - player1 = socket.req; - console.log(player1); - players++; - } - else if (players == 1) { - player2 = socket.req; - console.log(player1, player2); - isThereTwoPlayers = true; - players++; - io.emit('ready', JSON.parse(socket.req)); + Game.joinGame(socket); + }); + + // Runs game related functions from game-engine.js + // wait for both players before starting + let playCount = 0; + players.on('play', () => { + playCount++; + while (playCount < 2) { + setTimeout(() => { + console.log('Player one ready to start, waiting for player two'); + },3000); } - else if (players == 2) { - nonPlayers.push(socket.req.data); - console.log('spectators: ', nonPlayers); - socket.emit('spectate', socket.req); - } + console.log('players joined, game starting'); + // Input is an array of two player objects + let bothPlayerObjs = [Game.player1, Game.player2]; + + // Functions for running the game go here + // Only one for now. Can be many functions between events to/from the client instead of one huge function + Game.gameStuffHappens(bothPlayerObjs); + + // Function for dealing with a completed game + Game.determineWinner(bothPlayerObjs); + // Closing out the game session + Game.endSession(); // If spectating makes it in, this should pass in spectators array as a second parameter as well. + + }); + + // Listens for quit event from either client during play. Will confirm the quit with both players + players.on('quit', () => { + Game.quit(); }); - socket.on('quit', (socket) => { - console.log(socket); - io.emit('end', JSON.parse(socket.req.data)); - app.post('/postdata', (request, response) => { - let user = {'name':'from-engine','win':true}; - user.setHeader(`${socket.req.text}`); - superagent.post(`${process.env.API_URL}/api/v1/singlestat`) - .send(user) - .then(() => { - response.send('made it'); - }); - // console.log(response.body); - }); - player1 = undefined; - player2 = undefined; - console.log('Game server broadcasting "end"'); + + spectators.broadcast.emit('watch-broadcast', (socket) => { // Not focusing on this now, need to figure out what to pass through + socket.players = [Game.player1.username, Game.player2.username]; + socket.spectators = [Game.spectators]; }); }); + // --- EXPORTS ----------------------------------- -// Start function exported for index.js. The port to use must be defined in index.js. -// Listens on `server` and not `app`, otherwise Socket.IO cannot connect. const start = (port) => { - app.listen(port, () => { - console.log('Game Server Listening on port ', port); + ioserver.listen(port, () => { + console.log('Game Server Listening'); }); }; diff --git a/src/index.html b/src/index.html deleted file mode 100644 index a72ce84..0000000 --- a/src/index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - Socket.IO chat - - - -
          -
          - -
          - - - - - \ No newline at end of file diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js new file mode 100644 index 0000000..91b2924 --- /dev/null +++ b/src/lib/game-engine.js @@ -0,0 +1,104 @@ +'use strict'; + +import superagent from 'superagent'; + + +const Game = { + isThereTwoPlayers: false, + players: 0, + player1: {}, + player2: {}, + spectators: [], + + joinGame: (player) => { + if (this.players === 0 && this.isThereTwoPlayers === false) { + this.player1 = { + username: socket.username, + }; + this.players++; + console.log('Player One joined: ', this.player1.username); + players.join(`player${this.player1.username}`); + players.emit('joined-player1', this.player1.username); + } + else if (this.players === 1 && this.isThereTwoPlayers === false) { + this.player2 = { + username: socket.username, + }; + this.players++; + console.log('Player Two joined: ', this.player2.username); + players.join(`player${this.player1.username}`); + players.emit('joined-player2', this.player2.username); + console.log('Awaiting game start from client(s)...'); + } + else if (this.isThereTwoPlayers === true) { + this.spectators.push(JSON.stringify(socket.req.data).username.toString()); + console.log('spectators: ', this.spectators); + spectators.emit('spectate', this.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. + } + }, + + gameStuffHappens: (players) => { + console.log('playing the game... player two wins!'); + players[0].didIWin = true; + players[1].didIWin = false; + }, + + // Takes the player1 and player2 objects in an array + // Determines and notifies winner and loser, and posts stats to API server + determineWinner: (players) => { + players.forEach((player) => { + if(player.didIWin === true) { + console.log(`${player.username} won, storing results...`); + superagent.post(`${process.env.API_URL}/singlestat`) + .send(`{'name' : ${player.username}, 'win' : ${player.didIWin}`) + .then(() => { + console.log(`Results saved for ${player.username}`); + player.didIWin = undefined; + players.in(`player${player.username}`).emit('won'); + }) + .catch(err => console.log(err)); + } + else if(player.didIWin === false) { + console.log(`${player.username} lost, storing results...`); + superagent.post(`${process.env.API_URL}/singlestat`) + .send(`{'name' : ${player.username}, 'win' : ${player.didIWin}`) + .then(() => { + console.log(`Results saved for ${player.username}`); + player.didIWin = undefined; + players.in(`player${player.username}`).emit('won'); + }) + .catch(err => console.log(err)); + } + else { + console.log('Something went wrong determining the winner'); + } + }); + io.emit('gameover'); + }, + + quit: () => { + // get both players to send quit events + let quitCount = 0; + players.emit('confirm-quit'); + players.on('confirmed-quit', () => { + quitCount++; + }); + while(quitCount === 2) { + this.endSession(); + io.emit('end'); + io.removeAllListeners(); + quitCount = 0; + } + }, + + endSession: () => { + // Dump all session data + this.isThereTwoPlayers = false; + this.players = 0; + this.player1 = {}; + this.player2 = {}; + this.spectators = []; + }, +}; + +module.exports = Game; \ No newline at end of file From c76163b1f0522aed129c54bfb6dde6704a9265c1 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 14:22:15 -0800 Subject: [PATCH 33/64] refactoring and added client socket hooks to scratch file --- scratch/sockets.js | 72 ++++++++++++++++++++++++++++++++++++++++ src/app.js | 75 ++++++++++++++++++++++++++---------------- src/lib/game-engine.js | 43 +++++++++++++++++------- 3 files changed, 150 insertions(+), 40 deletions(-) create mode 100644 scratch/sockets.js diff --git a/scratch/sockets.js b/scratch/sockets.js new file mode 100644 index 0000000..c76539b --- /dev/null +++ b/scratch/sockets.js @@ -0,0 +1,72 @@ +'use strict'; + +const io = require('socket.io-client'); +const socket = io.connect('https://enseven-game-engine.herokuapp.com'); +const players = socket('/players'); +const spectators = socket('/spectators'); + + + +socket.emit('start'); + +socket.on('connected', (socket) => { + // get input, create object with username, email, and password field + socket.username = 'username'; + socket.password = 'ppassword'; + socket.email = 'email'; + + socket.emit('sign-in', socket); + + socket.on('signing-in', 'User found, signing in...'); + + socket.on('confirm-sign-up', 'User not found. Create account?', () => { + // Just needs to press enter or something to trigger + socket.emit('sign-up-confirmed'); + }); + + // These next two code blocks should function identiacally, separated for new or returning users + socket.on('signed-in-newuser', `Account created for ${socket.username} and signed in!`, () => { + // Get input to start/join a game + socket.emit('join', socket); + }); + socket.on('signed-in', `Welcome back, ${socket.username}!`, () => { + // Get input to start/join a game + socket.emit('join', socket); + }); + + players.in(`player1`).on(`player1-joined`, `${socket.username} has joined as player one`); + players.in('player2').on('player2-joined', `${socket.username} has joined as player two`); + + socket.on('ready-to-play', (socket) => { + // 'ready-to-play' is sent to all sockets, server waits to hear back from both players that they're ready + players.emit('play'); + }); + + players.on('input-request', () => { + // Server is only listening for one player's input, even if both end some + socket.input = 'input'; + // emits 'input' event with input attached after pressing enter + players.emit('input', socket.input); + }); + + players.emit('get-stats', socket.username, () => { + players.on('stats', (stats) => { + console.log(stats); + }); + }); + + // This would trigger when 1 client tries to quit a game + players.emit('quit-game', () => { + players.on('confirm-quit', () => { + // Sends 'confirm-quit' event to both players and waits to hear two 'quit-confirmed' events before proceeding + players.emit('quit-confirmed'); + }); + }); + + // spectators leaving the game + spectators.emit('leave-game', socket.username); + socket.on('end', () => { + // At this point all game session data is cleared and communication with the server ceases until a new 'start' emit + // Use this to shut down the client or start a new game + }); +}); \ No newline at end of file diff --git a/src/app.js b/src/app.js index 21e4a41..7ca7a6d 100644 --- a/src/app.js +++ b/src/app.js @@ -30,34 +30,37 @@ io.sockets.on('connection', (socket) => { }); // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} - socket.on('signin', (socket) => { + socket.on('sign-in', (socket) => { let user = `'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}, 'email' : ${socket.email.toString()}}`; - superagent.get(`${process.env.API_URL}/api/v1/users/${user.username}`) + superagent.get(`${process.env.API_URL}/playerstats/${user.username}`) .then(results => { - if (results.length[0]) { - socket.emit('signingup'); - superagent.post(`${process.env.API_URL}/signup`) - .send(user) - .set('Content-Type', 'application/json') - .then(data => { - user.auth = data.req.headers.auth; - socket.emit('signedin-new', user.username); - console.log(`${socket.username} has signed up and signed in`); - }) - .catch(error => { - if (error) { - console.log('Error signing in'); - } - }); + if (!results.name) { + socket.emit('confirm-sign-up'); + socket.on('sign-up-confirmed', () => { + superagent.post(`${process.env.API_URL}/signup`) + .send(user) + .set('Content-Type', 'application/json') + .then(data => { + user.auth = data.req.headers.auth; + socket.emit('signed-in-newuser', user.username); + console.log(`${socket.username} has signed up and signed in`); + }) + .catch(error => { + if (error) { + console.log('Error signing in'); + } + }); + }); } else { + socket.emit('signing-in'); superagent.post(`${process.env.API_URL}/signin`) // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) .set('Content-Type', 'application/json') .then(data => { socket.auth = data.req.headers.auth; - socket.emit('signedin-returning', socket.username); - console.log(`${socket.username} has returned and signed in`); + socket.emit('signed-in', socket.username); + console.log(`Returning user ${socket.username} has signed in`); }) .catch(error => { if (error) { @@ -78,37 +81,51 @@ io.sockets.on('connection', (socket) => { // Runs game related functions from game-engine.js // wait for both players before starting let playCount = 0; + let gameover = false; players.on('play', () => { playCount++; while (playCount < 2) { setTimeout(() => { console.log('Player one ready to start, waiting for player two'); - },3000); + },5000); } console.log('players joined, game starting'); // Input is an array of two player objects let bothPlayerObjs = [Game.player1, Game.player2]; - - // Functions for running the game go here - // Only one for now. Can be many functions between events to/from the client instead of one huge function - Game.gameStuffHappens(bothPlayerObjs); - + Game.playerTracker = 1; + while(gameover !== true) { + Game.getInput(); + Game.applyInput(Game.currentInput); + } // Function for dealing with a completed game Game.determineWinner(bothPlayerObjs); // Closing out the game session Game.endSession(); // If spectating makes it in, this should pass in spectators array as a second parameter as well. - }); + socket.on('get-stats', (socket) => { + superagent.get(`${process.env.API_URL}/playerstats/${socket}`) + .then(results => { + let stats = { + username: results.name, + wins: results.wins, + losses: results.losses, + }; + players.in(`player${socket}`).emit('stats', stats) + .catch(err => console.log(err)); + }); + }); // Listens for quit event from either client during play. Will confirm the quit with both players - players.on('quit', () => { + players.on('quit-game', () => { Game.quit(); }); - - spectators.broadcast.emit('watch-broadcast', (socket) => { // Not focusing on this now, need to figure out what to pass through + spectators.broadcast.emit('watch-broadcast', (socket) => { // Not focusing on this now, still need to figure out what to pass through socket.players = [Game.player1.username, Game.player2.username]; socket.spectators = [Game.spectators]; }); + spectators.on('leave-game', (socket) => { + + }); }); diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 91b2924..3c0b30e 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -9,16 +9,35 @@ const Game = { player1: {}, player2: {}, spectators: [], + playerTracker: 0, + currentInput: '', - joinGame: (player) => { + getInput: () => { + if(this.playerTracker === 1) { + players.in(`player1`).emit('input-request'); + players.in('player1').on('input', (socket) => { + this.currentInput = socket; + this.playerTracker = 2; + }); + } + if(this.playerTracker === 2) { + players.in(`player2`).emit('input-request') + players.in('player2').on('input', (socket) => { + this.currentInput = socket; + this.playerTracker = 1; + }); + } + }, + + joinGame: (socket) => { if (this.players === 0 && this.isThereTwoPlayers === false) { this.player1 = { username: socket.username, }; this.players++; console.log('Player One joined: ', this.player1.username); - players.join(`player${this.player1.username}`); - players.emit('joined-player1', this.player1.username); + players.join(`player${this.players}`); + players.emit('player1-joined', this.player1.username); } else if (this.players === 1 && this.isThereTwoPlayers === false) { this.player2 = { @@ -27,8 +46,10 @@ const Game = { this.players++; console.log('Player Two joined: ', this.player2.username); players.join(`player${this.player1.username}`); - players.emit('joined-player2', this.player2.username); - console.log('Awaiting game start from client(s)...'); + this.isThereTwoPlayers = true; + players.emit('player2-joined', this.player2.username); + io.emit('ready-to-play', 'Game ready to begin!'); + // At this point waiting to hear 'play' emit from two clients } else if (this.isThereTwoPlayers === true) { this.spectators.push(JSON.stringify(socket.req.data).username.toString()); @@ -37,16 +58,16 @@ const Game = { } }, - gameStuffHappens: (players) => { - console.log('playing the game... player two wins!'); - players[0].didIWin = true; - players[1].didIWin = false; + applyInput: (input) => { + // The parameter is the input from the current player client. Use this as the inputs for the game. + let allInputs; + allInputs.push(input); }, // Takes the player1 and player2 objects in an array // Determines and notifies winner and loser, and posts stats to API server - determineWinner: (players) => { - players.forEach((player) => { + determineWinner: (bothPlayers) => { + bothPlayers.forEach((player) => { if(player.didIWin === true) { console.log(`${player.username} won, storing results...`); superagent.post(`${process.env.API_URL}/singlestat`) From edaa1c692768c387fbe350fc1893340f90c5fc1a Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 14:41:14 -0800 Subject: [PATCH 34/64] standardized client inputs for the game engine --- scratch/sockets.js | 16 ++++++++++++++-- src/app.js | 8 ++++---- src/lib/game-engine.js | 36 +++++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/scratch/sockets.js b/scratch/sockets.js index c76539b..590609a 100644 --- a/scratch/sockets.js +++ b/scratch/sockets.js @@ -15,6 +15,8 @@ socket.on('connected', (socket) => { socket.password = 'ppassword'; socket.email = 'email'; + ///////////////// SIGNIN / SIGNUP //////////////////// + socket.emit('sign-in', socket); socket.on('signing-in', 'User found, signing in...'); @@ -24,6 +26,8 @@ socket.on('connected', (socket) => { socket.emit('sign-up-confirmed'); }); + ///////////////// JOINING A GAME //////////////////// + // These next two code blocks should function identiacally, separated for new or returning users socket.on('signed-in-newuser', `Account created for ${socket.username} and signed in!`, () => { // Get input to start/join a game @@ -42,13 +46,19 @@ socket.on('connected', (socket) => { players.emit('play'); }); + ///////////////// PLAYING A GAME //////////////////// + players.on('input-request', () => { - // Server is only listening for one player's input, even if both end some + // Server is only listening for the current player's input, even if both send something + // Client is propted to type something and hit enter socket.input = 'input'; - // emits 'input' event with input attached after pressing enter + // should emit 'input' event with input attached after pressing enter players.emit('input', socket.input); }); + ///////////////// OTHER FUNCTIONS //////////////////// + + // Gets a player's stats. Currently need to be a player in a game to access players.emit('get-stats', socket.username, () => { players.on('stats', (stats) => { console.log(stats); @@ -65,6 +75,8 @@ socket.on('connected', (socket) => { // spectators leaving the game spectators.emit('leave-game', socket.username); + + // Ending the game socket.on('end', () => { // At this point all game session data is cleared and communication with the server ceases until a new 'start' emit // Use this to shut down the client or start a new game diff --git a/src/app.js b/src/app.js index 7ca7a6d..05bfb40 100644 --- a/src/app.js +++ b/src/app.js @@ -81,7 +81,6 @@ io.sockets.on('connection', (socket) => { // Runs game related functions from game-engine.js // wait for both players before starting let playCount = 0; - let gameover = false; players.on('play', () => { playCount++; while (playCount < 2) { @@ -93,8 +92,9 @@ io.sockets.on('connection', (socket) => { // Input is an array of two player objects let bothPlayerObjs = [Game.player1, Game.player2]; Game.playerTracker = 1; - while(gameover !== true) { - Game.getInput(); + // This loop runs until the game is completed or the players quit + while(Game.gameover !== true) { + Game.getClientInput(); Game.applyInput(Game.currentInput); } // Function for dealing with a completed game @@ -124,7 +124,7 @@ io.sockets.on('connection', (socket) => { socket.spectators = [Game.spectators]; }); spectators.on('leave-game', (socket) => { - + // TODO }); }); diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 3c0b30e..ca5f5b0 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -4,6 +4,7 @@ import superagent from 'superagent'; const Game = { + gameover: false, isThereTwoPlayers: false, players: 0, player1: {}, @@ -11,24 +12,33 @@ const Game = { spectators: [], playerTracker: 0, currentInput: '', + inputLog: [], + testGame: 0, - getInput: () => { + getClientInput: () => { if(this.playerTracker === 1) { players.in(`player1`).emit('input-request'); players.in('player1').on('input', (socket) => { - this.currentInput = socket; + this.currentInput = socket.toString(); this.playerTracker = 2; }); } if(this.playerTracker === 2) { players.in(`player2`).emit('input-request') players.in('player2').on('input', (socket) => { - this.currentInput = socket; + this.currentInput = socket.toString(); this.playerTracker = 1; }); } }, + applyInput: (input) => { + // The parameter is the input from the current player client. Use this as the inputs for the game. + this.inputLog.push(input); + this.__game(input); + }, + + // The first to join is player1, the next is player2, all others after that are spectators joinGame: (socket) => { if (this.players === 0 && this.isThereTwoPlayers === false) { this.player1 = { @@ -57,12 +67,6 @@ const Game = { spectators.emit('spectate', this.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. } }, - - applyInput: (input) => { - // The parameter is the input from the current player client. Use this as the inputs for the game. - let allInputs; - allInputs.push(input); - }, // Takes the player1 and player2 objects in an array // Determines and notifies winner and loser, and posts stats to API server @@ -120,6 +124,20 @@ const Game = { this.player2 = {}; this.spectators = []; }, + + /////////////////////// GAME LOGIC /////////////////// + __game: (input) => { + // Actual game logic goes here + // If we're lucky it can be easily modularized to other files + // All this is test stuff + console.log('playing the game...'); + this.testGame++; + if(this.testGame === 2) { + this.player1.didIWin = false; + this.player2.didIWin = true; + this.gameover = true; + } + }, }; module.exports = Game; \ No newline at end of file From 67dc74209113bbe7f7cfeefa99cb039957ba1a32 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 16:43:19 -0800 Subject: [PATCH 35/64] push for heroku --- scratch/sockets.js | 12 +++++++----- src/app.js | 6 +++--- src/lib/game-engine.js | 3 --- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scratch/sockets.js b/scratch/sockets.js index 590609a..f74678f 100644 --- a/scratch/sockets.js +++ b/scratch/sockets.js @@ -11,13 +11,15 @@ socket.emit('start'); socket.on('connected', (socket) => { // get input, create object with username, email, and password field - socket.username = 'username'; - socket.password = 'ppassword'; - socket.email = 'email'; + let user = { + username: 'username', + password: 'password', + email: 'email', + }; ///////////////// SIGNIN / SIGNUP //////////////////// - socket.emit('sign-in', socket); + socket.emit('sign-in', user); socket.on('signing-in', 'User found, signing in...'); @@ -28,7 +30,7 @@ socket.on('connected', (socket) => { ///////////////// JOINING A GAME //////////////////// - // These next two code blocks should function identiacally, separated for new or returning users + // These next two code blocks should function identically, it's separated for new or returning users socket.on('signed-in-newuser', `Account created for ${socket.username} and signed in!`, () => { // Get input to start/join a game socket.emit('join', socket); diff --git a/src/app.js b/src/app.js index 05bfb40..bcad2d9 100644 --- a/src/app.js +++ b/src/app.js @@ -23,7 +23,7 @@ io.sockets.on('connection', (socket) => { socket.emit('connected', `Player ID ${socket.id} connected`); }); - // when someone disconnects6s6s + // when someone disconnects socket.on('disconnect', () => { socket.removeAllListeners(); console.log(`${socket.username} has left the game`); @@ -34,7 +34,7 @@ io.sockets.on('connection', (socket) => { let user = `'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}, 'email' : ${socket.email.toString()}}`; superagent.get(`${process.env.API_URL}/playerstats/${user.username}`) .then(results => { - if (!results.name) { + if (results.length === 0) { socket.emit('confirm-sign-up'); socket.on('sign-up-confirmed', () => { superagent.post(`${process.env.API_URL}/signup`) @@ -43,7 +43,7 @@ io.sockets.on('connection', (socket) => { .then(data => { user.auth = data.req.headers.auth; socket.emit('signed-in-newuser', user.username); - console.log(`${socket.username} has signed up and signed in`); + console.log(`${user.username} has signed up and signed in`); }) .catch(error => { if (error) { diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index ca5f5b0..ce5cbd8 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -1,8 +1,5 @@ 'use strict'; -import superagent from 'superagent'; - - const Game = { gameover: false, isThereTwoPlayers: false, From a203eec6d484ec7a854ccc92e635905b341a102f Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:17:35 -0800 Subject: [PATCH 36/64] refactor with client team --- index.js | 2 +- scratch/package-lock.json | 337 ++++++++++++++++++++++++++++++++++++++ scratch/package.json | 15 ++ scratch/sockets.js | 149 +++++++++-------- src/app.js | 54 +++--- src/lib/game-engine.js | 9 +- 6 files changed, 468 insertions(+), 98 deletions(-) create mode 100644 scratch/package-lock.json create mode 100644 scratch/package.json diff --git a/index.js b/index.js index 649bd57..334c31d 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,4 @@ require('dotenv').config(); const start = require('./src/app.js'); // PORT defined in .env file -start(4040); \ No newline at end of file +start(process.env.PORT); \ No newline at end of file diff --git a/scratch/package-lock.json b/scratch/package-lock.json new file mode 100644 index 0000000..38bcc24 --- /dev/null +++ b/scratch/package-lock.json @@ -0,0 +1,337 @@ +{ + "name": "scratch", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "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" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "engine.io-client": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz", + "integrity": "sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "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", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "~1.37.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "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" + } + }, + "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" + } + }, + "qs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", + "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==" + }, + "readable-stream": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "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", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + } + }, + "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==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "superagent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-4.0.0.tgz", + "integrity": "sha512-qaGDf+QUYxgMYdJBWCezHnc3UjrCUwxm5bCfxBhTXI5BbCluVzmVNYzxvCw1jP9PXmwUZeOW2yPpGm9fLbhtFg==", + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.2", + "debug": "^4.0.0", + "form-data": "^2.3.2", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^2.0.3", + "qs": "^6.5.1", + "readable-stream": "^3.0.3" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "ws": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/scratch/package.json b/scratch/package.json new file mode 100644 index 0000000..5cc35a5 --- /dev/null +++ b/scratch/package.json @@ -0,0 +1,15 @@ +{ + "name": "scratch", + "version": "1.0.0", + "description": "", + "main": "sockets.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "socket.io-client": "^2.2.0", + "superagent": "^4.0.0" + } +} diff --git a/scratch/sockets.js b/scratch/sockets.js index f74678f..572d2a3 100644 --- a/scratch/sockets.js +++ b/scratch/sockets.js @@ -1,86 +1,101 @@ 'use strict'; const io = require('socket.io-client'); -const socket = io.connect('https://enseven-game-engine.herokuapp.com'); -const players = socket('/players'); -const spectators = socket('/spectators'); +const socket = io('http://localhost:3000'); +socket.sockets.on('connection', (socket) => { + socket.on('connected', (socket) => { + socket.username = 'username'; + socket.password = 'password'; + socket.email = 'email@email.com'; + socket.emit('sign-in', socket); + }); +}); -socket.emit('start'); - -socket.on('connected', (socket) => { - // get input, create object with username, email, and password field - let user = { - username: 'username', - password: 'password', - email: 'email', - }; - ///////////////// SIGNIN / SIGNUP //////////////////// - socket.emit('sign-in', user); - socket.on('signing-in', 'User found, signing in...'); - socket.on('confirm-sign-up', 'User not found. Create account?', () => { - // Just needs to press enter or something to trigger - socket.emit('sign-up-confirmed'); - }); - ///////////////// JOINING A GAME //////////////////// - // These next two code blocks should function identically, it's separated for new or returning users - socket.on('signed-in-newuser', `Account created for ${socket.username} and signed in!`, () => { - // Get input to start/join a game - socket.emit('join', socket); - }); - socket.on('signed-in', `Welcome back, ${socket.username}!`, () => { - // Get input to start/join a game - socket.emit('join', socket); - }); - - players.in(`player1`).on(`player1-joined`, `${socket.username} has joined as player one`); - players.in('player2').on('player2-joined', `${socket.username} has joined as player two`); - - socket.on('ready-to-play', (socket) => { - // 'ready-to-play' is sent to all sockets, server waits to hear back from both players that they're ready - players.emit('play'); - }); - ///////////////// PLAYING A GAME //////////////////// - players.on('input-request', () => { - // Server is only listening for the current player's input, even if both send something - // Client is propted to type something and hit enter - socket.input = 'input'; - // should emit 'input' event with input attached after pressing enter - players.emit('input', socket.input); - }); - ///////////////// OTHER FUNCTIONS //////////////////// - // Gets a player's stats. Currently need to be a player in a game to access - players.emit('get-stats', socket.username, () => { - players.on('stats', (stats) => { - console.log(stats); - }); - }); - // This would trigger when 1 client tries to quit a game - players.emit('quit-game', () => { - players.on('confirm-quit', () => { - // Sends 'confirm-quit' event to both players and waits to hear two 'quit-confirmed' events before proceeding - players.emit('quit-confirmed'); - }); - }); - // spectators leaving the game - spectators.emit('leave-game', socket.username); - // Ending the game - socket.on('end', () => { - // At this point all game session data is cleared and communication with the server ceases until a new 'start' emit - // Use this to shut down the client or start a new game - }); -}); \ No newline at end of file +// socket.on('connected', (user) => { +// // console.log('socket:', socket); +// // get input, create object with username, email, and password field + +// ///////////////// SIGNIN / SIGNUP //////////////////// + +// user.emit('sign-in', user); + +// socket.on('signing-in', 'User found, signing in...'); + +// socket.on('confirm-sign-up', 'User not found. Create account?', () => { +// // Just needs to press enter or something to trigger +// console.log('signing up'); +// socket.emit('sign-up-confirmed'); +// }); + +// ///////////////// JOINING A GAME //////////////////// + +// // These next two code blocks should function identically, it's separated for new or returning users +// socket.on('signed-in-newuser', `Account created for ${socket.username} and signed in!`, () => { +// // Get input to start/join a game +// socket.emit('join', socket); +// }); +// socket.on('signed-in', `Welcome back, ${socket.username}!`, () => { +// // Get input to start/join a game +// socket.emit('join', socket); +// }); + +// players.on(`player1-joined`, `${socket.username} has joined as player one`); +// players.on('player2-joined', `${socket.username} has joined as player two`); +// console.log('1'); +// socket.on('ready-to-play', (socket) => { +// // 'ready-to-play' is sent to all sockets, server waits to hear back from both players that they're ready +// players.emit('play'); +// console.log('2'); +// }); + +// ///////////////// PLAYING A GAME //////////////////// + +// players.on('input-request', () => { +// // Server is only listening for the current player's input, even if both send something +// // Client is propted to type something and hit enter +// socket.input = 'input'; +// // should emit 'input' event with input attached after pressing enter +// players.emit('input', socket.input); +// }); + +// ///////////////// OTHER FUNCTIONS //////////////////// + +// // Gets a player's stats. Currently need to be a player in a game to access +// players.emit('get-stats', socket.username, () => { +// players.on('stats', (stats) => { +// console.log(stats); +// }); +// }); + +// // This would trigger when 1 client tries to quit a game +// players.emit('quit-game', () => { +// players.on('confirm-quit', () => { +// // Sends 'confirm-quit' event to both players and waits to hear two 'quit-confirmed' events before proceeding +// players.emit('quit-confirmed'); +// }); +// }); + +// // spectators leaving the game +// spectators.emit('leave-game', socket.username); + +// // Ending the game +// socket.on('end', () => { +// // At this point all game session data is cleared and communication with the server ceases until a new 'start' emit +// // Use this to shut down the client or start a new game +// }); +// }); \ No newline at end of file diff --git a/src/app.js b/src/app.js index bcad2d9..9591cad 100644 --- a/src/app.js +++ b/src/app.js @@ -15,12 +15,11 @@ let socketConnections = []; // This function holds all emitters and listeners for Socket.IO io.sockets.on('connection', (socket) => { - - socketConnections.push(socket); - - // when someone connects - socket.on('start', () => { - socket.emit('connected', `Player ID ${socket.id} connected`); + console.log(socket).id; + socket.on('start', (socket) => { + socketConnections.push(socket.id); + console.log(socketConnections); + socket.emit('connected', socket); }); // when someone disconnects @@ -30,20 +29,19 @@ io.sockets.on('connection', (socket) => { }); // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} - socket.on('sign-in', (socket) => { - let user = `'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}, 'email' : ${socket.email.toString()}}`; - superagent.get(`${process.env.API_URL}/playerstats/${user.username}`) + socket.on('sign-in', (userObj) => { + superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) .then(results => { if (results.length === 0) { - socket.emit('confirm-sign-up'); + socket.emit('confirm-sign-up', 'User not found. Create new account?'); socket.on('sign-up-confirmed', () => { superagent.post(`${process.env.API_URL}/signup`) - .send(user) + .send(userObj) .set('Content-Type', 'application/json') .then(data => { - user.auth = data.req.headers.auth; - socket.emit('signed-in-newuser', user.username); - console.log(`${user.username} has signed up and signed in`); + userObj.auth = data.req.headers.auth; + socket.emit('signed-in-newuser', socket.username); + console.log(`${socket.username} has signed up and signed in`); }) .catch(error => { if (error) { @@ -55,7 +53,7 @@ io.sockets.on('connection', (socket) => { else { socket.emit('signing-in'); superagent.post(`${process.env.API_URL}/signin`) - // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) + .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) .set('Content-Type', 'application/json') .then(data => { socket.auth = data.req.headers.auth; @@ -71,11 +69,14 @@ io.sockets.on('connection', (socket) => { }) .catch(err => console.log(err)); }); + + + // After a client signs in, joins a new game. Waits for two clients before starting the game // Expected input: (String) 'username' - socket.on('join', (socket) => { - Game.joinGame(socket); + socket.on('join', (username) => { + Game.joinGame(username); }); // Runs game related functions from game-engine.js @@ -115,20 +116,23 @@ io.sockets.on('connection', (socket) => { .catch(err => console.log(err)); }); }); + // Listens for quit event from either client during play. Will confirm the quit with both players players.on('quit-game', () => { Game.quit(); + players.emit('end'); }); - spectators.broadcast.emit('watch-broadcast', (socket) => { // Not focusing on this now, still need to figure out what to pass through - socket.players = [Game.player1.username, Game.player2.username]; - socket.spectators = [Game.spectators]; - }); - spectators.on('leave-game', (socket) => { - // TODO - }); +// spectators.broadcast.emit('watch-broadcast', (socket) => { +// Not focusing on this now, still need to figure out what to pass through +// socket.players = [Game.player1.username, Game.player2.username]; +// socket.spectators = [Game.spectators]; +// }); +// spectators.on('leave-game', (socket) => { +// // TODO +// }); +// }); }); - // --- EXPORTS ----------------------------------- const start = (port) => { diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index ce5cbd8..59cf9fc 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -39,7 +39,7 @@ const Game = { joinGame: (socket) => { if (this.players === 0 && this.isThereTwoPlayers === false) { this.player1 = { - username: socket.username, + username: socket, }; this.players++; console.log('Player One joined: ', this.player1.username); @@ -48,7 +48,7 @@ const Game = { } else if (this.players === 1 && this.isThereTwoPlayers === false) { this.player2 = { - username: socket.username, + username: socket, }; this.players++; console.log('Player Two joined: ', this.player2.username); @@ -87,7 +87,7 @@ const Game = { .then(() => { console.log(`Results saved for ${player.username}`); player.didIWin = undefined; - players.in(`player${player.username}`).emit('won'); + players.in(`player${player.username}`).emit('lost'); }) .catch(err => console.log(err)); } @@ -95,14 +95,13 @@ const Game = { console.log('Something went wrong determining the winner'); } }); - io.emit('gameover'); }, quit: () => { // get both players to send quit events let quitCount = 0; players.emit('confirm-quit'); - players.on('confirmed-quit', () => { + players.on('quit-confirmed', () => { quitCount++; }); while(quitCount === 2) { From 07cbf114bd4faf8e189304cfeb430aa57058a26d Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:19:13 -0800 Subject: [PATCH 37/64] refactor with client team --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 9591cad..fe35e3f 100644 --- a/src/app.js +++ b/src/app.js @@ -53,7 +53,7 @@ io.sockets.on('connection', (socket) => { else { socket.emit('signing-in'); superagent.post(`${process.env.API_URL}/signin`) - .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) + .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) .set('Content-Type', 'application/json') .then(data => { socket.auth = data.req.headers.auth; From 9e1c8ec298a1e719c7784339faa830bfa686b2fb Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:23:08 -0800 Subject: [PATCH 38/64] fix socket.io listener --- src/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app.js b/src/app.js index fe35e3f..a739ed3 100644 --- a/src/app.js +++ b/src/app.js @@ -10,6 +10,7 @@ const io = require('socket.io')(ioserver); const players = io.of('/players'); const spectators = io.of('spectators'); let socketConnections = []; +ioserver.listen(process.env.PORT); // --- SOCKET IO --------------------------------- From 5c916bcfd33e138cc71c2b487b4abf139245aa9a Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:33:29 -0800 Subject: [PATCH 39/64] work on sockets --- src/app.js | 57 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/app.js b/src/app.js index a739ed3..ef5aa34 100644 --- a/src/app.js +++ b/src/app.js @@ -16,11 +16,10 @@ ioserver.listen(process.env.PORT); // This function holds all emitters and listeners for Socket.IO io.sockets.on('connection', (socket) => { - console.log(socket).id; - socket.on('start', (socket) => { - socketConnections.push(socket.id); - console.log(socketConnections); - socket.emit('connected', socket); + socketConnections.push(socket.id); + console.log(socketConnections); + socket.on('start', () => { + socket.emit('connected'); }); // when someone disconnects @@ -31,9 +30,9 @@ io.sockets.on('connection', (socket) => { // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} socket.on('sign-in', (userObj) => { - superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) - .then(results => { - if (results.length === 0) { + // superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) + // .then(results => { + // if (results.length === 0) { socket.emit('confirm-sign-up', 'User not found. Create new account?'); socket.on('sign-up-confirmed', () => { superagent.post(`${process.env.API_URL}/signup`) @@ -48,28 +47,28 @@ io.sockets.on('connection', (socket) => { if (error) { console.log('Error signing in'); } - }); - }); - } - else { - socket.emit('signing-in'); - superagent.post(`${process.env.API_URL}/signin`) - .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) - .set('Content-Type', 'application/json') - .then(data => { - socket.auth = data.req.headers.auth; - socket.emit('signed-in', socket.username); - console.log(`Returning user ${socket.username} has signed in`); - }) - .catch(error => { - if (error) { - console.log('Error signing in'); - } - }); + // }); + // }); } - }) - .catch(err => console.log(err)); - }); + // else { + // socket.emit('signing-in'); + // superagent.post(`${process.env.API_URL}/signin`) + // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) + // .set('Content-Type', 'application/json') + // .then(data => { + // socket.auth = data.req.headers.auth; + // socket.emit('signed-in', socket.username); + // console.log(`Returning user ${socket.username} has signed in`); + // }) + // .catch(error => { + // if (error) { + // console.log('Error signing in'); + // } + // }); + // } + // }) + // .catch(err => console.log(err)); + // }); From 98ba853d776cbd954d01f4ce31f677f375323425 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:37:11 -0800 Subject: [PATCH 40/64] work on sockets --- src/app.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/app.js b/src/app.js index ef5aa34..f50648f 100644 --- a/src/app.js +++ b/src/app.js @@ -33,23 +33,23 @@ io.sockets.on('connection', (socket) => { // superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) // .then(results => { // if (results.length === 0) { - socket.emit('confirm-sign-up', 'User not found. Create new account?'); - socket.on('sign-up-confirmed', () => { - superagent.post(`${process.env.API_URL}/signup`) - .send(userObj) - .set('Content-Type', 'application/json') - .then(data => { - userObj.auth = data.req.headers.auth; - socket.emit('signed-in-newuser', socket.username); - console.log(`${socket.username} has signed up and signed in`); - }) - .catch(error => { - if (error) { - console.log('Error signing in'); - } - // }); - // }); - } + socket.emit('confirm-sign-up', 'User not found. Create new account?'); + socket.on('sign-up-confirmed', () => { + superagent.post(`${process.env.API_URL}/signup`) + .send(userObj) + .set('Content-Type', 'application/json') + .then(data => { + userObj.auth = data.req.headers.auth; + socket.emit('signed-in-newuser', socket.username); + console.log(`${socket.username} has signed up and signed in`); + }) + .catch(error => { + if (error) { + console.log('Error signing in'); + } + }); + }); + }); // else { // socket.emit('signing-in'); // superagent.post(`${process.env.API_URL}/signin`) From 419158abc9e7a6c0b23679baa043ecd643f17003 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:41:46 -0800 Subject: [PATCH 41/64] work on sockets --- src/app.js | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/app.js b/src/app.js index f50648f..86fa29a 100644 --- a/src/app.js +++ b/src/app.js @@ -29,27 +29,26 @@ io.sockets.on('connection', (socket) => { }); // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} + // socket.on('sign-in', (userObj) => { + // superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) + // .then(results => { + // if (results.length === 0) { socket.on('sign-in', (userObj) => { - // superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) - // .then(results => { - // if (results.length === 0) { - socket.emit('confirm-sign-up', 'User not found. Create new account?'); - socket.on('sign-up-confirmed', () => { - superagent.post(`${process.env.API_URL}/signup`) - .send(userObj) - .set('Content-Type', 'application/json') - .then(data => { - userObj.auth = data.req.headers.auth; - socket.emit('signed-in-newuser', socket.username); - console.log(`${socket.username} has signed up and signed in`); - }) - .catch(error => { - if (error) { - console.log('Error signing in'); - } - }); - }); + superagent.post(`${process.env.API_URL}/signup`) + .send(userObj) + .set('Content-Type', 'application/json') + .then(data => { + userObj.auth = data.req.headers.auth; + socket.emit('signed-in-newuser', socket.username); + console.log(`${socket.username} has signed up and signed in`); + }) + .catch(error => { + if (error) { + console.log('Error signing in'); + } + }); }); + // }); // else { // socket.emit('signing-in'); // superagent.post(`${process.env.API_URL}/signin`) From 195dd8c9a857956b06a9a2ffdec5c34bacf249c2 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:44:34 -0800 Subject: [PATCH 42/64] work on sockets --- src/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index 86fa29a..53c3062 100644 --- a/src/app.js +++ b/src/app.js @@ -35,7 +35,7 @@ io.sockets.on('connection', (socket) => { // if (results.length === 0) { socket.on('sign-in', (userObj) => { superagent.post(`${process.env.API_URL}/signup`) - .send(userObj) + .send(JSON.stringify(userObj)) .set('Content-Type', 'application/json') .then(data => { userObj.auth = data.req.headers.auth; @@ -44,7 +44,7 @@ io.sockets.on('connection', (socket) => { }) .catch(error => { if (error) { - console.log('Error signing in'); + console.log('Error signing in', error); } }); }); From 0eb66c47f0fb59137c884bb7eb7af7fff1003439 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:47:30 -0800 Subject: [PATCH 43/64] working on sockets --- src/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app.js b/src/app.js index 53c3062..44200fe 100644 --- a/src/app.js +++ b/src/app.js @@ -38,7 +38,7 @@ io.sockets.on('connection', (socket) => { .send(JSON.stringify(userObj)) .set('Content-Type', 'application/json') .then(data => { - userObj.auth = data.req.headers.auth; + userObj.auth = data.text; socket.emit('signed-in-newuser', socket.username); console.log(`${socket.username} has signed up and signed in`); }) From 93df32b3df6ad8b0f39ecd49662913c52ee5a975 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 20:52:17 -0800 Subject: [PATCH 44/64] work on sockets --- src/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app.js b/src/app.js index 44200fe..30313d8 100644 --- a/src/app.js +++ b/src/app.js @@ -39,8 +39,8 @@ io.sockets.on('connection', (socket) => { .set('Content-Type', 'application/json') .then(data => { userObj.auth = data.text; - socket.emit('signed-in-newuser', socket.username); - console.log(`${socket.username} has signed up and signed in`); + socket.emit('signed-in-newuser', userObj.username); + console.log(`${userObj.username} has signed up and signed in`); }) .catch(error => { if (error) { From 2bd617408edeecf39cfc356730997306f16964ec Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 21:05:23 -0800 Subject: [PATCH 45/64] working on sockets --- src/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app.js b/src/app.js index 30313d8..d1f2fba 100644 --- a/src/app.js +++ b/src/app.js @@ -75,6 +75,7 @@ io.sockets.on('connection', (socket) => { // After a client signs in, joins a new game. Waits for two clients before starting the game // Expected input: (String) 'username' socket.on('join', (username) => { + console.log(username, ' joined'); Game.joinGame(username); }); From 07e07ad000d3e64c351041025f83f71efb174cdc Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 21:16:25 -0800 Subject: [PATCH 46/64] working on sockets --- src/lib/game-engine.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 59cf9fc..3cd9b1c 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -37,6 +37,7 @@ const Game = { // The first to join is player1, the next is player2, all others after that are spectators joinGame: (socket) => { + console.log('testing'); if (this.players === 0 && this.isThereTwoPlayers === false) { this.player1 = { username: socket, From 51c656686a37551cc2ec7d9d2e5ea91a96a5dc40 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Mon, 3 Dec 2018 21:47:05 -0800 Subject: [PATCH 47/64] work on sockets --- src/app.js | 3 +- src/lib/game-engine.js | 83 +++++++++++++++++++++--------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/app.js b/src/app.js index d1f2fba..7164d06 100644 --- a/src/app.js +++ b/src/app.js @@ -10,7 +10,7 @@ const io = require('socket.io')(ioserver); const players = io.of('/players'); const spectators = io.of('spectators'); let socketConnections = []; -ioserver.listen(process.env.PORT); +// ioserver.listen(8080); // --- SOCKET IO --------------------------------- @@ -77,6 +77,7 @@ io.sockets.on('connection', (socket) => { socket.on('join', (username) => { console.log(username, ' joined'); Game.joinGame(username); + socket.emit('player1-joined', username); }); // Runs game related functions from game-engine.js diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 3cd9b1c..b553c97 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -13,56 +13,55 @@ const Game = { testGame: 0, getClientInput: () => { - if(this.playerTracker === 1) { + if(Game.playerTracker === 1) { players.in(`player1`).emit('input-request'); players.in('player1').on('input', (socket) => { - this.currentInput = socket.toString(); - this.playerTracker = 2; + Game.currentInput = socket.toString(); + Game.playerTracker = 2; }); } - if(this.playerTracker === 2) { + if(Game.playerTracker === 2) { players.in(`player2`).emit('input-request') players.in('player2').on('input', (socket) => { - this.currentInput = socket.toString(); - this.playerTracker = 1; + Game.currentInput = socket.toString(); + Game.playerTracker = 1; }); } }, applyInput: (input) => { // The parameter is the input from the current player client. Use this as the inputs for the game. - this.inputLog.push(input); - this.__game(input); + Game.inputLog.push(input); + Game.__game(input); }, // The first to join is player1, the next is player2, all others after that are spectators joinGame: (socket) => { - console.log('testing'); - if (this.players === 0 && this.isThereTwoPlayers === false) { - this.player1 = { + console.log('testing', Game.players); + if (Game.players === 0 && Game.isThereTwoPlayers === false) { + Game.player1 = { username: socket, }; - this.players++; - console.log('Player One joined: ', this.player1.username); - players.join(`player${this.players}`); - players.emit('player1-joined', this.player1.username); + Game.players++; + console.log('Player One joined: ', Game.player1.username); + // socket.join(`player${Game.players}`); } - else if (this.players === 1 && this.isThereTwoPlayers === false) { - this.player2 = { + else if (Game.players === 1 && Game.isThereTwoPlayers === false) { + Game.player2 = { username: socket, }; - this.players++; - console.log('Player Two joined: ', this.player2.username); - players.join(`player${this.player1.username}`); - this.isThereTwoPlayers = true; - players.emit('player2-joined', this.player2.username); - io.emit('ready-to-play', 'Game ready to begin!'); + Game.players++; + console.log('Player Two joined: ', Game.player2.username); + // socket.join(`player${Game.player1.username}`); + Game.isThereTwoPlayers = true; + socket.emit('player2-joined', Game.player2.username); + // io.emit('ready-to-play', 'Game ready to begin!'); // At this point waiting to hear 'play' emit from two clients } - else if (this.isThereTwoPlayers === true) { - this.spectators.push(JSON.stringify(socket.req.data).username.toString()); - console.log('spectators: ', this.spectators); - spectators.emit('spectate', this.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. + else if (Game.isThereTwoPlayers === true) { + Game.spectators.push(JSON.stringify(socket.req.data).username.toString()); + console.log('spectators: ', Game.spectators); + spectators.emit('spectate', Game.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. } }, @@ -77,7 +76,7 @@ const Game = { .then(() => { console.log(`Results saved for ${player.username}`); player.didIWin = undefined; - players.in(`player${player.username}`).emit('won'); + socket.in(`player${player.username}`).emit('won'); }) .catch(err => console.log(err)); } @@ -88,7 +87,7 @@ const Game = { .then(() => { console.log(`Results saved for ${player.username}`); player.didIWin = undefined; - players.in(`player${player.username}`).emit('lost'); + socket.in(`player${player.username}`).emit('lost'); }) .catch(err => console.log(err)); } @@ -101,12 +100,12 @@ const Game = { quit: () => { // get both players to send quit events let quitCount = 0; - players.emit('confirm-quit'); - players.on('quit-confirmed', () => { + socket.emit('confirm-quit'); + socket.on('quit-confirmed', () => { quitCount++; }); while(quitCount === 2) { - this.endSession(); + Game.endSession(); io.emit('end'); io.removeAllListeners(); quitCount = 0; @@ -115,11 +114,11 @@ const Game = { endSession: () => { // Dump all session data - this.isThereTwoPlayers = false; - this.players = 0; - this.player1 = {}; - this.player2 = {}; - this.spectators = []; + Game.isThereTwoPlayers = false; + Game.players = 0; + Game.player1 = {}; + Game.player2 = {}; + Game.spectators = []; }, /////////////////////// GAME LOGIC /////////////////// @@ -128,11 +127,11 @@ const Game = { // If we're lucky it can be easily modularized to other files // All this is test stuff console.log('playing the game...'); - this.testGame++; - if(this.testGame === 2) { - this.player1.didIWin = false; - this.player2.didIWin = true; - this.gameover = true; + Game.testGame++; + if(Game.testGame === 2) { + Game.player1.didIWin = false; + Game.player2.didIWin = true; + Game.gameover = true; } }, }; From df66d870103865356a00247b9b0b4bbc42278f7d Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Tue, 4 Dec 2018 20:07:39 -0800 Subject: [PATCH 48/64] work on sockets, works through the end of the game and determining winner now --- package.json | 2 +- src/app.js | 173 ++++++++++++++++++++++++++++++----------- src/lib/game-engine.js | 48 ++---------- 3 files changed, 133 insertions(+), 90 deletions(-) diff --git a/package.json b/package.json index 0fe167c..0176391 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test": "jest --verbose --coverage", - "start": "node ./src/app.js" + "start": "node index.js" }, "repository": { "type": "git", diff --git a/src/app.js b/src/app.js index 7164d06..036350f 100644 --- a/src/app.js +++ b/src/app.js @@ -11,6 +11,7 @@ const players = io.of('/players'); const spectators = io.of('spectators'); let socketConnections = []; // ioserver.listen(8080); +let playCount = 0; // --- SOCKET IO --------------------------------- @@ -30,26 +31,21 @@ io.sockets.on('connection', (socket) => { // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} // socket.on('sign-in', (userObj) => { - // superagent.get(`${process.env.API_URL}/playerstats/${userObj.username}`) - // .then(results => { - // if (results.length === 0) { - socket.on('sign-in', (userObj) => { - superagent.post(`${process.env.API_URL}/signup`) - .send(JSON.stringify(userObj)) - .set('Content-Type', 'application/json') - .then(data => { - userObj.auth = data.text; - socket.emit('signed-in-newuser', userObj.username); - console.log(`${userObj.username} has signed up and signed in`); - }) - .catch(error => { - if (error) { - console.log('Error signing in', error); - } - }); - }); - // }); - // else { + + + // superagent.post(`${process.env.API_URL}/signup`) + // .send(JSON.stringify(userObj)) + // .set('Content-Type', 'application/json') + // .then(data => { + // userObj.auth = data.text; + // socket.emit('signed-in-newuser', userObj.username); + // console.log(`${userObj.username} has signed up and signed in`); + // }) + // .catch(error => { + // if (error) { + // console.log('Error signing in', error); + // } + // socket.emit('signing-in'); // superagent.post(`${process.env.API_URL}/signin`) // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) @@ -70,41 +66,80 @@ io.sockets.on('connection', (socket) => { // }); - + socket.on('sign-up', (userObj) => { + superagent.post(`${process.env.API_URL}/signup`) + .send(JSON.stringify(userObj)) + .set('Content-Type', 'application/json') + .then(data => { + userObj.auth = data.text; + socket.emit('signed-in-newuser', userObj.username); + console.log(`${userObj.username} has signed up and signed in`); + }); + }); // After a client signs in, joins a new game. Waits for two clients before starting the game // Expected input: (String) 'username' - socket.on('join', (username) => { - console.log(username, ' joined'); - Game.joinGame(username); - socket.emit('player1-joined', username); + socket.on('join', (thisPlayer) => { + console.log(thisPlayer, ' joined'); + if (Game.players === 0 && Game.isThereTwoPlayers === false) { + Game.player1 = { + username: thisPlayer, + }; + Game.players++; + console.log('Player One joined: ', Game.player1.username); + // socket.join(`player${Game.players}`); + socket.join('player1'); + socket.emit('player1-joined', thisPlayer); + } + else if (Game.players === 1 && Game.isThereTwoPlayers === false) { + Game.player2 = { + username: thisPlayer, + }; + Game.players++; + console.log('Player Two joined: ', Game.player2.username); + // socket.join(`player${Game.player1.username}`); + Game.isThereTwoPlayers = true; + socket.join('player2'); + socket.emit('player2-joined', Game.player2.username); + // io.emit('ready-to-play', 'Game ready to begin!'); + // At this point waiting to hear 'play' emit from two clients + } + else if (Game.isThereTwoPlayers === true) { + Game.spectators.push(JSON.stringify(thisPlayer).toString()); + console.log('spectators: ', Game.spectators); + spectators.emit('spectate', Game.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. + } }); // Runs game related functions from game-engine.js // wait for both players before starting - let playCount = 0; - players.on('play', () => { - playCount++; - while (playCount < 2) { - setTimeout(() => { - console.log('Player one ready to start, waiting for player two'); - },5000); - } + socket.on('play', () => { + // console.log('play triggered'); + // playCount++; + // console.log(playCount); + // if (playCount == 2) { console.log('players joined, game starting'); // Input is an array of two player objects let bothPlayerObjs = [Game.player1, Game.player2]; - Game.playerTracker = 1; // This loop runs until the game is completed or the players quit while(Game.gameover !== true) { - Game.getClientInput(); + Game.playerTracker = 1; + __getClientInput(); Game.applyInput(Game.currentInput); + Game.playerTracker = 2; + __getClientInput(); + Game.applyInput(Game.currentInput); + } + bothPlayerObjs.forEach((player) => { + __determineWinner(player); + }); // Function for dealing with a completed game - Game.determineWinner(bothPlayerObjs); // Closing out the game session Game.endSession(); // If spectating makes it in, this should pass in spectators array as a second parameter as well. + + // } }); - socket.on('get-stats', (socket) => { superagent.get(`${process.env.API_URL}/playerstats/${socket}`) .then(results => { @@ -123,17 +158,63 @@ io.sockets.on('connection', (socket) => { Game.quit(); players.emit('end'); }); -// spectators.broadcast.emit('watch-broadcast', (socket) => { -// Not focusing on this now, still need to figure out what to pass through -// socket.players = [Game.player1.username, Game.player2.username]; -// socket.spectators = [Game.spectators]; -// }); -// spectators.on('leave-game', (socket) => { -// // TODO -// }); -// }); + // spectators.broadcast.emit('watch-broadcast', (socket) => { + // Not focusing on this now, still need to figure out what to pass through + // socket.players = [Game.player1.username, Game.player2.username]; + // socket.spectators = [Game.spectators]; + // }); + // spectators.on('leave-game', (socket) => { + // // TODO + // }); + // }); + const __getClientInput = () => { + if(Game.playerTracker === 1) { + console.log('player1\'s turn'); + socket.emit('input-request-p1'); + socket.on('input-p1', (input) => { + console.log('Player 1 input:', input); + Game.currentInput = input.toString(); + }); + } + if(Game.playerTracker === 2) { + console.log('player2\'s turn'); + socket.emit('input-request-p2'); + socket.on('input-p2', (input) => { + console.log('player 2 input:', input); + Game.currentInput = input.toString(); + }); + } + }; + const __determineWinner = (player) => { + if(player.didIWin === true) { + console.log(`${player.username} won, storing results...`); + superagent.post(`${process.env.API_URL}/singlestat`) + .send(JSON.stringify({name: player.username, win: player.didIWin})) + .then(() => { + console.log(`Results saved for ${player.username}`); + socket.in(`${player.username}`).emit('won'); + player.didIWin = undefined; + }) + .catch(err => console.log(err)); + } + else if(player.didIWin === false) { + console.log(`${player.username} lost, storing results...`); + superagent.post(`${process.env.API_URL}/singlestat`) + .send(JSON.stringify({name: player.username, win: player.didIWin})) + .then(() => { + console.log(`Results saved for ${player.username}`); + player.didIWin = undefined; + socket.in(`${player.username}`).emit('lost'); + }) + .catch(err => console.log(err)); + } + else { + console.log('Something went wrong determining the winner'); + } + }; }); + // --- EXPORTS ----------------------------------- const start = (port) => { diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index b553c97..3819638 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -1,5 +1,7 @@ 'use strict'; +const superagent = require('superagent'); + const Game = { gameover: false, isThereTwoPlayers: false, @@ -12,23 +14,6 @@ const Game = { inputLog: [], testGame: 0, - getClientInput: () => { - if(Game.playerTracker === 1) { - players.in(`player1`).emit('input-request'); - players.in('player1').on('input', (socket) => { - Game.currentInput = socket.toString(); - Game.playerTracker = 2; - }); - } - if(Game.playerTracker === 2) { - players.in(`player2`).emit('input-request') - players.in('player2').on('input', (socket) => { - Game.currentInput = socket.toString(); - Game.playerTracker = 1; - }); - } - }, - applyInput: (input) => { // The parameter is the input from the current player client. Use this as the inputs for the game. Game.inputLog.push(input); @@ -45,6 +30,7 @@ const Game = { Game.players++; console.log('Player One joined: ', Game.player1.username); // socket.join(`player${Game.players}`); + socket.emit('player1-joined', username); } else if (Game.players === 1 && Game.isThereTwoPlayers === false) { Game.player2 = { @@ -69,31 +55,7 @@ const Game = { // Determines and notifies winner and loser, and posts stats to API server determineWinner: (bothPlayers) => { bothPlayers.forEach((player) => { - if(player.didIWin === true) { - console.log(`${player.username} won, storing results...`); - superagent.post(`${process.env.API_URL}/singlestat`) - .send(`{'name' : ${player.username}, 'win' : ${player.didIWin}`) - .then(() => { - console.log(`Results saved for ${player.username}`); - player.didIWin = undefined; - socket.in(`player${player.username}`).emit('won'); - }) - .catch(err => console.log(err)); - } - else if(player.didIWin === false) { - console.log(`${player.username} lost, storing results...`); - superagent.post(`${process.env.API_URL}/singlestat`) - .send(`{'name' : ${player.username}, 'win' : ${player.didIWin}`) - .then(() => { - console.log(`Results saved for ${player.username}`); - player.didIWin = undefined; - socket.in(`player${player.username}`).emit('lost'); - }) - .catch(err => console.log(err)); - } - else { - console.log('Something went wrong determining the winner'); - } + }); }, @@ -128,7 +90,7 @@ const Game = { // All this is test stuff console.log('playing the game...'); Game.testGame++; - if(Game.testGame === 2) { + if(Game.testGame === 5) { Game.player1.didIWin = false; Game.player2.didIWin = true; Game.gameover = true; From d17fadcccfc16dc238580b3c8ba2d0c0ce76e047 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Thu, 6 Dec 2018 20:57:12 -0800 Subject: [PATCH 49/64] adding game logic to server --- wordWizard/.eslintignore | 5 + wordWizard/.gitattributes | 4 + wordWizard/.gitignore | 145 +++++ wordWizard/.travis.yml | 8 + wordWizard/README.md | 2 + wordWizard/index.js | 5 + wordWizard/messages.js | 28 + wordWizard/package-lock.json | 828 +++++++++++++++++++++++++++++ wordWizard/package.json | 28 + wordWizard/requirement-path.md | 9 + wordWizard/wizardObject.js | 146 +++++ wordWizard/wordWizard.js | 137 +++++ wordWizard/wordWizardValidation.js | 18 + wordWizard/word_logic/Letter.js | 21 + wordWizard/word_logic/Word.js | 32 ++ wordWizard/word_logic/allWords.js | 50 ++ 16 files changed, 1466 insertions(+) create mode 100644 wordWizard/.eslintignore create mode 100644 wordWizard/.gitattributes create mode 100644 wordWizard/.gitignore create mode 100644 wordWizard/.travis.yml create mode 100644 wordWizard/README.md create mode 100644 wordWizard/index.js create mode 100644 wordWizard/messages.js create mode 100644 wordWizard/package-lock.json create mode 100644 wordWizard/package.json create mode 100644 wordWizard/requirement-path.md create mode 100644 wordWizard/wizardObject.js create mode 100644 wordWizard/wordWizard.js create mode 100644 wordWizard/wordWizardValidation.js create mode 100644 wordWizard/word_logic/Letter.js create mode 100644 wordWizard/word_logic/Word.js create mode 100644 wordWizard/word_logic/allWords.js diff --git a/wordWizard/.eslintignore b/wordWizard/.eslintignore new file mode 100644 index 0000000..05b1cf3 --- /dev/null +++ b/wordWizard/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/coverage/* +**/build/* diff --git a/wordWizard/.gitattributes b/wordWizard/.gitattributes new file mode 100644 index 0000000..a684ca2 --- /dev/null +++ b/wordWizard/.gitattributes @@ -0,0 +1,4 @@ +* text=auto + +# Align with eslint linebreak-style: [ "error", "unix" ] +*.js text eol=lf diff --git a/wordWizard/.gitignore b/wordWizard/.gitignore new file mode 100644 index 0000000..9497282 --- /dev/null +++ b/wordWizard/.gitignore @@ -0,0 +1,145 @@ +# 401 JS +db +.env +temp +build + +# Created by https://www.gitignore.io/api/vim,osx,node,linux,windows +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Vim ### +# swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] +# session +Session.vim +# temporary +.netrwhist +# auto-generated tag files +tags + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.gitignore.io/api/vim,osx,node,linux,windows diff --git a/wordWizard/.travis.yml b/wordWizard/.travis.yml new file mode 100644 index 0000000..1dcbe01 --- /dev/null +++ b/wordWizard/.travis.yml @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "9" + +script: + - npm run lint + - npm test + diff --git a/wordWizard/README.md b/wordWizard/README.md new file mode 100644 index 0000000..feaeef6 --- /dev/null +++ b/wordWizard/README.md @@ -0,0 +1,2 @@ +# wordwizard-test +testing modularization of word wizard diff --git a/wordWizard/index.js b/wordWizard/index.js new file mode 100644 index 0000000..313d675 --- /dev/null +++ b/wordWizard/index.js @@ -0,0 +1,5 @@ +'use strict'; + +const wordWizard = require('./wordWizard.js'); + +wordWizard.main(); \ No newline at end of file diff --git a/wordWizard/messages.js b/wordWizard/messages.js new file mode 100644 index 0000000..7d89220 --- /dev/null +++ b/wordWizard/messages.js @@ -0,0 +1,28 @@ +const static = { + welcomeMessage: '\nWelcome to Word Wizard!', + win: '\nPraise the Word Wizard! You have won!', + loss: 'You have lost! The Word Wizard is displeased...', + replay: 'Foolish mortal! Do you dare to play the Word Wizard again!?', + replayConfirm: '\nGreat! The Word Wizard is conjuring a new word...', + replayDecline:'\nThe Word Wizard is displeased!\n', + whoops: '\nWHOOPS!', + noLetter: ' You did not enter a letter.', + tooManyLetters: ' One letter at a time, friend...', + repeatLetter: ' You already guessed that! Choose another letter.', +}; + +function correctWord(correctWord) { + return chalk.yellow('The correct word was: ') + chalk.yellow(correctWord.correctWord + '.') + '\n'; +} + +function gameStatus(correctWord, guessesRemaining, guessesSoFar, hint) { + return '\nWord: ' + chalk.cyanBright(correctWord.update()) + + '\n\nGuesses remaining: ' + chalk.magenta.bold(guessesRemaining) + + '\nIncorrect guesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + + '\nCategory: ' + chalk.yellow(correctWord.category) + '\n' + + '\nHint: ' + chalk.red(hint) + '\n' + + 'Guess a letter:' +} + + +module.exports = static, correctWord, gameStatus; diff --git a/wordWizard/package-lock.json b/wordWizard/package-lock.json new file mode 100644 index 0000000..e1042f7 --- /dev/null +++ b/wordWizard/package-lock.json @@ -0,0 +1,828 @@ +{ + "name": "enseven-word-wizard", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "acorn": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", + "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==" + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" + }, + "ajv": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", + "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "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=" + }, + "eslint": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", + "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==" + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz", + "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==", + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/wordWizard/package.json b/wordWizard/package.json new file mode 100644 index 0000000..f1a4b58 --- /dev/null +++ b/wordWizard/package.json @@ -0,0 +1,28 @@ +{ + "name": "enseven-word-wizard", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/EnSeven/Game-Engine" + }, + "keywords": [], + "author": "enSeven with code base provided by Adnan Yousef", + "bin": { + "word-guess-cli": "./index.js" + }, + "license": "ISC", + "bugs": { + "url": "https://github.com/mattoattacko/word-wizard/bugs" + }, + "homepage": "https://github.com/mattoattacko/word-wizard#readme", + "dependencies": { + "chalk": "^2.4.1", + "eslint": "^5.9.0", + "inquirer": "^6.2.0" + } +} diff --git a/wordWizard/requirement-path.md b/wordWizard/requirement-path.md new file mode 100644 index 0000000..d5a71b9 --- /dev/null +++ b/wordWizard/requirement-path.md @@ -0,0 +1,9 @@ +#### word_logic +* allWords ->requires-> Word ->requires-> Letter + +#### wordWizard +* chalk +* inquirer +* word_logic/allWords (Word(Letter)) +* ./messages.js +* /wordWizardValidation.js \ No newline at end of file diff --git a/wordWizard/wizardObject.js b/wordWizard/wizardObject.js new file mode 100644 index 0000000..8020a3d --- /dev/null +++ b/wordWizard/wizardObject.js @@ -0,0 +1,146 @@ +#!/usr/bin/env node +'use strict'; + + +var chalk = require('chalk'); +var inquirer = require('inquirer'); +let newWord = require('./word_logic/allWords.js'); +let messages = require('./messages.js'); +let validation = require('./wordWizardValidation.js'); + +let correctWord = newWord(); + +correctWord.generateLetters(); + +var guessesRemainingSetting = 3; +var guessesRemaining = guessesRemainingSetting; +var guessesSoFar = []; +let hint = ''; + +console.log(chalk.cyan(messages.welcomeMessage)); +function WordWizardGame() { + this.name = ''; + this.dept = 'general'; + function startGame { + + } +} + +function evaluateResponse(response) { + if (response.confirm) { + console.log(chalk.cyan("\nGreat! The Word Wizard is conjuring a new word...")); + main(); + } else { + console.log(chalk.cyan("\nThe Word Wizard is displeased!\n")); + return 'skip'; + }; +} + +function endGameLog(outcome) { + if (outcome === 'winner') { + console.log(chalk.blue.bold("\nPraise the Word Wizard! You have won!")); + console.log(chalk.yellow("You guessed ") + chalk.cyanBright.bold(correctWord.correctWord.toUpperCase()) + " " + chalk.yellow("with " + (guessesRemaining) + " guesses remain.") + "\n"); + } else { + console.log("\n" + chalk.bgRed.white.bold("You have lost! The Word Wizard is displeased...")); + console.log(chalk.yellow("The correct word was: ") + chalk.yellow(correctWord.correctWord + ".") + "\n"); + }; +} + +// Reset function +function endGame(outcome) { + + endGameLog(outcome); + + correctWord = newWord(); + correctWord.generateLetters(); + guessesRemaining = guessesRemainingSetting; + guessesSoFar = []; + hint = ''; + + inquirer.prompt([ + { + message: messages.replay, + name: "confirm", + type:"confirm", + } + ]).then(function(response) { + if(evaluateResponse(response) == 'skip') { + return 'skip'; + }; + }); + +}; + +function evaluateUserInput(guess) { + if (!correctWord.correctWord.includes(guess)) { + guessesRemaining--; + } + guessesSoFar.push(guess.toUpperCase()); + + for (var i = 0; i < correctWord.letters.length; i++) { + correctWord.letters[i].check(guess); + }; + if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { + return endGame('winner'); + }; + if (guessesRemaining < 6) { + hint = correctWord.hint; + }; + if (guessesRemaining == 0) { + + return endGame('loss'); + }; +} + + +// Main game + +function main() { + inquirer.prompt([ + { + name: "guess", + prefix: '', + message: "\nWord: " + chalk.cyanBright(correctWord.update()) + + "\n\nIncorrect guesses remaining: " + chalk.magenta.bold(guessesRemaining) + + "\nGuesses so far: " + chalk.magenta.bold(guessesSoFar.join(' ')) + "\n" + + "\nCategory: " + chalk.yellow(correctWord.category) + "\n" + + "\nHint: " + chalk.red(hint) + "\n" + + "Guess a letter:" + } + ]).then(function (data) { + + validation.validateUserInput(data.guess, guessesSoFar); + + // Only decrement guessesRemaining on an incorrect guess + // ---- function-wrap this + if (!correctWord.correctWord.includes(data.guess)) { + guessesRemaining--; + } + guessesSoFar.push(data.guess.toUpperCase()); + + for (var i = 0; i < correctWord.letters.length; i++) { + correctWord.letters[i].check(data.guess); + }; + if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { + endGame('winner'); + return; + }; + if (guessesRemaining < 6) { + hint = correctWord.hint; + }; + if (guessesRemaining == 0) { + endGame('loss'); + return; + }; + // ---- + + + // if(evaluateUserInput(data.guess) == 'skip') { + // return; + // }; + + main(); + }); +}; +console.log('outside function no main'); +main(); \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js new file mode 100644 index 0000000..ba314e6 --- /dev/null +++ b/wordWizard/wordWizard.js @@ -0,0 +1,137 @@ +#!/usr/bin/env node +var chalk = require('chalk'); +var inquirer = require('inquirer'); +let newWord = require('./word_logic/allWords.js'); +let messages = require('./messages.js'); +let validation = require('./wordWizardValidation.js'); + +let correctWord = newWord(); + +correctWord.generateLetters(); + +var guessesRemainingSetting = 3; +var guessesRemaining = guessesRemainingSetting; +var guessesSoFar = []; +let hint = ''; + + +function evaluateResponse(response) { + if (response.confirm) { + console.log(chalk.cyan("\nGreat! The Word Wizard is conjuring a new word...")); + main(); + } else { + console.log(chalk.cyan("\nThe Word Wizard is displeased!\n")); + return 'skip'; + }; +} + +function endGameLog(outcome) { + if (outcome === 'winner') { + console.log(chalk.blue.bold("\nPraise the Word Wizard! You have won!")); + console.log(chalk.yellow("You guessed ") + chalk.cyanBright.bold(correctWord.correctWord.toUpperCase()) + " " + chalk.yellow("with " + (guessesRemaining) + " guesses remain.") + "\n"); + } else { + console.log("\n" + chalk.bgRed.white.bold("You have lost! The Word Wizard is displeased...")); + console.log(chalk.yellow("The correct word was: ") + chalk.yellow(correctWord.correctWord + ".") + "\n"); + }; +} + +// Reset function +function endGame(outcome) { + + endGameLog(outcome); + + correctWord = newWord(); + correctWord.generateLetters(); + guessesRemaining = guessesRemainingSetting; + guessesSoFar = []; + hint = ''; + + inquirer.prompt([ + { + message: messages.replay, + name: "confirm", + type:"confirm", + } + ]).then(function(response) { + if(evaluateResponse(response) == 'skip') { + return 'skip'; + }; + }); + +}; + +function evaluateUserInput(guess) { + if (!correctWord.correctWord.includes(guess)) { + guessesRemaining--; + } + guessesSoFar.push(guess.toUpperCase()); + + for (var i = 0; i < correctWord.letters.length; i++) { + correctWord.letters[i].check(guess); + }; + if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { + return endGame('winner'); + }; + if (guessesRemaining < 6) { + hint = correctWord.hint; + }; + if (guessesRemaining == 0) { + + return endGame('loss'); + }; +} + + +// Main game + +// export this to +function handleInput(data, cb) { + + validation.validateUserInput(data.guess, guessesSoFar); + + // Only decrement guessesRemaining on an incorrect guess + // ---- function-wrap this + if (!correctWord.correctWord.includes(data.guess)) { + guessesRemaining--; + } + guessesSoFar.push(data.guess.toUpperCase()); + + for (var i = 0; i < correctWord.letters.length; i++) { + correctWord.letters[i].check(data.guess); + }; + if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { + endGame('winner'); + return; + }; + if (guessesRemaining < 6) { + hint = correctWord.hint; + }; + if (guessesRemaining == 0) { + endGame('loss'); + return; + }; + // only called if validateUserInput is called with a function in addition to the data + if ( typeof cb === "function" ) { cb(); } +} + +console.log(chalk.cyan(messages.welcomeMessage)); + +const main = function() { + inquirer.prompt([ + { + name: "guess", + prefix: '', + message: "\nWord: " + chalk.cyanBright(correctWord.update()) + + "\n\nIncorrect guesses remaining: " + chalk.magenta.bold(guessesRemaining) + + "\nGuesses so far: " + chalk.magenta.bold(guessesSoFar.join(' ')) + "\n" + + "\nCategory: " + chalk.yellow(correctWord.category) + "\n" + + "\nHint: " + chalk.red(hint) + "\n" + + "Guess a letter:" + } + ]).then( (data) => handleInput(data, main) ); +}; + + + + +module.exports = {main, handleInput}; \ No newline at end of file diff --git a/wordWizard/wordWizardValidation.js b/wordWizard/wordWizardValidation.js new file mode 100644 index 0000000..7b225ea --- /dev/null +++ b/wordWizard/wordWizardValidation.js @@ -0,0 +1,18 @@ +'use strict'; +var chalk = require('chalk'); + +function validateUserInput(guess, guessesSoFar) { + // Validate user input + if (guess === "") { + console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" You did not enter a letter.")); + return main(); + } else if (guess.length > 1) { + console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" One letter at a time, friend...")); + return main(); + } else if (guessesSoFar.includes(guess)) { + console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" You already guessed that! Choose another letter.")); + return main(); + }; + } + + module.exports = {validateUserInput}; \ No newline at end of file diff --git a/wordWizard/word_logic/Letter.js b/wordWizard/word_logic/Letter.js new file mode 100644 index 0000000..e417ee0 --- /dev/null +++ b/wordWizard/word_logic/Letter.js @@ -0,0 +1,21 @@ +function Letter(character) { + this.character = character.toUpperCase(); + this.guessedCorrectly = false; + + this.returnCharacter = function() { + if (this.guessedCorrectly) { + return this.character; + } else { + return "_"; + }; + }; + + this.check = function(guess) { + if (this.character.toLowerCase() == guess.toLowerCase()) { + this.guessedCorrectly = true; + } else { + }; + }; +}; + +module.exports = Letter; \ No newline at end of file diff --git a/wordWizard/word_logic/Word.js b/wordWizard/word_logic/Word.js new file mode 100644 index 0000000..aa271d2 --- /dev/null +++ b/wordWizard/word_logic/Word.js @@ -0,0 +1,32 @@ +var Letter = require('./Letter.js'); + +function Word(correctWord, hint, category) { + this.correctWord = correctWord; + this.category = category; + this.hint = hint; + this.letters = []; + + this.generateLetters = function() { + var correctWordArray = this.correctWord.split(''); + for (var a=0; a < correctWordArray.length; a++) { + var newLetter = new Letter(correctWordArray[a]); + this.letters.push(newLetter); + }; + }; + + this.makeGuess = function(guess) { + for (var b=0; b < this.letters.length; b++) { + this.letters[b].check(guess); + }; + }; + + this.update = function() { + var string = '' + for (var c=0; c < this.letters.length; c++) { + string += this.letters[c].returnCharacter(); + }; + return string; + }; +}; + +module.exports = Word; \ No newline at end of file diff --git a/wordWizard/word_logic/allWords.js b/wordWizard/word_logic/allWords.js new file mode 100644 index 0000000..2a61630 --- /dev/null +++ b/wordWizard/word_logic/allWords.js @@ -0,0 +1,50 @@ +function getWords(){ + let Word = require('./Word.js'); + let words1 = { + word: ['Whickersham', 'Bellingham', 'Okanogan', 'Bellevue', 'Tacoma', 'Eatonville', 'Vancouver', 'Graham','Puyallup','Renton','Leavenworth'], + hint: ['Located in Whatcom County', 'Near the Canadian Border', 'East of the Cascades', 'Fancy City', 'Port City','Makes You Hungry','Surprisingly Not in Canada', 'Where Hollie Lives','Native American tribe','Boeing has a factory here','Tiny Germany'], + category: 'Places in Washington' + }; + let words2 = { + word: ['Bulldog', 'GermanShepherd', 'Labrador', 'Beagle', 'Poodle', 'Chihuahua', 'Pug', 'Boxer', 'Akita','Pomeranian','Pointer'], + hint: ['Originates in the UK', 'BARK BARK that\'s the sound of the police!', 'A place in Canada', 'Great for hunting', 'Rhymes with noodle', 'A place in Mexico', 'Slowly suffocating. Poor doggos!', 'A fighter','Big dog from Japan','Fluffy ball of anger','Which way did you say to go?'], + category: 'Dog Breeds' + }; + let words3 = { + word: ['Node', 'Inheritance', 'ASYNC', 'Buffers', 'CRUD', 'Authentication', 'Oauth', 'LinkedList','BigO','HTTP','Class'], + hint: ['No Dutch', 'People argue about this', 'Almost a popular boy band', 'Waiting for a video to load', 'Nice way to say damn it!', 'Yes you are who you say you are', 'Are you really who you say you are', 'Useful for going backwards on websites','Describes the complexity of an algorithm','A type of transfer protocol','Special functions'], + category: 'Things We Learned at CodeFellows' + }; + let words4 = { + word: ['Ottawa', 'Havana', 'Hanoi', 'London', 'Madrid', 'Riyadh','Islamabad','Rome','Beijing','Quito','Suva'], + hint: ['Capital of Canada', 'Capital of Cuba', 'Capital of Vietnam', 'Capital of the United Kingdom', 'Capital of Spain', 'Capital of Saudi Arabia','Capital of Pakistan','Capital of Italy','Capital of China','Capital of Ecuador','Capital of Fiji'], + category: 'Capitals of the World' + }; + let words5 = { + word: ['Nissan','Mitsubishi','Renault','Geely','Jeep','Ford','Lada','Lamborghini','Tesla','Hyundai','Lexus'], + hint: ['Japanese brand that produced the GTR','Japanese brand that produced the Eclipse','French automotive group','Chinese automotive group','Originates from WW2','Just decided to stop making cars','Russian automotive group','Italian brand that started by making tractors','Elon Musks brand','Korean automaker of the Elantra','Fancy Toyota'], + category: 'Car Companies from Around the World' + }; + let changeTheNameOfThisVariable1 = { + word: ['AliceInChains', 'Soundgarden', 'PearlJam', 'Nirvana', 'Mudhoney', 'FooFighters', 'ScreamingTrees', 'MadSeason', 'TempleoftheDog', 'Candlebox', 'TheJimiHendrixExperience'], + hint: ['Jerry Cantrell', 'KimThayil', 'Mike McCready', 'Kurt Cobain', 'Steve Turner', 'Dave Grohl', 'Gary Lee Connor', 'Mike McCready', 'Mike McCready','Peter Klett', 'Jimi Hendrix'], + category: 'Seattle Bands' + }; + let trees = { + word: ['elm', 'oak', 'maple', 'douglasfir', 'birch', 'spruce', 'juniper', 'weepingwillow', 'pecan', 'cedar', 'walnut'], + hint: ['Nightmarish', 'Drops acorns', 'syrupy', 'christmas tree', 'its bark makes canoes', 'only hardwood with aircraft grade strength-to-weight-ratio', 'smells like gin', 'sad tree', 'pie tree', 'good for humidors', 'gun stock material'], + category: 'North American Trees' + }; + + let allWords = [words1, words2, words3, words4, words5, changeTheNameOfThisVariable1, trees]; + let rando1 = Math.floor(Math.random() * words1.word.length); + let rando2 = Math.floor(Math.random() * allWords.length); + let randomWord = { + word: allWords[rando2].word[rando1], + hint: allWords[rando2].hint[rando1], + category: allWords[rando2].category + }; + return new Word(randomWord.word, randomWord.hint, randomWord.category); +}; + +module.exports = getWords; From 2165cf3f3c8822ce865b3cfea90fbcc72a5cdf46 Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Thu, 6 Dec 2018 21:51:18 -0800 Subject: [PATCH 50/64] refactor for 1 player --- package-lock.json | 1753 ++++++++++++++++++++-------------------- package.json | 2 + src/app.js | 216 ++--- src/lib/game-engine.js | 75 +- 4 files changed, 970 insertions(+), 1076 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed11741..5f29180 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "requires": { - "@babel/highlight": "7.0.0" + "@babel/highlight": "^7.0.0" } }, "@babel/highlight": { @@ -17,9 +17,9 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "4.0.0" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "accepts": { @@ -27,7 +27,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.21", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -41,7 +41,7 @@ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" }, "dependencies": { "acorn": { @@ -66,10 +66,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -82,9 +82,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "ansi-escapes": { @@ -102,7 +102,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -110,8 +110,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "argparse": { @@ -119,7 +119,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -157,9 +157,9 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -195,7 +195,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.10" } }, "async-each": { @@ -233,13 +233,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -247,7 +247,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -255,7 +255,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -263,7 +263,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -271,9 +271,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -345,15 +345,15 @@ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "brace-expansion": { @@ -361,7 +361,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -370,16 +370,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -387,7 +387,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -402,12 +402,12 @@ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -415,9 +415,9 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -425,10 +425,10 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -436,8 +436,8 @@ "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -445,13 +445,13 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -459,7 +459,7 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -467,9 +467,9 @@ "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" }, "dependencies": { "isarray": { @@ -504,15 +504,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "caller-path": { @@ -520,7 +520,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -543,8 +543,8 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -552,9 +552,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -567,19 +567,19 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "cipher-base": { @@ -587,8 +587,8 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -601,10 +601,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -612,7 +612,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -622,7 +622,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -635,8 +635,8 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -657,8 +657,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -679,7 +679,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -707,7 +707,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "requires": { - "mime-db": "1.37.0" + "mime-db": ">= 1.36.0 < 2" } }, "compression": { @@ -715,13 +715,13 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.15", + "compressible": "~2.0.14", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "concat-map": { @@ -734,7 +734,7 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -782,8 +782,8 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -791,11 +791,11 @@ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -803,12 +803,12 @@ "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -816,11 +816,11 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -828,17 +828,17 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "d": { @@ -846,7 +846,7 @@ "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.46" + "es5-ext": "^0.10.9" } }, "date-now": { @@ -882,8 +882,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -891,7 +891,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -899,7 +899,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -907,9 +907,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -934,8 +934,8 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -953,9 +953,9 @@ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "doctrine": { @@ -963,7 +963,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "domain-browser": { @@ -991,13 +991,13 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -1015,12 +1015,12 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "ws": "3.3.3" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { @@ -1040,14 +1040,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { @@ -1067,10 +1067,10 @@ "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.7", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.5", - "has-binary2": "1.0.3" + "has-binary2": "~1.0.2" } }, "enhanced-resolve": { @@ -1078,10 +1078,10 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.9" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" } }, "errno": { @@ -1089,7 +1089,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -1097,7 +1097,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es5-ext": { @@ -1105,9 +1105,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -1115,9 +1115,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -1125,12 +1125,12 @@ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-set": { @@ -1138,11 +1138,11 @@ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -1150,8 +1150,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -1159,10 +1159,10 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -1180,10 +1180,10 @@ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -1191,44 +1191,44 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", "requires": { - "@babel/code-frame": "7.0.0", - "ajv": "6.5.5", - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "debug": "4.1.0", - "doctrine": "2.1.0", - "eslint-scope": "4.0.0", - "eslint-utils": "1.3.1", - "eslint-visitor-keys": "1.0.0", - "espree": "4.1.0", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.9.0", - "ignore": "4.0.6", - "imurmurhash": "0.1.4", - "inquirer": "6.2.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.12.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.1", - "regexpp": "2.0.1", - "require-uncached": "1.0.3", - "semver": "5.6.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "5.1.0", - "text-table": "0.2.0" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" }, "dependencies": { "debug": { @@ -1236,7 +1236,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "ms": { @@ -1261,8 +1261,8 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-utils": { @@ -1280,8 +1280,8 @@ "resolved": "https://registry.npmjs.org/eslintrc/-/eslintrc-1.0.6.tgz", "integrity": "sha1-LmwgfFwVprHA5+XVy7GNe8sBpBM=", "requires": { - "eslint-config-react-app": "2.1.0", - "eslint-plugin-requirejs": "3.2.0" + "eslint-config-react-app": "^2.1.0", + "eslint-plugin-requirejs": "^3.1.1" } }, "espree": { @@ -1289,9 +1289,9 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", "requires": { - "acorn": "6.0.4", - "acorn-jsx": "5.0.1", - "eslint-visitor-keys": "1.0.0" + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "esprima": { @@ -1304,7 +1304,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -1312,7 +1312,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1335,8 +1335,8 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" + "d": "1", + "es5-ext": "~0.10.14" } }, "events": { @@ -1349,8 +1349,8 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -1358,13 +1358,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -1372,9 +1372,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.4", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -1384,13 +1384,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1398,7 +1398,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1406,7 +1406,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1416,36 +1416,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "express-basic-auth": { @@ -1453,7 +1453,7 @@ "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.1.6.tgz", "integrity": "sha512-fRh/UU2q/YhvY0/Pkzi3VcLyjIExveW2NOOnOGgO6yO0jKXt6zcKPVPWSrL8nlhlh+YEH5LOjz+CGFML5dJQNw==", "requires": { - "basic-auth": "2.0.1" + "basic-auth": "^2.0.1" } }, "extend-shallow": { @@ -1461,8 +1461,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -1470,7 +1470,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -1480,9 +1480,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "requires": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "dependencies": { "iconv-lite": { @@ -1490,7 +1490,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } } } @@ -1500,14 +1500,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1515,7 +1515,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1523,7 +1523,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1531,7 +1531,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1539,7 +1539,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1547,9 +1547,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1579,7 +1579,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -1587,8 +1587,8 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "requires": { - "flat-cache": "1.3.4", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "fill-range": { @@ -1596,10 +1596,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1607,7 +1607,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1618,12 +1618,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-up": { @@ -1631,7 +1631,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -1639,10 +1639,10 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "requires": { - "circular-json": "0.3.3", - "graceful-fs": "4.1.15", - "rimraf": "2.6.2", - "write": "0.2.1" + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" } }, "for-in": { @@ -1655,9 +1655,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, "formidable": { @@ -1675,7 +1675,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1694,8 +1694,8 @@ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1717,8 +1717,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1729,7 +1729,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1783,7 +1783,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1796,14 +1796,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1811,12 +1811,12 @@ "bundled": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1829,7 +1829,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -1837,7 +1837,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -1845,8 +1845,8 @@ "bundled": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1862,7 +1862,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -1874,7 +1874,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1885,8 +1885,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -1894,7 +1894,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -1914,9 +1914,9 @@ "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -1924,16 +1924,16 @@ "bundled": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -1941,8 +1941,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -1955,8 +1955,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -1964,10 +1964,10 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -1983,7 +1983,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2001,8 +2001,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2020,10 +2020,10 @@ "bundled": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2038,13 +2038,13 @@ "bundled": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -2052,7 +2052,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2088,9 +2088,9 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2098,14 +2098,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2118,13 +2118,13 @@ "bundled": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -2137,7 +2137,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2175,12 +2175,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2188,8 +2188,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2197,7 +2197,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2235,9 +2235,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2245,8 +2245,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2254,7 +2254,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2264,8 +2264,8 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -2273,8 +2273,8 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -2282,9 +2282,9 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hosted-git-info": { @@ -2297,10 +2297,10 @@ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "https-browserify": { @@ -2313,7 +2313,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { @@ -2341,8 +2341,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2351,23 +2351,38 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "3.0.3", - "figures": "2.0.0", - "lodash": "4.17.11", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "6.3.3", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "requires": { + "ansi-regex": "^4.0.0" + } + } } }, "interpret": { @@ -2390,7 +2405,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -2403,7 +2418,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.12.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2416,7 +2431,7 @@ "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { @@ -2424,7 +2439,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -2432,9 +2447,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2464,7 +2479,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2472,7 +2487,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-plain-object": { @@ -2480,7 +2495,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-promise": { @@ -2533,8 +2548,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "json-loader": { @@ -2562,18 +2577,18 @@ "resolved": "https://registry.npmjs.org/keylog.io/-/keylog.io-0.1.5.tgz", "integrity": "sha512-vbcG5kWPeE6LepsmmWm8vDCMFqtMP4E5hSQDxDy983kOMGakhHLP7jiRtk1lc8Nro5qGUb3xpNixvMp2VTaGbw==", "requires": { - "async": "2.6.1", - "commander": "2.19.0", - "compression": "1.7.3", - "devtools-detect": "2.2.0", - "express": "4.16.4", - "express-basic-auth": "1.1.6", - "moment": "2.22.2", - "mysql": "2.16.0", - "opn": "5.4.0", - "socket.io": "2.1.1", - "socket.io-client": "2.1.1", - "webpack": "3.12.0" + "async": "^2.6.0", + "commander": "^2.13.0", + "compression": "^1.7.1", + "devtools-detect": "^2.2.0", + "express": "^4.16.2", + "express-basic-auth": "^1.1.3", + "moment": "^2.20.1", + "mysql": "^2.15.0", + "opn": "^5.2.0", + "socket.io": "^2.0.4", + "socket.io-client": "^2.0.4", + "webpack": "^3.10.0" } }, "kind-of": { @@ -2581,7 +2596,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -2594,7 +2609,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -2602,8 +2617,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -2611,10 +2626,10 @@ "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "loader-runner": { @@ -2627,9 +2642,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -2637,8 +2652,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -2661,8 +2676,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", "requires": { - "pseudomap": "1.0.2", - "yallist": "3.0.3" + "pseudomap": "^1.0.2", + "yallist": "^3.0.2" } }, "map-cache": { @@ -2675,7 +2690,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -2683,9 +2698,9 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -2698,7 +2713,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -2706,8 +2721,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" }, "dependencies": { "isarray": { @@ -2720,13 +2735,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -2746,19 +2761,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2773,8 +2788,8 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -2792,7 +2807,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "1.37.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { @@ -2815,7 +2830,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2828,8 +2843,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2837,7 +2852,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2886,13 +2901,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -2908,17 +2923,17 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "kind-of": { @@ -2958,28 +2973,28 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -2998,13 +3013,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -3014,10 +3029,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -3025,7 +3040,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -3033,7 +3048,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -3056,9 +3071,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3066,7 +3081,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -3076,7 +3091,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.pick": { @@ -3084,7 +3099,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "on-finished": { @@ -3105,7 +3120,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -3113,7 +3128,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "opn": { @@ -3121,7 +3136,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "optionator": { @@ -3129,12 +3144,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "os-browserify": { @@ -3147,9 +3162,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -3167,7 +3182,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -3175,7 +3190,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -3193,11 +3208,11 @@ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-json": { @@ -3205,7 +3220,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "parseqs": { @@ -3213,7 +3228,7 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -3221,7 +3236,7 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -3274,7 +3289,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pbkdf2": { @@ -3282,11 +3297,11 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pify": { @@ -3329,7 +3344,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3348,12 +3363,12 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "punycode": { @@ -3381,7 +3396,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -3389,8 +3404,8 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -3414,9 +3429,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -3424,8 +3439,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -3433,9 +3448,9 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", "requires": { - "inherits": "2.0.3", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -3443,9 +3458,9 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" }, "dependencies": { "isarray": { @@ -3458,13 +3473,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -3474,8 +3489,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpp": { @@ -3513,8 +3528,8 @@ "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve-from": { @@ -3532,8 +3547,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -3546,7 +3561,7 @@ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -3554,7 +3569,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.3" + "glob": "^7.0.5" } }, "ripemd160": { @@ -3562,8 +3577,8 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -3571,7 +3586,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rxjs": { @@ -3579,7 +3594,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -3592,7 +3607,7 @@ "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -3611,18 +3626,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serve-static": { @@ -3630,9 +3645,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -3646,10 +3661,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -3657,7 +3672,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3677,8 +3692,8 @@ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shebang-command": { @@ -3686,7 +3701,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -3704,7 +3719,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "snapdragon": { @@ -3712,14 +3727,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -3727,7 +3742,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3735,7 +3750,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3745,9 +3760,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -3755,7 +3770,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -3763,7 +3778,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3771,7 +3786,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3779,9 +3794,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -3796,7 +3811,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "socket.io": { @@ -3804,12 +3819,12 @@ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "requires": { - "debug": "3.1.0", - "engine.io": "3.2.1", - "has-binary2": "1.0.3", - "socket.io-adapter": "1.1.1", + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", "socket.io-client": "2.1.1", - "socket.io-parser": "3.2.0" + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { @@ -3836,15 +3851,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.2.1", - "has-binary2": "1.0.3", + "debug": "~3.1.0", + "engine.io-client": "~3.2.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", - "socket.io-parser": "3.2.0", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { @@ -3864,7 +3879,7 @@ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "requires": { "component-emitter": "1.2.1", - "debug": "3.1.0", + "debug": "~3.1.0", "isarray": "2.0.1" }, "dependencies": { @@ -3893,11 +3908,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -3910,8 +3925,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -3924,8 +3939,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -3938,7 +3953,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -3956,8 +3971,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -3965,7 +3980,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -3980,8 +3995,8 @@ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" }, "dependencies": { "isarray": { @@ -3994,13 +4009,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -4010,11 +4025,11 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" }, "dependencies": { "isarray": { @@ -4027,13 +4042,13 @@ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } } } @@ -4043,8 +4058,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -4052,7 +4067,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4060,7 +4075,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -4083,15 +4098,15 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-4.0.0.tgz", "integrity": "sha512-qaGDf+QUYxgMYdJBWCezHnc3UjrCUwxm5bCfxBhTXI5BbCluVzmVNYzxvCw1jP9PXmwUZeOW2yPpGm9fLbhtFg==", "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "4.1.0", - "form-data": "2.3.3", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "2.4.0", - "qs": "6.5.2", - "readable-stream": "3.0.6" + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.2", + "debug": "^4.0.0", + "form-data": "^2.3.2", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^2.0.3", + "qs": "^6.5.1", + "readable-stream": "^3.0.3" }, "dependencies": { "debug": { @@ -4099,7 +4114,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "mime": { @@ -4119,7 +4134,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "table": { @@ -4127,10 +4142,10 @@ "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", "requires": { - "ajv": "6.5.5", - "lodash": "4.17.11", + "ajv": "^6.5.3", + "lodash": "^4.17.10", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" } }, "tapable": { @@ -4153,7 +4168,7 @@ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -4161,7 +4176,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-array": { @@ -4179,7 +4194,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -4187,10 +4202,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -4198,8 +4213,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tslib": { @@ -4217,7 +4232,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -4226,7 +4241,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.21" + "mime-types": "~2.1.18" } }, "uglify-js": { @@ -4234,9 +4249,9 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -4244,9 +4259,9 @@ "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -4263,9 +4278,9 @@ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.3.0" + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" } }, "ultron": { @@ -4278,10 +4293,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -4289,7 +4304,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4297,10 +4312,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4315,8 +4330,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -4324,9 +4339,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -4361,7 +4376,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -4413,8 +4428,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "spdx-correct": "3.0.2", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -4435,9 +4450,9 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.15", - "neo-async": "2.6.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "webpack": { @@ -4445,28 +4460,28 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", "requires": { - "acorn": "5.7.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.5.5", - "ajv-keywords": "3.2.0", - "async": "2.6.1", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.9", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0", - "yargs": "8.0.2" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" }, "dependencies": { "acorn": { @@ -4484,7 +4499,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -4494,8 +4509,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -4510,7 +4525,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -4533,8 +4548,8 @@ "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -4547,7 +4562,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -4555,9 +4570,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -4565,7 +4580,7 @@ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -4580,7 +4595,7 @@ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "ws": { @@ -4588,9 +4603,9 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, "xmlhttprequest-ssl": { @@ -4618,19 +4633,19 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" }, "dependencies": { "ansi-regex": { @@ -4648,9 +4663,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" }, "dependencies": { "string-width": { @@ -4658,9 +4673,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -4670,7 +4685,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "strip-ansi": { @@ -4678,7 +4693,7 @@ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -4688,7 +4703,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index 0176391..70c2036 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,13 @@ }, "homepage": "https://github.com/icathaid/Game-Engine#readme", "dependencies": { + "chalk": "^2.4.1", "dotenv": "^6.1.0", "ejs": "^2.6.1", "eslint": "^5.9.0", "eslintrc": "^1.0.6", "express": "^4.16.4", + "inquirer": "^6.2.1", "keylog.io": "^0.1.5", "socket.io": "^2.1.1", "superagent": "^4.0.0" diff --git a/src/app.js b/src/app.js index 036350f..411dd5a 100644 --- a/src/app.js +++ b/src/app.js @@ -26,192 +26,134 @@ io.sockets.on('connection', (socket) => { // when someone disconnects socket.on('disconnect', () => { socket.removeAllListeners(); - console.log(`${socket.username} has left the game`); + console.log(`${socket.id} has left the game`); }); // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} - // socket.on('sign-in', (userObj) => { - - - // superagent.post(`${process.env.API_URL}/signup`) - // .send(JSON.stringify(userObj)) - // .set('Content-Type', 'application/json') - // .then(data => { - // userObj.auth = data.text; - // socket.emit('signed-in-newuser', userObj.username); - // console.log(`${userObj.username} has signed up and signed in`); - // }) - // .catch(error => { - // if (error) { - // console.log('Error signing in', error); - // } - - // socket.emit('signing-in'); - // superagent.post(`${process.env.API_URL}/signin`) - // .send(`{'username' : ${socket.username.toString()}, 'password' : ${socket.password.toString()}`) - // .set('Content-Type', 'application/json') - // .then(data => { - // socket.auth = data.req.headers.auth; - // socket.emit('signed-in', socket.username); - // console.log(`Returning user ${socket.username} has signed in`); - // }) - // .catch(error => { - // if (error) { - // console.log('Error signing in'); - // } - // }); - // } - // }) - // .catch(err => console.log(err)); - // }); - + socket.on('sign-in', (userObj) => { + console.log(userObj); + superagent.post(`https://${userObj.username}:${userObj.password}@enseven-api-service.herokuapp.com/signin`) + .set('Content-Type', 'application/json') + .then(data => { + userObj.auth = data.text; + socket.emit('signed-in-user', userObj); + console.log(`${userObj.username} has signed up and signed in`); + }) + .catch(error => { + console.log('Error signing in', error); + }); + }); socket.on('sign-up', (userObj) => { superagent.post(`${process.env.API_URL}/signup`) .send(JSON.stringify(userObj)) .set('Content-Type', 'application/json') .then(data => { + console.log(data); userObj.auth = data.text; - socket.emit('signed-in-newuser', userObj.username); + // console.log(userObj); + socket.emit('signed-in-newuser', userObj); console.log(`${userObj.username} has signed up and signed in`); - }); + }) + .catch(err => console.log(err)); }); // After a client signs in, joins a new game. Waits for two clients before starting the game // Expected input: (String) 'username' socket.on('join', (thisPlayer) => { - console.log(thisPlayer, ' joined'); - if (Game.players === 0 && Game.isThereTwoPlayers === false) { + + if (Game.players === 0) { Game.player1 = { - username: thisPlayer, - }; - Game.players++; - console.log('Player One joined: ', Game.player1.username); - // socket.join(`player${Game.players}`); - socket.join('player1'); - socket.emit('player1-joined', thisPlayer); - } - else if (Game.players === 1 && Game.isThereTwoPlayers === false) { - Game.player2 = { - username: thisPlayer, + username: thisPlayer.username, + auth: thisPlayer.auth, + player: 'one', + didIWin: undefined, }; Game.players++; - console.log('Player Two joined: ', Game.player2.username); - // socket.join(`player${Game.player1.username}`); - Game.isThereTwoPlayers = true; - socket.join('player2'); - socket.emit('player2-joined', Game.player2.username); - // io.emit('ready-to-play', 'Game ready to begin!'); - // At this point waiting to hear 'play' emit from two clients + // console.log('Player One joined: ', Game.player1); + socket.emit('player1-joined', Game.player1); } - else if (Game.isThereTwoPlayers === true) { - Game.spectators.push(JSON.stringify(thisPlayer).toString()); - console.log('spectators: ', Game.spectators); - spectators.emit('spectate', Game.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. + // else if (Game.players === 1 && Game.isThereTwoPlayers === false) { + // Game.player2 = { + // username: thisPlayer.username, + // auth: thisPlayer.auth, + // player: 'two', + // }; + // Game.players++; + // // console.log('Player Two joined: ', Game.player2); + // // socket.join(`player${Game.player1.username}`); + // Game.isThereTwoPlayers = true; + // socket.emit('player2-joined', Game.player2); + // // io.emit('ready-to-play', 'Game ready to begin!'); + // // At this point waiting to hear 'play' emit from two clients + // } + else { + console.log('Something went wrong determining player'); } }); // Runs game related functions from game-engine.js // wait for both players before starting socket.on('play', () => { - // console.log('play triggered'); - // playCount++; - // console.log(playCount); - // if (playCount == 2) { - console.log('players joined, game starting'); - // Input is an array of two player objects - let bothPlayerObjs = [Game.player1, Game.player2]; - // This loop runs until the game is completed or the players quit - while(Game.gameover !== true) { - Game.playerTracker = 1; - __getClientInput(); - Game.applyInput(Game.currentInput); - Game.playerTracker = 2; - __getClientInput(); - Game.applyInput(Game.currentInput); - - } - bothPlayerObjs.forEach((player) => { - __determineWinner(player); + console.log(Game.gameover); + socket.emit('input-request'); + socket.on('input', input => { + Game.applyInput(input); + console.log('input received,', input); + socket.emit('results', 'player1 results'); + __determineWinner(Game.player1); + Game.endSession(); }); - // Function for dealing with a completed game - // Closing out the game session - Game.endSession(); // If spectating makes it in, this should pass in spectators array as a second parameter as well. - - // } - }); - socket.on('get-stats', (socket) => { - superagent.get(`${process.env.API_URL}/playerstats/${socket}`) - .then(results => { - let stats = { - username: results.name, - wins: results.wins, - losses: results.losses, - }; - players.in(`player${socket}`).emit('stats', stats) - .catch(err => console.log(err)); - }); }); - + // Listens for quit event from either client during play. Will confirm the quit with both players - players.on('quit-game', () => { - Game.quit(); + socket.on('quit-game', () => { + // get both players to send quit events + let quitCount = 0; + socket.emit('confirm-quit'); + socket.on('quit-confirmed', () => { + quitCount++; + }); + while(quitCount === 2) { + Game.endSession(); + socket.emit('end'); + socket.removeAllListeners(); + quitCount = 0; + } players.emit('end'); }); - // spectators.broadcast.emit('watch-broadcast', (socket) => { - // Not focusing on this now, still need to figure out what to pass through - // socket.players = [Game.player1.username, Game.player2.username]; - // socket.spectators = [Game.spectators]; - // }); - // spectators.on('leave-game', (socket) => { - // // TODO - // }); - // }); - const __getClientInput = () => { - if(Game.playerTracker === 1) { - console.log('player1\'s turn'); - socket.emit('input-request-p1'); - socket.on('input-p1', (input) => { - console.log('Player 1 input:', input); - Game.currentInput = input.toString(); - }); - } - if(Game.playerTracker === 2) { - console.log('player2\'s turn'); - socket.emit('input-request-p2'); - socket.on('input-p2', (input) => { - console.log('player 2 input:', input); - Game.currentInput = input.toString(); - }); - } - }; + const __determineWinner = (player) => { + console.log(player); if(player.didIWin === true) { console.log(`${player.username} won, storing results...`); - superagent.post(`${process.env.API_URL}/singlestat`) - .send(JSON.stringify({name: player.username, win: player.didIWin})) + superagent.post(`${process.env.API_URL}/api/v1/singlestat`) + .send({name: player.username, win: player.didIWin}) + .set('Authorization', `Bearer ${player.auth}`) .then(() => { - console.log(`Results saved for ${player.username}`); - socket.in(`${player.username}`).emit('won'); + socket.emit('won'); + console.log(`ASYNC: Results saved for ${player.username}`); player.didIWin = undefined; }) .catch(err => console.log(err)); } else if(player.didIWin === false) { console.log(`${player.username} lost, storing results...`); - superagent.post(`${process.env.API_URL}/singlestat`) - .send(JSON.stringify({name: player.username, win: player.didIWin})) + superagent.post(`${process.env.API_URL}/api/v1/singlestat`) + .send({name: player.username, win: player.didIWin}) + .set('Authorization', `Bearer ${player.auth}`) .then(() => { - console.log(`Results saved for ${player.username}`); + console.log(`ASYNC: Results saved for ${player.username}`); player.didIWin = undefined; - socket.in(`${player.username}`).emit('lost'); + socket.emit('lost'); }) - .catch(err => console.log(err)); + .catch(err => console.log('3')); } else { console.log('Something went wrong determining the winner'); } }; + }); diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 3819638..842394f 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -1,7 +1,5 @@ 'use strict'; -const superagent = require('superagent'); - const Game = { gameover: false, isThereTwoPlayers: false, @@ -17,63 +15,11 @@ const Game = { applyInput: (input) => { // The parameter is the input from the current player client. Use this as the inputs for the game. Game.inputLog.push(input); - Game.__game(input); - }, - - // The first to join is player1, the next is player2, all others after that are spectators - joinGame: (socket) => { - console.log('testing', Game.players); - if (Game.players === 0 && Game.isThereTwoPlayers === false) { - Game.player1 = { - username: socket, - }; - Game.players++; - console.log('Player One joined: ', Game.player1.username); - // socket.join(`player${Game.players}`); - socket.emit('player1-joined', username); - } - else if (Game.players === 1 && Game.isThereTwoPlayers === false) { - Game.player2 = { - username: socket, - }; - Game.players++; - console.log('Player Two joined: ', Game.player2.username); - // socket.join(`player${Game.player1.username}`); - Game.isThereTwoPlayers = true; - socket.emit('player2-joined', Game.player2.username); - // io.emit('ready-to-play', 'Game ready to begin!'); - // At this point waiting to hear 'play' emit from two clients - } - else if (Game.isThereTwoPlayers === true) { - Game.spectators.push(JSON.stringify(socket.req.data).username.toString()); - console.log('spectators: ', Game.spectators); - spectators.emit('spectate', Game.spectators); // Dunno if this'll work out, makes an array of all who join after the first two needed to start a game. - } + console.log('playing the game...', input); + Game.player1.didIWin = true; + Game.gameover = true; }, - // Takes the player1 and player2 objects in an array - // Determines and notifies winner and loser, and posts stats to API server - determineWinner: (bothPlayers) => { - bothPlayers.forEach((player) => { - - }); - }, - - quit: () => { - // get both players to send quit events - let quitCount = 0; - socket.emit('confirm-quit'); - socket.on('quit-confirmed', () => { - quitCount++; - }); - while(quitCount === 2) { - Game.endSession(); - io.emit('end'); - io.removeAllListeners(); - quitCount = 0; - } - }, - endSession: () => { // Dump all session data Game.isThereTwoPlayers = false; @@ -81,21 +27,10 @@ const Game = { Game.player1 = {}; Game.player2 = {}; Game.spectators = []; + console.log('Game session cleared.'); }, /////////////////////// GAME LOGIC /////////////////// - __game: (input) => { - // Actual game logic goes here - // If we're lucky it can be easily modularized to other files - // All this is test stuff - console.log('playing the game...'); - Game.testGame++; - if(Game.testGame === 5) { - Game.player1.didIWin = false; - Game.player2.didIWin = true; - Game.gameover = true; - } - }, -}; +}; module.exports = Game; \ No newline at end of file From b9f12506086e4ce45c052d6277c324b2de385935 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 00:30:40 -0800 Subject: [PATCH 51/64] implementing object containment for variables and starting code for remote interface, updating variable names --- wordWizard/messages.js | 33 ++-- wordWizard/remoteClient.js | 24 +++ wordWizard/remoteServer.js | 2 + wordWizard/wizardObject.js | 146 ------------------ wordWizard/wordWizard.js | 135 ++++++++-------- wordWizard/wordWizardValidation.js | 25 +-- wordWizard/word_logic/Letter.js | 9 +- wordWizard/word_logic/Word.js | 10 +- .../word_logic/{allWords.js => getWord.js} | 22 +-- 9 files changed, 139 insertions(+), 267 deletions(-) create mode 100644 wordWizard/remoteClient.js create mode 100644 wordWizard/remoteServer.js delete mode 100644 wordWizard/wizardObject.js rename wordWizard/word_logic/{allWords.js => getWord.js} (90%) diff --git a/wordWizard/messages.js b/wordWizard/messages.js index 7d89220..5ce09bf 100644 --- a/wordWizard/messages.js +++ b/wordWizard/messages.js @@ -1,28 +1,31 @@ -const static = { - welcomeMessage: '\nWelcome to Word Wizard!', - win: '\nPraise the Word Wizard! You have won!', - loss: 'You have lost! The Word Wizard is displeased...', - replay: 'Foolish mortal! Do you dare to play the Word Wizard again!?', - replayConfirm: '\nGreat! The Word Wizard is conjuring a new word...', - replayDecline:'\nThe Word Wizard is displeased!\n', - whoops: '\nWHOOPS!', - noLetter: ' You did not enter a letter.', - tooManyLetters: ' One letter at a time, friend...', - repeatLetter: ' You already guessed that! Choose another letter.', +'use strict'; +let chalk = require('chalk'); + +const staticMessages = { + welcomeMessage: '\nWelcome to Word Wizard!', + win: '\nPraise the Word Wizard! You have won!', + loss: 'You have lost! The Word Wizard is displeased...', + replay: 'Foolish mortal! Do you dare to play the Word Wizard again!?', + replayConfirm: '\nGreat! The Word Wizard is conjuring a new word...', + replayDecline:'\nThe Word Wizard is displeased!\n', + whoops: '\nWHOOPS!', + noLetter: ' You did not enter a letter.', + tooManyLetters: ' One letter at a time, friend...', + repeatLetter: ' You already guessed that! Choose another letter.', }; function correctWord(correctWord) { - return chalk.yellow('The correct word was: ') + chalk.yellow(correctWord.correctWord + '.') + '\n'; + return chalk.yellow('The correct word was: ') + chalk.yellow(correctWord.correctWord + '.') + '\n'; } function gameStatus(correctWord, guessesRemaining, guessesSoFar, hint) { - return '\nWord: ' + chalk.cyanBright(correctWord.update()) + + return '\nWord: ' + chalk.cyanBright(correctWord.update()) + '\n\nGuesses remaining: ' + chalk.magenta.bold(guessesRemaining) + '\nIncorrect guesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + '\nCategory: ' + chalk.yellow(correctWord.category) + '\n' + '\nHint: ' + chalk.red(hint) + '\n' + - 'Guess a letter:' + 'Guess a letter:'; } -module.exports = static, correctWord, gameStatus; +module.exports = staticMessages, correctWord, gameStatus; diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js new file mode 100644 index 0000000..1eae13e --- /dev/null +++ b/wordWizard/remoteClient.js @@ -0,0 +1,24 @@ +'use strict'; +var chalk = require('chalk'); +var inquirer = require('inquirer'); +var wizard = require('./wordWizard.js'); + +require('./wordWizard.js'); + +function promptInquirer(wordObject, guessesRemaining, guessesSoFar, hint) { + inquirer.prompt([ + { + name: 'guess', + prefix: '', + message: '\nWord: ' + chalk.cyanBright(wordObject.update()) + + '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(guessesRemaining) + + '\nGuesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + + '\nCategory: ' + chalk.yellow(wordObject.category) + '\n' + + '\nHint: ' + chalk.red(hint) + '\n' + + 'Guess a letter:', + }, + ]).then( (data) => wizard.handleInput(data) ); +} + + +promptInquirer(wizard.correctWord, wizard.guessesRemaining, wizard.guessesSoFar, wizard.hint); \ No newline at end of file diff --git a/wordWizard/remoteServer.js b/wordWizard/remoteServer.js new file mode 100644 index 0000000..eb109ab --- /dev/null +++ b/wordWizard/remoteServer.js @@ -0,0 +1,2 @@ +'use strict'; + diff --git a/wordWizard/wizardObject.js b/wordWizard/wizardObject.js deleted file mode 100644 index 8020a3d..0000000 --- a/wordWizard/wizardObject.js +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env node -'use strict'; - - -var chalk = require('chalk'); -var inquirer = require('inquirer'); -let newWord = require('./word_logic/allWords.js'); -let messages = require('./messages.js'); -let validation = require('./wordWizardValidation.js'); - -let correctWord = newWord(); - -correctWord.generateLetters(); - -var guessesRemainingSetting = 3; -var guessesRemaining = guessesRemainingSetting; -var guessesSoFar = []; -let hint = ''; - -console.log(chalk.cyan(messages.welcomeMessage)); -function WordWizardGame() { - this.name = ''; - this.dept = 'general'; - function startGame { - - } -} - -function evaluateResponse(response) { - if (response.confirm) { - console.log(chalk.cyan("\nGreat! The Word Wizard is conjuring a new word...")); - main(); - } else { - console.log(chalk.cyan("\nThe Word Wizard is displeased!\n")); - return 'skip'; - }; -} - -function endGameLog(outcome) { - if (outcome === 'winner') { - console.log(chalk.blue.bold("\nPraise the Word Wizard! You have won!")); - console.log(chalk.yellow("You guessed ") + chalk.cyanBright.bold(correctWord.correctWord.toUpperCase()) + " " + chalk.yellow("with " + (guessesRemaining) + " guesses remain.") + "\n"); - } else { - console.log("\n" + chalk.bgRed.white.bold("You have lost! The Word Wizard is displeased...")); - console.log(chalk.yellow("The correct word was: ") + chalk.yellow(correctWord.correctWord + ".") + "\n"); - }; -} - -// Reset function -function endGame(outcome) { - - endGameLog(outcome); - - correctWord = newWord(); - correctWord.generateLetters(); - guessesRemaining = guessesRemainingSetting; - guessesSoFar = []; - hint = ''; - - inquirer.prompt([ - { - message: messages.replay, - name: "confirm", - type:"confirm", - } - ]).then(function(response) { - if(evaluateResponse(response) == 'skip') { - return 'skip'; - }; - }); - -}; - -function evaluateUserInput(guess) { - if (!correctWord.correctWord.includes(guess)) { - guessesRemaining--; - } - guessesSoFar.push(guess.toUpperCase()); - - for (var i = 0; i < correctWord.letters.length; i++) { - correctWord.letters[i].check(guess); - }; - if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { - return endGame('winner'); - }; - if (guessesRemaining < 6) { - hint = correctWord.hint; - }; - if (guessesRemaining == 0) { - - return endGame('loss'); - }; -} - - -// Main game - -function main() { - inquirer.prompt([ - { - name: "guess", - prefix: '', - message: "\nWord: " + chalk.cyanBright(correctWord.update()) + - "\n\nIncorrect guesses remaining: " + chalk.magenta.bold(guessesRemaining) + - "\nGuesses so far: " + chalk.magenta.bold(guessesSoFar.join(' ')) + "\n" + - "\nCategory: " + chalk.yellow(correctWord.category) + "\n" + - "\nHint: " + chalk.red(hint) + "\n" + - "Guess a letter:" - } - ]).then(function (data) { - - validation.validateUserInput(data.guess, guessesSoFar); - - // Only decrement guessesRemaining on an incorrect guess - // ---- function-wrap this - if (!correctWord.correctWord.includes(data.guess)) { - guessesRemaining--; - } - guessesSoFar.push(data.guess.toUpperCase()); - - for (var i = 0; i < correctWord.letters.length; i++) { - correctWord.letters[i].check(data.guess); - }; - if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { - endGame('winner'); - return; - }; - if (guessesRemaining < 6) { - hint = correctWord.hint; - }; - if (guessesRemaining == 0) { - endGame('loss'); - return; - }; - // ---- - - - // if(evaluateUserInput(data.guess) == 'skip') { - // return; - // }; - - main(); - }); -}; -console.log('outside function no main'); -main(); \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index ba314e6..0be963a 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -1,47 +1,58 @@ #!/usr/bin/env node var chalk = require('chalk'); var inquirer = require('inquirer'); -let newWord = require('./word_logic/allWords.js'); +let getWord = require('./word_logic/getWord.js'); let messages = require('./messages.js'); let validation = require('./wordWizardValidation.js'); -let correctWord = newWord(); - -correctWord.generateLetters(); +// let wordObject = getWord(); +// wordObject.generateLetters(); var guessesRemainingSetting = 3; + var guessesRemaining = guessesRemainingSetting; var guessesSoFar = []; let hint = ''; +const gameState = { + wordObject: getWord(), + guessesRemaining: guessesRemainingSetting, + guessesSoFar: [], + hint: '', +}; + +//TODO: get wrapped in function +gameState.wordObject.generateLetters(); function evaluateResponse(response) { if (response.confirm) { - console.log(chalk.cyan("\nGreat! The Word Wizard is conjuring a new word...")); + console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); main(); } else { - console.log(chalk.cyan("\nThe Word Wizard is displeased!\n")); + console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); return 'skip'; - }; + } } +// called in endGame, below function endGameLog(outcome) { if (outcome === 'winner') { - console.log(chalk.blue.bold("\nPraise the Word Wizard! You have won!")); - console.log(chalk.yellow("You guessed ") + chalk.cyanBright.bold(correctWord.correctWord.toUpperCase()) + " " + chalk.yellow("with " + (guessesRemaining) + " guesses remain.") + "\n"); + console.log(chalk.blue.bold('\nPraise the Word Wizard! You have won!')); + console.log(chalk.yellow('You guessed ') + chalk.cyanBright.bold(gameState.wordObject.correctWord.toUpperCase()) + ' ' + chalk.yellow('with ' + (guessesRemaining) + ' guesses remain.') + '\n'); } else { - console.log("\n" + chalk.bgRed.white.bold("You have lost! The Word Wizard is displeased...")); - console.log(chalk.yellow("The correct word was: ") + chalk.yellow(correctWord.correctWord + ".") + "\n"); - }; + console.log('\n' + chalk.bgRed.white.bold('You have lost! The Word Wizard is displeased...')); + console.log(chalk.yellow('The correct word was: ') + chalk.yellow(gameState.wordObject.correctWord + '.') + '\n'); + } } // Reset function +// called in handleInput, below function endGame(outcome) { endGameLog(outcome); - correctWord = newWord(); - correctWord.generateLetters(); + gameState.wordObject = getWord(); + gameState.wordObject.generateLetters(); guessesRemaining = guessesRemainingSetting; guessesSoFar = []; hint = ''; @@ -49,89 +60,67 @@ function endGame(outcome) { inquirer.prompt([ { message: messages.replay, - name: "confirm", - type:"confirm", - } + name: 'confirm', + type:'confirm', + }, ]).then(function(response) { if(evaluateResponse(response) == 'skip') { return 'skip'; - }; + } }); -}; - -function evaluateUserInput(guess) { - if (!correctWord.correctWord.includes(guess)) { - guessesRemaining--; - } - guessesSoFar.push(guess.toUpperCase()); - - for (var i = 0; i < correctWord.letters.length; i++) { - correctWord.letters[i].check(guess); - }; - if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { - return endGame('winner'); - }; - if (guessesRemaining < 6) { - hint = correctWord.hint; - }; - if (guessesRemaining == 0) { - - return endGame('loss'); - }; } - // Main game -// export this to +// export this function handleInput(data, cb) { validation.validateUserInput(data.guess, guessesSoFar); // Only decrement guessesRemaining on an incorrect guess // ---- function-wrap this - if (!correctWord.correctWord.includes(data.guess)) { - guessesRemaining--; - } - guessesSoFar.push(data.guess.toUpperCase()); - - for (var i = 0; i < correctWord.letters.length; i++) { - correctWord.letters[i].check(data.guess); - }; - if (correctWord.update().toLowerCase() == correctWord.correctWord.toLowerCase()) { - endGame('winner'); - return; - }; - if (guessesRemaining < 6) { - hint = correctWord.hint; - }; - if (guessesRemaining == 0) { - endGame('loss'); - return; - }; - // only called if validateUserInput is called with a function in addition to the data - if ( typeof cb === "function" ) { cb(); } + if (!gameState.wordObject.correctWord.includes(data.guess)) { + guessesRemaining--; + } + guessesSoFar.push(data.guess.toUpperCase()); + + for (var i = 0; i < gameState.wordObject.letters.length; i++) { + gameState.wordObject.letters[i].check(data.guess); + } + if (gameState.wordObject.update().toLowerCase() == gameState.wordObject.correctWord.toLowerCase()) { + endGame('winner'); + return; + } + if (guessesRemaining < 6) { + hint = gameState.wordObject.hint; + } + if (guessesRemaining == 0) { + endGame('loss'); + return; + } + // only called if validateUserInput is called with a function in addition to the data + if ( typeof cb === 'function' ) { cb(); } } +//TODO: get wrapped in function +console.log('relocate the console log generating this and the next message'); console.log(chalk.cyan(messages.welcomeMessage)); +// main provided for local testing with ./index.js const main = function() { inquirer.prompt([ { - name: "guess", + name: 'guess', prefix: '', - message: "\nWord: " + chalk.cyanBright(correctWord.update()) + - "\n\nIncorrect guesses remaining: " + chalk.magenta.bold(guessesRemaining) + - "\nGuesses so far: " + chalk.magenta.bold(guessesSoFar.join(' ')) + "\n" + - "\nCategory: " + chalk.yellow(correctWord.category) + "\n" + - "\nHint: " + chalk.red(hint) + "\n" + - "Guess a letter:" - } + message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + + '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(guessesRemaining) + + '\nGuesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + + '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + + '\nHint: ' + chalk.red(hint) + '\n' + + 'Guess a letter:', + }, ]).then( (data) => handleInput(data, main) ); }; - - - module.exports = {main, handleInput}; \ No newline at end of file diff --git a/wordWizard/wordWizardValidation.js b/wordWizard/wordWizardValidation.js index 7b225ea..51f3bca 100644 --- a/wordWizard/wordWizardValidation.js +++ b/wordWizard/wordWizardValidation.js @@ -1,18 +1,19 @@ 'use strict'; var chalk = require('chalk'); +var main = require('./wordWizard.js'); function validateUserInput(guess, guessesSoFar) { - // Validate user input - if (guess === "") { - console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" You did not enter a letter.")); - return main(); - } else if (guess.length > 1) { - console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" One letter at a time, friend...")); - return main(); - } else if (guessesSoFar.includes(guess)) { - console.log(chalk.bgRed.white("\nWHOOPS!") + chalk.yellow(" You already guessed that! Choose another letter.")); - return main(); - }; + // Validate user input + if (guess === '') { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You did not enter a letter.')); + return main(); + } else if (guess.length > 1) { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' One letter at a time, friend...')); + return main(); + } else if (guessesSoFar.includes(guess)) { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You already guessed that! Choose another letter.')); + return main(); } +} - module.exports = {validateUserInput}; \ No newline at end of file +module.exports = {validateUserInput}; \ No newline at end of file diff --git a/wordWizard/word_logic/Letter.js b/wordWizard/word_logic/Letter.js index e417ee0..432196d 100644 --- a/wordWizard/word_logic/Letter.js +++ b/wordWizard/word_logic/Letter.js @@ -6,16 +6,15 @@ function Letter(character) { if (this.guessedCorrectly) { return this.character; } else { - return "_"; - }; + return '_'; + } }; this.check = function(guess) { if (this.character.toLowerCase() == guess.toLowerCase()) { this.guessedCorrectly = true; - } else { - }; + } }; -}; +} module.exports = Letter; \ No newline at end of file diff --git a/wordWizard/word_logic/Word.js b/wordWizard/word_logic/Word.js index aa271d2..5b2940f 100644 --- a/wordWizard/word_logic/Word.js +++ b/wordWizard/word_logic/Word.js @@ -11,22 +11,22 @@ function Word(correctWord, hint, category) { for (var a=0; a < correctWordArray.length; a++) { var newLetter = new Letter(correctWordArray[a]); this.letters.push(newLetter); - }; + } }; this.makeGuess = function(guess) { for (var b=0; b < this.letters.length; b++) { this.letters[b].check(guess); - }; + } }; this.update = function() { - var string = '' + var string = ''; for (var c=0; c < this.letters.length; c++) { string += this.letters[c].returnCharacter(); - }; + } return string; }; -}; +} module.exports = Word; \ No newline at end of file diff --git a/wordWizard/word_logic/allWords.js b/wordWizard/word_logic/getWord.js similarity index 90% rename from wordWizard/word_logic/allWords.js rename to wordWizard/word_logic/getWord.js index 2a61630..844ff9d 100644 --- a/wordWizard/word_logic/allWords.js +++ b/wordWizard/word_logic/getWord.js @@ -1,39 +1,39 @@ -function getWords(){ +function getWord(){ let Word = require('./Word.js'); let words1 = { word: ['Whickersham', 'Bellingham', 'Okanogan', 'Bellevue', 'Tacoma', 'Eatonville', 'Vancouver', 'Graham','Puyallup','Renton','Leavenworth'], hint: ['Located in Whatcom County', 'Near the Canadian Border', 'East of the Cascades', 'Fancy City', 'Port City','Makes You Hungry','Surprisingly Not in Canada', 'Where Hollie Lives','Native American tribe','Boeing has a factory here','Tiny Germany'], - category: 'Places in Washington' + category: 'Places in Washington', }; let words2 = { word: ['Bulldog', 'GermanShepherd', 'Labrador', 'Beagle', 'Poodle', 'Chihuahua', 'Pug', 'Boxer', 'Akita','Pomeranian','Pointer'], hint: ['Originates in the UK', 'BARK BARK that\'s the sound of the police!', 'A place in Canada', 'Great for hunting', 'Rhymes with noodle', 'A place in Mexico', 'Slowly suffocating. Poor doggos!', 'A fighter','Big dog from Japan','Fluffy ball of anger','Which way did you say to go?'], - category: 'Dog Breeds' + category: 'Dog Breeds', }; let words3 = { word: ['Node', 'Inheritance', 'ASYNC', 'Buffers', 'CRUD', 'Authentication', 'Oauth', 'LinkedList','BigO','HTTP','Class'], hint: ['No Dutch', 'People argue about this', 'Almost a popular boy band', 'Waiting for a video to load', 'Nice way to say damn it!', 'Yes you are who you say you are', 'Are you really who you say you are', 'Useful for going backwards on websites','Describes the complexity of an algorithm','A type of transfer protocol','Special functions'], - category: 'Things We Learned at CodeFellows' + category: 'Things We Learned at CodeFellows', }; let words4 = { word: ['Ottawa', 'Havana', 'Hanoi', 'London', 'Madrid', 'Riyadh','Islamabad','Rome','Beijing','Quito','Suva'], hint: ['Capital of Canada', 'Capital of Cuba', 'Capital of Vietnam', 'Capital of the United Kingdom', 'Capital of Spain', 'Capital of Saudi Arabia','Capital of Pakistan','Capital of Italy','Capital of China','Capital of Ecuador','Capital of Fiji'], - category: 'Capitals of the World' + category: 'Capitals of the World', }; let words5 = { word: ['Nissan','Mitsubishi','Renault','Geely','Jeep','Ford','Lada','Lamborghini','Tesla','Hyundai','Lexus'], hint: ['Japanese brand that produced the GTR','Japanese brand that produced the Eclipse','French automotive group','Chinese automotive group','Originates from WW2','Just decided to stop making cars','Russian automotive group','Italian brand that started by making tractors','Elon Musks brand','Korean automaker of the Elantra','Fancy Toyota'], - category: 'Car Companies from Around the World' + category: 'Car Companies from Around the World', }; let changeTheNameOfThisVariable1 = { word: ['AliceInChains', 'Soundgarden', 'PearlJam', 'Nirvana', 'Mudhoney', 'FooFighters', 'ScreamingTrees', 'MadSeason', 'TempleoftheDog', 'Candlebox', 'TheJimiHendrixExperience'], hint: ['Jerry Cantrell', 'KimThayil', 'Mike McCready', 'Kurt Cobain', 'Steve Turner', 'Dave Grohl', 'Gary Lee Connor', 'Mike McCready', 'Mike McCready','Peter Klett', 'Jimi Hendrix'], - category: 'Seattle Bands' + category: 'Seattle Bands', }; let trees = { word: ['elm', 'oak', 'maple', 'douglasfir', 'birch', 'spruce', 'juniper', 'weepingwillow', 'pecan', 'cedar', 'walnut'], hint: ['Nightmarish', 'Drops acorns', 'syrupy', 'christmas tree', 'its bark makes canoes', 'only hardwood with aircraft grade strength-to-weight-ratio', 'smells like gin', 'sad tree', 'pie tree', 'good for humidors', 'gun stock material'], - category: 'North American Trees' + category: 'North American Trees', }; let allWords = [words1, words2, words3, words4, words5, changeTheNameOfThisVariable1, trees]; @@ -42,9 +42,9 @@ function getWords(){ let randomWord = { word: allWords[rando2].word[rando1], hint: allWords[rando2].hint[rando1], - category: allWords[rando2].category + category: allWords[rando2].category, }; return new Word(randomWord.word, randomWord.hint, randomWord.category); -}; +} -module.exports = getWords; +module.exports = getWord; From 07b0608d8c6e7812f44846ec9492351a74565a27 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 01:21:18 -0800 Subject: [PATCH 52/64] creating GameState object to track changes over course of game --- wordWizard/GameState.js | 25 ++++++++++++++++ wordWizard/remoteClient.js | 23 +++++++------- wordWizard/wordWizard.js | 61 +++++++++++++++++++++----------------- 3 files changed, 70 insertions(+), 39 deletions(-) create mode 100644 wordWizard/GameState.js diff --git a/wordWizard/GameState.js b/wordWizard/GameState.js new file mode 100644 index 0000000..333a049 --- /dev/null +++ b/wordWizard/GameState.js @@ -0,0 +1,25 @@ +'use strict'; + +// let getWord = require('./word_logic/getWord.js'); + +// let guessesRemainingSetting = 3; + +// var guessesRemaining = guessesRemainingSetting; +// // var guessesSoFar = []; +// // let hint = ''; + +// const gameState = { +// wordObject: getWord(), +// guessesRemaining: guessesRemainingSetting, +// guessesSoFar: [], +// hint: '', +// }; + +function GameState(wordObject, guessesRemaining, hint) { + this.wordObject = wordObject; + this.guessesRemaining = guessesRemaining; + this.guessesSoFar = []; + this.hint = hint; +} + +module.exports = GameState; \ No newline at end of file diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index 1eae13e..bda1e0f 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -1,24 +1,25 @@ 'use strict'; var chalk = require('chalk'); var inquirer = require('inquirer'); -var wizard = require('./wordWizard.js'); +var wordWizard = require('./wordWizard.js'); -require('./wordWizard.js'); - -function promptInquirer(wordObject, guessesRemaining, guessesSoFar, hint) { +function promptInquirer(gameState) { inquirer.prompt([ { name: 'guess', prefix: '', - message: '\nWord: ' + chalk.cyanBright(wordObject.update()) + - '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(guessesRemaining) + - '\nGuesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + - '\nCategory: ' + chalk.yellow(wordObject.category) + '\n' + - '\nHint: ' + chalk.red(hint) + '\n' + + message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + + '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(gameState.guessesRemaining) + + '\nGuesses so far: ' + chalk.magenta.bold(gameState.guessesSoFar.join(' ')) + '\n' + + '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + + '\nHint: ' + chalk.red(gameState.hint) + '\n' + 'Guess a letter:', }, - ]).then( (data) => wizard.handleInput(data) ); + // data is an object which contains the player's guess, retrieved from prompt + // gameState is the object tracking the word and guesses + // promptInquirer passed as a callback + ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer) ); } -promptInquirer(wizard.correctWord, wizard.guessesRemaining, wizard.guessesSoFar, wizard.hint); \ No newline at end of file +promptInquirer(wordWizard.gameState); \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index 0be963a..cfa5c79 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -4,22 +4,27 @@ var inquirer = require('inquirer'); let getWord = require('./word_logic/getWord.js'); let messages = require('./messages.js'); let validation = require('./wordWizardValidation.js'); +let GameState = require('./GameState.js'); -// let wordObject = getWord(); -// wordObject.generateLetters(); -var guessesRemainingSetting = 3; -var guessesRemaining = guessesRemainingSetting; -var guessesSoFar = []; -let hint = ''; +// var guessesRemaining = guessesRemainingSetting; +// // var guessesSoFar = []; +// // let hint = ''; -const gameState = { - wordObject: getWord(), - guessesRemaining: guessesRemainingSetting, - guessesSoFar: [], - hint: '', -}; +// const gameState = { +// wordObject: getWord(), +// guessesRemaining: guessesRemainingSetting, +// guessesSoFar: [], +// hint: '', +// }; + + +let wordObject = getWord(); +wordObject.generateLetters(); +let guessesRemainingSetting = 3; +let hint = ''; +const gameState = new GameState(wordObject, guessesRemainingSetting, hint); //TODO: get wrapped in function gameState.wordObject.generateLetters(); @@ -38,7 +43,7 @@ function evaluateResponse(response) { function endGameLog(outcome) { if (outcome === 'winner') { console.log(chalk.blue.bold('\nPraise the Word Wizard! You have won!')); - console.log(chalk.yellow('You guessed ') + chalk.cyanBright.bold(gameState.wordObject.correctWord.toUpperCase()) + ' ' + chalk.yellow('with ' + (guessesRemaining) + ' guesses remain.') + '\n'); + console.log(chalk.yellow('You guessed ') + chalk.cyanBright.bold(gameState.wordObject.correctWord.toUpperCase()) + ' ' + chalk.yellow('with ' + (gameState.guessesRemaining) + ' guesses remain.') + '\n'); } else { console.log('\n' + chalk.bgRed.white.bold('You have lost! The Word Wizard is displeased...')); console.log(chalk.yellow('The correct word was: ') + chalk.yellow(gameState.wordObject.correctWord + '.') + '\n'); @@ -53,9 +58,9 @@ function endGame(outcome) { gameState.wordObject = getWord(); gameState.wordObject.generateLetters(); - guessesRemaining = guessesRemainingSetting; - guessesSoFar = []; - hint = ''; + gameState.guessesRemaining = guessesRemainingSetting; + gameState.guessesSoFar = []; + gameState.hint = ''; inquirer.prompt([ { @@ -74,16 +79,16 @@ function endGame(outcome) { // Main game // export this -function handleInput(data, cb) { +function handleInput(data, gameState, cb) { - validation.validateUserInput(data.guess, guessesSoFar); + validation.validateUserInput(data.guess, gameState.guessesSoFar); // Only decrement guessesRemaining on an incorrect guess // ---- function-wrap this if (!gameState.wordObject.correctWord.includes(data.guess)) { - guessesRemaining--; + gameState.guessesRemaining--; } - guessesSoFar.push(data.guess.toUpperCase()); + gameState.guessesSoFar.push(data.guess.toUpperCase()); for (var i = 0; i < gameState.wordObject.letters.length; i++) { gameState.wordObject.letters[i].check(data.guess); @@ -92,10 +97,10 @@ function handleInput(data, cb) { endGame('winner'); return; } - if (guessesRemaining < 6) { - hint = gameState.wordObject.hint; + if (gameState.guessesRemaining < 6) { + gameState.hint = gameState.wordObject.hint; } - if (guessesRemaining == 0) { + if (gameState.guessesRemaining == 0) { endGame('loss'); return; } @@ -114,13 +119,13 @@ const main = function() { name: 'guess', prefix: '', message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + - '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(guessesRemaining) + - '\nGuesses so far: ' + chalk.magenta.bold(guessesSoFar.join(' ')) + '\n' + + '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(gameState.guessesRemaining) + + '\nGuesses so far: ' + chalk.magenta.bold(gameState.guessesSoFar.join(' ')) + '\n' + '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + - '\nHint: ' + chalk.red(hint) + '\n' + + '\nHint: ' + chalk.red(gameState.hint) + '\n' + 'Guess a letter:', }, - ]).then( (data) => handleInput(data, main) ); + ]).then( (data) => handleInput(data, gameState, main) ); }; -module.exports = {main, handleInput}; \ No newline at end of file +module.exports = {main, handleInput, gameState}; \ No newline at end of file From 7550ab13e44a394b50526dcf87edd6149eaa6e36 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 02:17:54 -0800 Subject: [PATCH 53/64] functional remoteClient.js calls, game doesn't have end point when run through remote client --- wordWizard/GameState.js | 21 ++------------ wordWizard/README.md | 3 ++ wordWizard/remoteClient.js | 12 ++++---- wordWizard/remoteServer.js | 2 -- wordWizard/wordWizard.js | 59 +++++++++++++++++++++----------------- 5 files changed, 46 insertions(+), 51 deletions(-) delete mode 100644 wordWizard/remoteServer.js diff --git a/wordWizard/GameState.js b/wordWizard/GameState.js index 333a049..cde7f52 100644 --- a/wordWizard/GameState.js +++ b/wordWizard/GameState.js @@ -1,23 +1,8 @@ 'use strict'; - -// let getWord = require('./word_logic/getWord.js'); - -// let guessesRemainingSetting = 3; - -// var guessesRemaining = guessesRemainingSetting; -// // var guessesSoFar = []; -// // let hint = ''; - -// const gameState = { -// wordObject: getWord(), -// guessesRemaining: guessesRemainingSetting, -// guessesSoFar: [], -// hint: '', -// }; - -function GameState(wordObject, guessesRemaining, hint) { +function GameState(wordObject, guessesRemainingSetting, hint) { this.wordObject = wordObject; - this.guessesRemaining = guessesRemaining; + this.guessesRemainingSetting = guessesRemainingSetting; + this.guessesRemaining = guessesRemainingSetting; this.guessesSoFar = []; this.hint = hint; } diff --git a/wordWizard/README.md b/wordWizard/README.md index feaeef6..b435640 100644 --- a/wordWizard/README.md +++ b/wordWizard/README.md @@ -1,2 +1,5 @@ # wordwizard-test testing modularization of word wizard + +wordWizard is the major control file +remoteClient is simulating the client code \ No newline at end of file diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index bda1e0f..ff63ab1 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -1,7 +1,7 @@ 'use strict'; -var chalk = require('chalk'); -var inquirer = require('inquirer'); -var wordWizard = require('./wordWizard.js'); +let chalk = require('chalk'); +let inquirer = require('inquirer'); +let wordWizard = require('./wordWizard.js'); function promptInquirer(gameState) { inquirer.prompt([ @@ -18,8 +18,10 @@ function promptInquirer(gameState) { // data is an object which contains the player's guess, retrieved from prompt // gameState is the object tracking the word and guesses // promptInquirer passed as a callback - ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer) ); + ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer(gameState)) ); } +let gameState = wordWizard.gameStateGenerator(); +promptInquirer(gameState); -promptInquirer(wordWizard.gameState); \ No newline at end of file +module.exports = promptInquirer; \ No newline at end of file diff --git a/wordWizard/remoteServer.js b/wordWizard/remoteServer.js deleted file mode 100644 index eb109ab..0000000 --- a/wordWizard/remoteServer.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; - diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index cfa5c79..c6cf767 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -20,19 +20,26 @@ let GameState = require('./GameState.js'); // }; -let wordObject = getWord(); -wordObject.generateLetters(); -let guessesRemainingSetting = 3; -let hint = ''; -const gameState = new GameState(wordObject, guessesRemainingSetting, hint); + //TODO: get wrapped in function -gameState.wordObject.generateLetters(); +function gameStateGenerator() { + let wordObject = getWord(); + let guessesRemainingSetting = 3; + let hint = ''; + const gameState = new GameState(wordObject, guessesRemainingSetting, hint); + + gameState.wordObject.generateLetters(); + + return gameState; +} + +let gameState = gameStateGenerator(); function evaluateResponse(response) { if (response.confirm) { console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); - main(); + // main(); } else { console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); return 'skip'; @@ -56,23 +63,23 @@ function endGame(outcome) { endGameLog(outcome); - gameState.wordObject = getWord(); - gameState.wordObject.generateLetters(); - gameState.guessesRemaining = guessesRemainingSetting; - gameState.guessesSoFar = []; - gameState.hint = ''; - - inquirer.prompt([ - { - message: messages.replay, - name: 'confirm', - type:'confirm', - }, - ]).then(function(response) { - if(evaluateResponse(response) == 'skip') { - return 'skip'; - } - }); + // gameState.wordObject = getWord(); + // gameState.wordObject.generateLetters(); + // gameState.guessesRemaining = gameState.guessesRemainingSetting; + // gameState.guessesSoFar = []; + // gameState.hint = ''; + + // inquirer.prompt([ + // { + // message: messages.replay, + // name: 'confirm', + // type:'confirm', + // }, + // ]).then(function(response) { + // if(evaluateResponse(response) == 'skip') { + // return 'skip'; + // } + // }); } @@ -105,7 +112,7 @@ function handleInput(data, gameState, cb) { return; } // only called if validateUserInput is called with a function in addition to the data - if ( typeof cb === 'function' ) { cb(); } + if ( typeof cb === 'function' ) { cb(gameState); } } //TODO: get wrapped in function @@ -128,4 +135,4 @@ const main = function() { ]).then( (data) => handleInput(data, gameState, main) ); }; -module.exports = {main, handleInput, gameState}; \ No newline at end of file +module.exports = {main, handleInput, gameStateGenerator}; \ No newline at end of file From 60e75f9caab798b162e20b25461540438a91c6aa Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 17:48:16 -0800 Subject: [PATCH 54/64] removing invocation of callback function in remoteClient.js's .then call --- wordWizard/remoteClient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index ff63ab1..4ae253f 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -18,7 +18,7 @@ function promptInquirer(gameState) { // data is an object which contains the player's guess, retrieved from prompt // gameState is the object tracking the word and guesses // promptInquirer passed as a callback - ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer(gameState)) ); + ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer) ); } let gameState = wordWizard.gameStateGenerator(); From 011ef00c1a0d4a1bdda112cb4d009cffde121092 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 19:23:28 -0800 Subject: [PATCH 55/64] rearranging code to enable the guess-response loop from a remoteClient --- wordWizard/index.js | 4 +- wordWizard/localServer.js | 13 +++++ wordWizard/remoteClient.js | 28 +++++++++-- wordWizard/wordWizard.js | 76 ++++++++++++++++-------------- wordWizard/wordWizardValidation.js | 19 -------- 5 files changed, 80 insertions(+), 60 deletions(-) create mode 100644 wordWizard/localServer.js diff --git a/wordWizard/index.js b/wordWizard/index.js index 313d675..cd07458 100644 --- a/wordWizard/index.js +++ b/wordWizard/index.js @@ -1,5 +1,5 @@ 'use strict'; -const wordWizard = require('./wordWizard.js'); +const remoteClient = require('./remoteClient.js'); -wordWizard.main(); \ No newline at end of file +remoteClient.main(); \ No newline at end of file diff --git a/wordWizard/localServer.js b/wordWizard/localServer.js new file mode 100644 index 0000000..be230fc --- /dev/null +++ b/wordWizard/localServer.js @@ -0,0 +1,13 @@ +'use strict'; +var wordWizard = require('./wordWizard.js'); + +function passInput(data, gameState, promptInquirer) { + wordWizard.handleInput(data, gameState, promptInquirer); +} + +function retrieveGameState() { + let gameState = wordWizard.gameStateGenerator(); + return gameState; +} + +module.exports = {passInput, retrieveGameState}; \ No newline at end of file diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index 4ae253f..b6a92fc 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -1,7 +1,10 @@ 'use strict'; let chalk = require('chalk'); let inquirer = require('inquirer'); -let wordWizard = require('./wordWizard.js'); +// let wordWizard = require('./wordWizard.js'); + +// TODO: this variable and its use will be replaced with Socket.io +let localServer = require('./localServer.js'); function promptInquirer(gameState) { inquirer.prompt([ @@ -18,10 +21,29 @@ function promptInquirer(gameState) { // data is an object which contains the player's guess, retrieved from prompt // gameState is the object tracking the word and guesses // promptInquirer passed as a callback - ]).then( (data) => wordWizard.handleInput(data, gameState, promptInquirer) ); + ]).then( (data) => localServer.passInput(data, gameState, promptInquirer) ) + .catch((error) => { + console.log(error); + }); +} + +function evaluateResponse(response) { + if (response.confirm) { + console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); + // main(); + } else { + console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); + return; + } } -let gameState = wordWizard.gameStateGenerator(); +function requestGameState() { + let gameState = localServer.retrieveGameState(); + return gameState; +} + + +let gameState = requestGameState(); promptInquirer(gameState); module.exports = promptInquirer; \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index c6cf767..6c9328b 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -3,7 +3,7 @@ var chalk = require('chalk'); var inquirer = require('inquirer'); let getWord = require('./word_logic/getWord.js'); let messages = require('./messages.js'); -let validation = require('./wordWizardValidation.js'); +let localServer = require('./localServer.js'); let GameState = require('./GameState.js'); @@ -27,27 +27,19 @@ function gameStateGenerator() { let wordObject = getWord(); let guessesRemainingSetting = 3; let hint = ''; - const gameState = new GameState(wordObject, guessesRemainingSetting, hint); + let gameState = new GameState(wordObject, guessesRemainingSetting, hint); gameState.wordObject.generateLetters(); return gameState; } -let gameState = gameStateGenerator(); +// let gameState = gameStateGenerator(); + -function evaluateResponse(response) { - if (response.confirm) { - console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); - // main(); - } else { - console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); - return 'skip'; - } -} // called in endGame, below -function endGameLog(outcome) { +function endGameLog(outcome, gameState) { if (outcome === 'winner') { console.log(chalk.blue.bold('\nPraise the Word Wizard! You have won!')); console.log(chalk.yellow('You guessed ') + chalk.cyanBright.bold(gameState.wordObject.correctWord.toUpperCase()) + ' ' + chalk.yellow('with ' + (gameState.guessesRemaining) + ' guesses remain.') + '\n'); @@ -59,9 +51,9 @@ function endGameLog(outcome) { // Reset function // called in handleInput, below -function endGame(outcome) { +function endGame(outcome, gameState) { - endGameLog(outcome); + endGameLog(outcome, gameState); // gameState.wordObject = getWord(); // gameState.wordObject.generateLetters(); @@ -82,16 +74,27 @@ function endGame(outcome) { // }); } - +function validateUserInput(guess, guessesSoFar) { + // Validate user input + if (guess === '') { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You did not enter a letter.')); + return; //wordWizard(); + } else if (guess.length > 1) { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' One letter at a time, friend...')); + return; //wordWizard(); + } else if (guessesSoFar.includes(guess)) { + console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You already guessed that! Choose another letter.')); + return; //wordWizard(); + } +} // Main game // export this function handleInput(data, gameState, cb) { - validation.validateUserInput(data.guess, gameState.guessesSoFar); + validateUserInput(data.guess, gameState.guessesSoFar); // Only decrement guessesRemaining on an incorrect guess - // ---- function-wrap this if (!gameState.wordObject.correctWord.includes(data.guess)) { gameState.guessesRemaining--; } @@ -101,14 +104,14 @@ function handleInput(data, gameState, cb) { gameState.wordObject.letters[i].check(data.guess); } if (gameState.wordObject.update().toLowerCase() == gameState.wordObject.correctWord.toLowerCase()) { - endGame('winner'); + endGame('winner', gameState); return; } if (gameState.guessesRemaining < 6) { gameState.hint = gameState.wordObject.hint; } if (gameState.guessesRemaining == 0) { - endGame('loss'); + endGame('loss', gameState); return; } // only called if validateUserInput is called with a function in addition to the data @@ -119,20 +122,21 @@ function handleInput(data, gameState, cb) { console.log('relocate the console log generating this and the next message'); console.log(chalk.cyan(messages.welcomeMessage)); +// remove the below? // main provided for local testing with ./index.js -const main = function() { - inquirer.prompt([ - { - name: 'guess', - prefix: '', - message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + - '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(gameState.guessesRemaining) + - '\nGuesses so far: ' + chalk.magenta.bold(gameState.guessesSoFar.join(' ')) + '\n' + - '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + - '\nHint: ' + chalk.red(gameState.hint) + '\n' + - 'Guess a letter:', - }, - ]).then( (data) => handleInput(data, gameState, main) ); -}; - -module.exports = {main, handleInput, gameStateGenerator}; \ No newline at end of file +// const main = function() { +// inquirer.prompt([ +// { +// name: 'guess', +// prefix: '', +// message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + +// '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(gameState.guessesRemaining) + +// '\nGuesses so far: ' + chalk.magenta.bold(gameState.guessesSoFar.join(' ')) + '\n' + +// '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + +// '\nHint: ' + chalk.red(gameState.hint) + '\n' + +// 'Guess a letter:', +// }, +// ]).then( (data) => handleInput(data, gameState, main) ); +// }; + +module.exports = {handleInput, validateUserInput, gameStateGenerator}; \ No newline at end of file diff --git a/wordWizard/wordWizardValidation.js b/wordWizard/wordWizardValidation.js index 51f3bca..e69de29 100644 --- a/wordWizard/wordWizardValidation.js +++ b/wordWizard/wordWizardValidation.js @@ -1,19 +0,0 @@ -'use strict'; -var chalk = require('chalk'); -var main = require('./wordWizard.js'); - -function validateUserInput(guess, guessesSoFar) { - // Validate user input - if (guess === '') { - console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You did not enter a letter.')); - return main(); - } else if (guess.length > 1) { - console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' One letter at a time, friend...')); - return main(); - } else if (guessesSoFar.includes(guess)) { - console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You already guessed that! Choose another letter.')); - return main(); - } -} - -module.exports = {validateUserInput}; \ No newline at end of file From 8458be0895a82632c85dbb7c1790bb334add00bf Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 19:48:27 -0800 Subject: [PATCH 56/64] functional game code running though remoteClient.js --- wordWizard/index.js | 5 --- wordWizard/package.json | 2 +- wordWizard/remoteClient.js | 4 +- wordWizard/wordWizard.js | 62 ++++++++++-------------------- wordWizard/wordWizardValidation.js | 0 5 files changed, 23 insertions(+), 50 deletions(-) delete mode 100644 wordWizard/index.js delete mode 100644 wordWizard/wordWizardValidation.js diff --git a/wordWizard/index.js b/wordWizard/index.js deleted file mode 100644 index cd07458..0000000 --- a/wordWizard/index.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -const remoteClient = require('./remoteClient.js'); - -remoteClient.main(); \ No newline at end of file diff --git a/wordWizard/package.json b/wordWizard/package.json index f1a4b58..ca3bef6 100644 --- a/wordWizard/package.json +++ b/wordWizard/package.json @@ -2,7 +2,7 @@ "name": "enseven-word-wizard", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "remoteClient.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index b6a92fc..dfaed0e 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -1,7 +1,6 @@ 'use strict'; let chalk = require('chalk'); let inquirer = require('inquirer'); -// let wordWizard = require('./wordWizard.js'); // TODO: this variable and its use will be replaced with Socket.io let localServer = require('./localServer.js'); @@ -42,8 +41,7 @@ function requestGameState() { return gameState; } - let gameState = requestGameState(); promptInquirer(gameState); -module.exports = promptInquirer; \ No newline at end of file +module.exports = promptInquirer, requestGameState; \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index 6c9328b..6af3d15 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -1,27 +1,9 @@ #!/usr/bin/env node -var chalk = require('chalk'); -var inquirer = require('inquirer'); +let chalk = require('chalk'); let getWord = require('./word_logic/getWord.js'); let messages = require('./messages.js'); -let localServer = require('./localServer.js'); let GameState = require('./GameState.js'); - - -// var guessesRemaining = guessesRemainingSetting; -// // var guessesSoFar = []; -// // let hint = ''; - -// const gameState = { -// wordObject: getWord(), -// guessesRemaining: guessesRemainingSetting, -// guessesSoFar: [], -// hint: '', -// }; - - - - //TODO: get wrapped in function function gameStateGenerator() { let wordObject = getWord(); @@ -34,10 +16,6 @@ function gameStateGenerator() { return gameState; } -// let gameState = gameStateGenerator(); - - - // called in endGame, below function endGameLog(outcome, gameState) { if (outcome === 'winner') { @@ -55,23 +33,26 @@ function endGame(outcome, gameState) { endGameLog(outcome, gameState); - // gameState.wordObject = getWord(); - // gameState.wordObject.generateLetters(); - // gameState.guessesRemaining = gameState.guessesRemainingSetting; - // gameState.guessesSoFar = []; - // gameState.hint = ''; - - // inquirer.prompt([ - // { - // message: messages.replay, - // name: 'confirm', - // type:'confirm', - // }, - // ]).then(function(response) { - // if(evaluateResponse(response) == 'skip') { - // return 'skip'; - // } - // }); + //the below code is for resetting the game and prompting for a replay + /* + gameState.wordObject = getWord(); + gameState.wordObject.generateLetters(); + gameState.guessesRemaining = gameState.guessesRemainingSetting; + gameState.guessesSoFar = []; + gameState.hint = ''; + + inquirer.prompt([ + { + message: messages.replay, + name: 'confirm', + type:'confirm', + }, + ]).then(function(response) { + if(evaluateResponse(response) == 'skip') { + return 'skip'; + } + }); + */ } function validateUserInput(guess, guessesSoFar) { @@ -89,7 +70,6 @@ function validateUserInput(guess, guessesSoFar) { } // Main game -// export this function handleInput(data, gameState, cb) { validateUserInput(data.guess, gameState.guessesSoFar); diff --git a/wordWizard/wordWizardValidation.js b/wordWizard/wordWizardValidation.js deleted file mode 100644 index e69de29..0000000 From f160f9235312f7bebea07f761538d1296ed2891f Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 19:49:23 -0800 Subject: [PATCH 57/64] updating readme.md with settings info --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 1d8c603..23ef171 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # Game-Engine A server designed to connect a socket.io game to a express framework + +to modify the number of guesses a user has, change the number in wordWizard.js>gameStateGenerator()>guessesRemainingSetting \ No newline at end of file From 82b8f3e6674925d230dbae6f03ba4b93c73c259f Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Fri, 7 Dec 2018 19:57:04 -0800 Subject: [PATCH 58/64] fixed input loop --- src/app.js | 50 ++++++++++++++++++++++++++---------------- src/lib/game-engine.js | 11 +++++++--- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/app.js b/src/app.js index 411dd5a..2a9db21 100644 --- a/src/app.js +++ b/src/app.js @@ -7,11 +7,9 @@ const Game = require('./lib/game-engine.js'); const superagent = require('superagent'); const ioserver = require('http').createServer(8080); const io = require('socket.io')(ioserver); -const players = io.of('/players'); -const spectators = io.of('spectators'); let socketConnections = []; -// ioserver.listen(8080); -let playCount = 0; + + // --- SOCKET IO --------------------------------- @@ -37,7 +35,7 @@ io.sockets.on('connection', (socket) => { .then(data => { userObj.auth = data.text; socket.emit('signed-in-user', userObj); - console.log(`${userObj.username} has signed up and signed in`); + console.log(`Returning user ${userObj.username} has signed in`); }) .catch(error => { console.log('Error signing in', error); @@ -92,20 +90,35 @@ io.sockets.on('connection', (socket) => { } }); - // Runs game related functions from game-engine.js - // wait for both players before starting + const getInput = () => { + console.log('emitting input request'); + socket.emit('input-request', output); + }; + let output; socket.on('play', () => { - console.log(Game.gameover); - socket.emit('input-request'); - socket.on('input', input => { - Game.applyInput(input); - console.log('input received,', input); - socket.emit('results', 'player1 results'); + getInput(); + }); + socket.on('input', input => { + if(Game.gameover === true) { __determineWinner(Game.player1); Game.endSession(); - }); + } + else if(Game.gameover === false) { + console.log('applying input'); + console.log(input.letter); + output = 'this is output from the game'; + Game.testGame++; + console.log('Playing the game...', Game.testGame); + if(Game.testGame < 3) { + Game.player1.didIWin = true; + Game.gameover = true; + } + getInput(); + } }); + + // Listens for quit event from either client during play. Will confirm the quit with both players socket.on('quit-game', () => { // get both players to send quit events @@ -120,12 +133,12 @@ io.sockets.on('connection', (socket) => { socket.removeAllListeners(); quitCount = 0; } - players.emit('end'); + socket.emit('end'); }); const __determineWinner = (player) => { console.log(player); - if(player.didIWin === true) { + if(Game.player1.didIWin === true) { console.log(`${player.username} won, storing results...`); superagent.post(`${process.env.API_URL}/api/v1/singlestat`) .send({name: player.username, win: player.didIWin}) @@ -137,7 +150,7 @@ io.sockets.on('connection', (socket) => { }) .catch(err => console.log(err)); } - else if(player.didIWin === false) { + else if(Game.player1.didIWin === false) { console.log(`${player.username} lost, storing results...`); superagent.post(`${process.env.API_URL}/api/v1/singlestat`) .send({name: player.username, win: player.didIWin}) @@ -150,10 +163,9 @@ io.sockets.on('connection', (socket) => { .catch(err => console.log('3')); } else { - console.log('Something went wrong determining the winner'); + console.log('Something went wrong determining the winner:', player); } }; - }); diff --git a/src/lib/game-engine.js b/src/lib/game-engine.js index 842394f..7a1ff9f 100644 --- a/src/lib/game-engine.js +++ b/src/lib/game-engine.js @@ -1,5 +1,6 @@ 'use strict'; + const Game = { gameover: false, isThereTwoPlayers: false, @@ -15,9 +16,13 @@ const Game = { applyInput: (input) => { // The parameter is the input from the current player client. Use this as the inputs for the game. Game.inputLog.push(input); - console.log('playing the game...', input); - Game.player1.didIWin = true; - Game.gameover = true; + console.log(input); + Game.testGame++; + console.log('Playing the game...', Game.testGame); + if(Game.testGame > 3) { + Game.player1.didIWin === true; + Game.gameover = true; + } }, endSession: () => { From c51cdef5edcef600d576f47970902e438bac8958 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 20:42:58 -0800 Subject: [PATCH 59/64] updating prompt results to pass as object in remoteClient.js>promptInquirer, localServer.js>passInput, and wordWizard.js>handleInput --- wordWizard/localServer.js | 4 ++-- wordWizard/remoteClient.js | 9 ++++++++- wordWizard/wordWizard.js | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/wordWizard/localServer.js b/wordWizard/localServer.js index be230fc..6394693 100644 --- a/wordWizard/localServer.js +++ b/wordWizard/localServer.js @@ -1,8 +1,8 @@ 'use strict'; var wordWizard = require('./wordWizard.js'); -function passInput(data, gameState, promptInquirer) { - wordWizard.handleInput(data, gameState, promptInquirer); +function passInput(promptResults) { + wordWizard.handleInput(promptResults); } function retrieveGameState() { diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index dfaed0e..e48f6c3 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -20,7 +20,14 @@ function promptInquirer(gameState) { // data is an object which contains the player's guess, retrieved from prompt // gameState is the object tracking the word and guesses // promptInquirer passed as a callback - ]).then( (data) => localServer.passInput(data, gameState, promptInquirer) ) + ]).then( (data) => { + let promptResults = { + data: data, + gameState: gameState, + callBack: promptInquirer, + }; + localServer.passInput(promptResults); + }) .catch((error) => { console.log(error); }); diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index 6af3d15..d807a1f 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -70,7 +70,10 @@ function validateUserInput(guess, guessesSoFar) { } // Main game -function handleInput(data, gameState, cb) { +function handleInput(promptResults) { + let data = promptResults.data; + let gameState = promptResults.gameState; + let cb = promptResults.callBack; validateUserInput(data.guess, gameState.guessesSoFar); From ed0c1a09cd11d52af40040dafcc89634c8655401 Mon Sep 17 00:00:00 2001 From: Brandon Haynes Date: Fri, 7 Dec 2018 21:12:15 -0800 Subject: [PATCH 60/64] cleaning out junk code, updating a path for the welcome message --- wordWizard/localServer.js | 9 +++-- wordWizard/remoteClient.js | 60 +++++++++++++++++++++++------ wordWizard/wordWizard.js | 77 ++++++++++---------------------------- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/wordWizard/localServer.js b/wordWizard/localServer.js index 6394693..e7acab3 100644 --- a/wordWizard/localServer.js +++ b/wordWizard/localServer.js @@ -6,8 +6,11 @@ function passInput(promptResults) { } function retrieveGameState() { - let gameState = wordWizard.gameStateGenerator(); - return gameState; + return wordWizard.gameStateGenerator(); } -module.exports = {passInput, retrieveGameState}; \ No newline at end of file +function retrieveWelcomeMessage() { + return wordWizard.provideWelcomeMessage(); +} + +module.exports = {passInput, retrieveGameState, retrieveWelcomeMessage}; \ No newline at end of file diff --git a/wordWizard/remoteClient.js b/wordWizard/remoteClient.js index e48f6c3..3b76a08 100644 --- a/wordWizard/remoteClient.js +++ b/wordWizard/remoteClient.js @@ -33,22 +33,58 @@ function promptInquirer(gameState) { }); } -function evaluateResponse(response) { - if (response.confirm) { - console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); - // main(); - } else { - console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); - return; - } -} +// -------- game beginning logic -------- function requestGameState() { - let gameState = localServer.retrieveGameState(); - return gameState; + return localServer.retrieveGameState(); +} + +function requestWelcomeMessage() { + return localServer.retrieveWelcomeMessage(); } +let welcomeMessage = requestWelcomeMessage(); +console.log(chalk.cyan(welcomeMessage)); + let gameState = requestGameState(); promptInquirer(gameState); +// -------------------------------------- + +module.exports = promptInquirer, requestGameState; + +let functionsToEvaluate = { + // This would be run at the end of the game to check if the user wants to play again + + // function resetGame(outcome, gameState) { + // //the below code is for resetting the game and prompting for a replay + // gameState.wordObject = getWord(); + // gameState.wordObject.generateLetters(); + // gameState.guessesRemaining = gameState.guessesRemainingSetting; + // gameState.guessesSoFar = []; + // gameState.hint = ''; + + // inquirer.prompt([ + // { + // message: messages.replay, + // name: 'confirm', + // type:'confirm', + // }, + // ]).then(function(response) { + // if(evaluateResponse(response) == 'skip') { + // return 'skip'; + // } + // }); + // } + + // This would be called after the above -module.exports = promptInquirer, requestGameState; \ No newline at end of file + // function evaluateResetResponse(response) { + // if (response.confirm) { + // console.log(chalk.cyan('\nGreat! The Word Wizard is conjuring a new word...')); + // // main(); + // } else { + // console.log(chalk.cyan('\nThe Word Wizard is displeased!\n')); + // return; + // } + // } +}; \ No newline at end of file diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index d807a1f..a95e7d6 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -16,7 +16,10 @@ function gameStateGenerator() { return gameState; } -// called in endGame, below +// -------- logic for outgoing data -------- + +// displays messages to indicate game outcome +// called in handleInput, under "logic for incoming data" function endGameLog(outcome, gameState) { if (outcome === 'winner') { console.log(chalk.blue.bold('\nPraise the Word Wizard! You have won!')); @@ -27,48 +30,26 @@ function endGameLog(outcome, gameState) { } } -// Reset function -// called in handleInput, below -function endGame(outcome, gameState) { - - endGameLog(outcome, gameState); - - //the below code is for resetting the game and prompting for a replay - /* - gameState.wordObject = getWord(); - gameState.wordObject.generateLetters(); - gameState.guessesRemaining = gameState.guessesRemainingSetting; - gameState.guessesSoFar = []; - gameState.hint = ''; - - inquirer.prompt([ - { - message: messages.replay, - name: 'confirm', - type:'confirm', - }, - ]).then(function(response) { - if(evaluateResponse(response) == 'skip') { - return 'skip'; - } - }); - */ - -} +// checks to make sure the input is correctly formatted function validateUserInput(guess, guessesSoFar) { - // Validate user input if (guess === '') { console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You did not enter a letter.')); - return; //wordWizard(); + return; } else if (guess.length > 1) { console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' One letter at a time, friend...')); - return; //wordWizard(); + return; } else if (guessesSoFar.includes(guess)) { console.log(chalk.bgRed.white('\nWHOOPS!') + chalk.yellow(' You already guessed that! Choose another letter.')); - return; //wordWizard(); + return; } } -// Main game + +function provideWelcomeMessage() { + return messages.welcomeMessage; +} +// -------------------------------------- + +// -------- logic for incoming data -------- function handleInput(promptResults) { let data = promptResults.data; @@ -87,39 +68,19 @@ function handleInput(promptResults) { gameState.wordObject.letters[i].check(data.guess); } if (gameState.wordObject.update().toLowerCase() == gameState.wordObject.correctWord.toLowerCase()) { - endGame('winner', gameState); + endGameLog('winner', gameState); return; } if (gameState.guessesRemaining < 6) { gameState.hint = gameState.wordObject.hint; } if (gameState.guessesRemaining == 0) { - endGame('loss', gameState); + endGameLog('loss', gameState); return; } // only called if validateUserInput is called with a function in addition to the data if ( typeof cb === 'function' ) { cb(gameState); } } +// -------------------------------------- -//TODO: get wrapped in function -console.log('relocate the console log generating this and the next message'); -console.log(chalk.cyan(messages.welcomeMessage)); - -// remove the below? -// main provided for local testing with ./index.js -// const main = function() { -// inquirer.prompt([ -// { -// name: 'guess', -// prefix: '', -// message: '\nWord: ' + chalk.cyanBright(gameState.wordObject.update()) + -// '\n\nIncorrect guesses remaining: ' + chalk.magenta.bold(gameState.guessesRemaining) + -// '\nGuesses so far: ' + chalk.magenta.bold(gameState.guessesSoFar.join(' ')) + '\n' + -// '\nCategory: ' + chalk.yellow(gameState.wordObject.category) + '\n' + -// '\nHint: ' + chalk.red(gameState.hint) + '\n' + -// 'Guess a letter:', -// }, -// ]).then( (data) => handleInput(data, gameState, main) ); -// }; - -module.exports = {handleInput, validateUserInput, gameStateGenerator}; \ No newline at end of file +module.exports = {handleInput, validateUserInput, gameStateGenerator, provideWelcomeMessage}; \ No newline at end of file From 182ed75d6e1e91a3eb4cea155c16f0b7bbf6a6cd Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Fri, 7 Dec 2018 22:18:46 -0800 Subject: [PATCH 61/64] got category and word string to send to client --- src/app.js | 30 +++++++++++++++++++----------- wordWizard/wordWizard.js | 5 +++-- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/app.js b/src/app.js index 2a9db21..83afaf1 100644 --- a/src/app.js +++ b/src/app.js @@ -1,6 +1,6 @@ 'use strict'; -// --- DEPENDANCIES ------------------------------ +// --- DEPENDENCIES ------------------------------ require('dotenv').config(); const Game = require('./lib/game-engine.js'); @@ -8,8 +8,16 @@ const superagent = require('superagent'); const ioserver = require('http').createServer(8080); const io = require('socket.io')(ioserver); let socketConnections = []; +// const Word = require('../wordWizard/Word.js'); +// const wordWizard = require('../wordWizard/localServer.js'); +// const client = require('../wordWizard/remoteClient.js'); +// let GameState = require('../wordWizard/GameState.js'); +let getWord = require('../wordWizard/word_logic/getWord.js'); +let word = getWord(); +word.generateLetters(); +console.log(word); // --- SOCKET IO --------------------------------- @@ -92,27 +100,27 @@ io.sockets.on('connection', (socket) => { const getInput = () => { console.log('emitting input request'); - socket.emit('input-request', output); + socket.emit('input-request', (word)); }; - let output; socket.on('play', () => { + // let gameState = wordWizard.gameStateGenerator(); + // console.log(gameState); getInput(); }); + let string; socket.on('input', input => { if(Game.gameover === true) { __determineWinner(Game.player1); Game.endSession(); } else if(Game.gameover === false) { + console.log('applying input'); - console.log(input.letter); - output = 'this is output from the game'; - Game.testGame++; - console.log('Playing the game...', Game.testGame); - if(Game.testGame < 3) { - Game.player1.didIWin = true; - Game.gameover = true; - } + console.log(input); + word.makeGuess(input); + word.string = word.update(); + + // console.log(GameState); getInput(); } }); diff --git a/wordWizard/wordWizard.js b/wordWizard/wordWizard.js index a95e7d6..4456f0a 100644 --- a/wordWizard/wordWizard.js +++ b/wordWizard/wordWizard.js @@ -6,10 +6,11 @@ let GameState = require('./GameState.js'); //TODO: get wrapped in function function gameStateGenerator() { + let guess = ''; let wordObject = getWord(); - let guessesRemainingSetting = 3; + let guessesRemainingSetting = 5; let hint = ''; - let gameState = new GameState(wordObject, guessesRemainingSetting, hint); + let gameState = new GameState(guess, wordObject, guessesRemainingSetting, hint); gameState.wordObject.generateLetters(); From c7426b28c7c5913806e94b318ff06bd8abb5215b Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Fri, 7 Dec 2018 22:31:06 -0800 Subject: [PATCH 62/64] words now change when restarted --- src/app.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app.js b/src/app.js index 83afaf1..f7be5b6 100644 --- a/src/app.js +++ b/src/app.js @@ -15,17 +15,18 @@ let socketConnections = []; let getWord = require('../wordWizard/word_logic/getWord.js'); -let word = getWord(); -word.generateLetters(); -console.log(word); -// --- SOCKET IO --------------------------------- +// --- SOCKET IO --------------------------------- +let word; // This function holds all emitters and listeners for Socket.IO io.sockets.on('connection', (socket) => { socketConnections.push(socket.id); console.log(socketConnections); socket.on('start', () => { + word = getWord(); + word.generateLetters(); + console.log(word); socket.emit('connected'); }); @@ -33,6 +34,7 @@ io.sockets.on('connection', (socket) => { socket.on('disconnect', () => { socket.removeAllListeners(); console.log(`${socket.id} has left the game`); + Game.endSession(); }); // handles logins for new and returning clients. Expected input: (Object) {username: 'username', password: 'password', email: 'email'} From dfbe2c49a2f6a770288f7ccaa6b8e62f65b8cbcf Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sat, 8 Dec 2018 09:33:16 -0800 Subject: [PATCH 63/64] refactor win/lose conditions --- src/app.js | 49 ++++++++++++++++++++++---------- wordWizard/word_logic/Word.js | 1 + wordWizard/word_logic/getWord.js | 3 +- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/app.js b/src/app.js index f7be5b6..e975d4d 100644 --- a/src/app.js +++ b/src/app.js @@ -18,15 +18,16 @@ let getWord = require('../wordWizard/word_logic/getWord.js'); // --- SOCKET IO --------------------------------- -let word; // This function holds all emitters and listeners for Socket.IO io.sockets.on('connection', (socket) => { + let word; socketConnections.push(socket.id); console.log(socketConnections); socket.on('start', () => { word = getWord(); word.generateLetters(); - console.log(word); + + // console.log(word); socket.emit('connected'); }); @@ -100,35 +101,53 @@ io.sockets.on('connection', (socket) => { } }); + + let thisGuess; const getInput = () => { - console.log('emitting input request'); - socket.emit('input-request', (word)); + if (word.count === 0 ) { + console.log('Out of guesses, game over'); + socket.emit('lost'); + Game.player1.didIWin = false; + __determineWinner(Game.player1); + Game.endSession(); + } + else { + if (thisGuess === word.string) { + word.count--; + } + console.log('emitting input request'); + console.log('sending word object:', word); + socket.emit('input-request', (word)); + } }; socket.on('play', () => { // let gameState = wordWizard.gameStateGenerator(); // console.log(gameState); getInput(); }); - let string; socket.on('input', input => { - if(Game.gameover === true) { + console.log('applying input'); + console.log(input); + word.makeGuess(input); + thisGuess = word.string; + word.string = word.update(); + console.log(word.correctWord.toUpperCase(), word.string); + if (word.string === word.correctWord.toUpperCase()) { + Game.player1.didIWin = true; + console.log('Game over'); + socket.emit('won'); __determineWinner(Game.player1); Game.endSession(); - } - else if(Game.gameover === false) { - - console.log('applying input'); - console.log(input); - word.makeGuess(input); - word.string = word.update(); - - // console.log(GameState); + } + else { getInput(); } + // console.log(GameState); }); + // Listens for quit event from either client during play. Will confirm the quit with both players socket.on('quit-game', () => { // get both players to send quit events diff --git a/wordWizard/word_logic/Word.js b/wordWizard/word_logic/Word.js index 5b2940f..24c7400 100644 --- a/wordWizard/word_logic/Word.js +++ b/wordWizard/word_logic/Word.js @@ -5,6 +5,7 @@ function Word(correctWord, hint, category) { this.category = category; this.hint = hint; this.letters = []; + this.count = 8; this.generateLetters = function() { var correctWordArray = this.correctWord.split(''); diff --git a/wordWizard/word_logic/getWord.js b/wordWizard/word_logic/getWord.js index 844ff9d..0dfce9d 100644 --- a/wordWizard/word_logic/getWord.js +++ b/wordWizard/word_logic/getWord.js @@ -43,8 +43,9 @@ function getWord(){ word: allWords[rando2].word[rando1], hint: allWords[rando2].hint[rando1], category: allWords[rando2].category, + count: 8, }; - return new Word(randomWord.word, randomWord.hint, randomWord.category); + return new Word(randomWord.word, randomWord.hint, randomWord.category, randomWord.count); } module.exports = getWord; From 55e817262452c519fdca28bd2366aa0b3b05fa9a Mon Sep 17 00:00:00 2001 From: Chris Kozlowski Date: Sat, 8 Dec 2018 13:19:48 -0800 Subject: [PATCH 64/64] push for master --- src/app.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app.js b/src/app.js index e975d4d..b413836 100644 --- a/src/app.js +++ b/src/app.js @@ -121,8 +121,6 @@ io.sockets.on('connection', (socket) => { } }; socket.on('play', () => { - // let gameState = wordWizard.gameStateGenerator(); - // console.log(gameState); getInput(); }); socket.on('input', input => { @@ -197,7 +195,8 @@ io.sockets.on('connection', (socket) => { }; }); - +let socket; +let gameObject; // --- EXPORTS ----------------------------------- const start = (port) => {