From 8905fc2954786424063a96fd59b762ee88822f1c Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 15:10:53 -0800 Subject: [PATCH 1/7] Scaffolded file tree, npm init, installed dependencies --- lab-catherine/.eslintignore | 5 + lab-catherine/.eslintrc.json | 27 + lab-catherine/.gitignore | 105 ++ lab-catherine/README.md | 39 + lab-catherine/index.js | 0 lab-catherine/package-lock.json | 1805 +++++++++++++++++++++++++++++++ lab-catherine/package.json | 32 + lab-catherine/public/index.html | 0 lab-catherine/public/style.css | 0 9 files changed, 2013 insertions(+) create mode 100644 lab-catherine/.eslintignore create mode 100644 lab-catherine/.eslintrc.json create mode 100644 lab-catherine/.gitignore create mode 100644 lab-catherine/README.md create mode 100644 lab-catherine/index.js create mode 100644 lab-catherine/package-lock.json create mode 100644 lab-catherine/package.json create mode 100644 lab-catherine/public/index.html create mode 100644 lab-catherine/public/style.css diff --git a/lab-catherine/.eslintignore b/lab-catherine/.eslintignore new file mode 100644 index 0000000..82ff623 --- /dev/null +++ b/lab-catherine/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/coverage/* +**/build/* \ No newline at end of file diff --git a/lab-catherine/.eslintrc.json b/lab-catherine/.eslintrc.json new file mode 100644 index 0000000..6f613f0 --- /dev/null +++ b/lab-catherine/.eslintrc.json @@ -0,0 +1,27 @@ +{ + "env": { + "browser": true, + "node": true, + "commonjs": true, + "jest": true, + "es6": true + }, + "globals": { + "err": true, + "req": true, + "res": true, + "next": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "no-console": "off", + "indent": [ "error", 2 ], + "quotes": ["error", "single", { "allowTemplateLiterals": true }], + "space-infix-ops": ["error", {"int32Hint": false}], + "comma-dangle": ["error", "always-multiline"], + "semi": [ "error", "always" ] + } +} \ No newline at end of file diff --git a/lab-catherine/.gitignore b/lab-catherine/.gitignore new file mode 100644 index 0000000..665ee22 --- /dev/null +++ b/lab-catherine/.gitignore @@ -0,0 +1,105 @@ + +# Created by https://www.gitignore.io/api/node,macos,visualstudiocode + +build + +db + +### macOS ### +*.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 + +### 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 + + +### VisualStudioCode ### +.vscode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history + +# End of https://www.gitignore.io/api/node,macos,visualstudiocode \ No newline at end of file diff --git a/lab-catherine/README.md b/lab-catherine/README.md new file mode 100644 index 0000000..f7c2746 --- /dev/null +++ b/lab-catherine/README.md @@ -0,0 +1,39 @@ +# Code Fellows: Seattle 401 JavaScript - 401d19 + +## Lab 41: Socket IO with Vanilla JS + +### Author: +Catherine Looper + +### Motivation + +### Build + +### Limitations + +To use this app - it is assumed that the user has familiarity with the tech and frameworks listed below. + +### Code Style + +Standard JavaScript with ES6. + +### Tech/Framework Used + +* eslint +* socket-io +* express +* faker + +### How to use? + +* Step 1. Fork and Clone the Repository. +* Step 2. `npm install` + +### Credits + +* Code Fellows + +### License + +MIT © Catherine Looper + diff --git a/lab-catherine/index.js b/lab-catherine/index.js new file mode 100644 index 0000000..e69de29 diff --git a/lab-catherine/package-lock.json b/lab-catherine/package-lock.json new file mode 100644 index 0000000..cb2cc79 --- /dev/null +++ b/lab-catherine/package-lock.json @@ -0,0 +1,1805 @@ +{ + "name": "lab-catherine", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", + "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "dev": true + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "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==" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "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==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "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=", + "dev": true + }, + "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.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "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": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "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=", + "dev": true, + "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=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "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", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "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=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "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=", + "dev": true + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz", + "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=", + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.6.9", + "engine.io-parser": "2.1.2", + "uws": "0.14.5", + "ws": "3.3.3" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz", + "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.6.9", + "engine.io-parser": "2.1.2", + "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", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "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=", + "dev": true + }, + "eslint": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.16.0.tgz", + "integrity": "sha512-YVXV4bDhNoHHcv0qzU4Meof7/P26B4EuaktMi5L1Tnt52Aov85KmYA8c5D+xyZr/BkhvwUqr011jDSD/QTULxg==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.2", + "esquery": "1.0.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.2.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "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", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "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==", + "dev": true + }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "dev": true, + "requires": { + "acorn": "5.3.0", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "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", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "faker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", + "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "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=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "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=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "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.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": 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=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": 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" + } + }, + "globals": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.2.0.tgz", + "integrity": "sha512-RDC7Tj17I/56wpVvCVLSXtnn2Fo6CQZ9vaj+ARn+qlzm/ozbKQZe+j9fvHZCbSq+4JSGjTpKEt7p/AA1IKXRFA==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "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", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "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" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "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.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "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=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "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==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "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", + "fresh": "0.5.2", + "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.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "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=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "requires": { + "debug": "2.6.9", + "engine.io": "3.1.4", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.4", + "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.1.2", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", + "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "requires": { + "component-emitter": "1.2.1", + "debug": "2.6.9", + "has-binary2": "1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "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=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "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", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uws": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz", + "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "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.1", + "ultron": "1.1.1" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/lab-catherine/package.json b/lab-catherine/package.json new file mode 100644 index 0000000..5d4299e --- /dev/null +++ b/lab-catherine/package.json @@ -0,0 +1,32 @@ +{ + "name": "lab-catherine", + "version": "1.0.0", + "description": "Socket-IO with Vanilla Javascript", + "main": "index.js", + "scripts": { + "test": "jest -i --coverage" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ccloops/41-Socket-IO.git" + }, + "keywords": [ + "socket-io", + "vanilla", + "js" + ], + "author": "Catherine Looper", + "license": "MIT", + "bugs": { + "url": "https://github.com/ccloops/41-Socket-IO/issues" + }, + "homepage": "https://github.com/ccloops/41-Socket-IO#readme", + "devDependencies": { + "eslint": "^4.16.0" + }, + "dependencies": { + "express": "^4.16.2", + "faker": "^4.1.0", + "socket.io": "^2.0.4" + } +} diff --git a/lab-catherine/public/index.html b/lab-catherine/public/index.html new file mode 100644 index 0000000..e69de29 diff --git a/lab-catherine/public/style.css b/lab-catherine/public/style.css new file mode 100644 index 0000000..e69de29 From c270c5d8cf7d04305ef8149cf10b1eda28bd1c08 Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 15:39:29 -0800 Subject: [PATCH 2/7] Basic chat functionality is working and rendering to the page --- lab-catherine/index.js | 27 +++++++++++++++++++++++++++ lab-catherine/public/index.html | 23 +++++++++++++++++++++++ lab-catherine/public/js/main.js | 19 +++++++++++++++++++ lab-catherine/public/style.css | 3 +++ 4 files changed, 72 insertions(+) create mode 100644 lab-catherine/public/js/main.js diff --git a/lab-catherine/index.js b/lab-catherine/index.js index e69de29..971841b 100644 --- a/lab-catherine/index.js +++ b/lab-catherine/index.js @@ -0,0 +1,27 @@ +const express = require('express'); +const app = express(); +const http = require('http').Server(app); +const io = require('socket.io')(http); + +app.use(express.static('./public')); + +io.on('connection', (socket) => { + console.log('JOINED', socket.id); + + socket.on('disconnect', () => { + console.log('LEFT', socket.id); + }); + + socket.on('send-message', (data) => { + console.log('MESSAGE:', data.message); + io.emit('receive-message', data); + }); +}); + +let port = 3000; +http.listen(port, () => { + console.log('http://localhost:' + port); +}); + + + diff --git a/lab-catherine/public/index.html b/lab-catherine/public/index.html index e69de29..08962b6 100644 --- a/lab-catherine/public/index.html +++ b/lab-catherine/public/index.html @@ -0,0 +1,23 @@ + + + + + + + + Sockets! + + +

Sockets!

+

chat chat chat

+ +
+ + +
+ +
+ + + + \ No newline at end of file diff --git a/lab-catherine/public/js/main.js b/lab-catherine/public/js/main.js new file mode 100644 index 0000000..150e2b6 --- /dev/null +++ b/lab-catherine/public/js/main.js @@ -0,0 +1,19 @@ +const socket = io(); +console.log('ID:', socket.id); + +let sendMessageForm = document.getElementById('message-form'); +let messageInput = document.getElementById('message-input'); +let messagesContainer = document.getElementById('messages'); + +sendMessageForm.addEventListener('submit', (event) => { + event.preventDefault(); + let message = messageInput.value; + socket.emit('send-message', {message: message}); +}); + +socket.on('receive-message', (data) => { + console.log('RECEIVED:', data); + let div = document.createElement('div'); + div.textContent = data.message; + messagesContainer.appendChild(div); +}); \ No newline at end of file diff --git a/lab-catherine/public/style.css b/lab-catherine/public/style.css index e69de29..3ea2de3 100644 --- a/lab-catherine/public/style.css +++ b/lab-catherine/public/style.css @@ -0,0 +1,3 @@ +body { + background-color: darksalmon; +} \ No newline at end of file From 7ce70c88fb9384f84422f7d7e8a99f707bcf498e Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 16:27:31 -0800 Subject: [PATCH 3/7] Added ability to update the username and see it render to the page --- lab-catherine/index.js | 25 ++++++++++++++++++++++--- lab-catherine/public/index.html | 5 +++++ lab-catherine/public/js/main.js | 22 ++++++++++++++++++---- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/lab-catherine/index.js b/lab-catherine/index.js index 971841b..f3dccaf 100644 --- a/lab-catherine/index.js +++ b/lab-catherine/index.js @@ -2,26 +2,45 @@ const express = require('express'); const app = express(); const http = require('http').Server(app); const io = require('socket.io')(http); +const faker = require('faker'); app.use(express.static('./public')); +const PLAYERS = {}; + io.on('connection', (socket) => { + PLAYERS[socket.id] = {}; + PLAYERS[socket.id].username = faker.fake('{{name.jobTitle}}'); + console.log(PLAYERS[socket.id].username); + + io.emit('playerdata', PLAYERS); + console.log('JOINED', socket.id); socket.on('disconnect', () => { console.log('LEFT', socket.id); + delete PLAYERS[socket.id]; }); socket.on('send-message', (data) => { + data.username = PLAYERS[socket.id].username; console.log('MESSAGE:', data.message); io.emit('receive-message', data); }); + + socket.on('submit-username', (msg) => { + console.log(msg.username); + if(msg.username === '') + return; + console.log(PLAYERS); + PLAYERS[socket.id].username = msg.username; + io.emit('playerdata', PLAYERS); + console.log(PLAYERS); + }); + }); let port = 3000; http.listen(port, () => { console.log('http://localhost:' + port); }); - - - diff --git a/lab-catherine/public/index.html b/lab-catherine/public/index.html index 08962b6..3b1d182 100644 --- a/lab-catherine/public/index.html +++ b/lab-catherine/public/index.html @@ -16,6 +16,11 @@

Sockets!

+
+ + +
+
diff --git a/lab-catherine/public/js/main.js b/lab-catherine/public/js/main.js index 150e2b6..029fb37 100644 --- a/lab-catherine/public/js/main.js +++ b/lab-catherine/public/js/main.js @@ -1,9 +1,22 @@ const socket = io(); console.log('ID:', socket.id); -let sendMessageForm = document.getElementById('message-form'); -let messageInput = document.getElementById('message-input'); -let messagesContainer = document.getElementById('messages'); +const sendMessageForm = document.getElementById('message-form'); +const messageInput = document.getElementById('message-input'); +const messagesContainer = document.getElementById('messages'); +const usernameForm = document.getElementById('username-form'); + +usernameForm.addEventListener('submit', (event) => { + event.preventDefault(); + + const usernameEl = document.getElementById('username-input'); + const username = usernameEl.value; + if(username === '') { + return; + } else { + socket.emit('submit-username', {username}); + } +}); sendMessageForm.addEventListener('submit', (event) => { event.preventDefault(); @@ -14,6 +27,7 @@ sendMessageForm.addEventListener('submit', (event) => { socket.on('receive-message', (data) => { console.log('RECEIVED:', data); let div = document.createElement('div'); - div.textContent = data.message; + let alias = data.username; + div.textContent = alias + ':' + data.message; messagesContainer.appendChild(div); }); \ No newline at end of file From f67e41121283f3d001cf6fd3f6a215755828c39a Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 17:01:55 -0800 Subject: [PATCH 4/7] Added a personalized welcome message --- lab-catherine/index.js | 5 ++++- lab-catherine/public/index.html | 11 ++++++----- lab-catherine/public/js/main.js | 16 +++++++++++++--- lab-catherine/public/style.css | 4 ++++ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lab-catherine/index.js b/lab-catherine/index.js index f3dccaf..30ae9cd 100644 --- a/lab-catherine/index.js +++ b/lab-catherine/index.js @@ -13,9 +13,12 @@ io.on('connection', (socket) => { PLAYERS[socket.id].username = faker.fake('{{name.jobTitle}}'); console.log(PLAYERS[socket.id].username); + socket.emit('set-header', {username: PLAYERS[socket.id].username}); + + io.emit('playerdata', PLAYERS); - console.log('JOINED', socket.id); + console.log('JOINED', PLAYERS[socket.id].username); socket.on('disconnect', () => { console.log('LEFT', socket.id); diff --git a/lab-catherine/public/index.html b/lab-catherine/public/index.html index 3b1d182..eebfdd3 100644 --- a/lab-catherine/public/index.html +++ b/lab-catherine/public/index.html @@ -8,18 +8,19 @@ Sockets! -

Sockets!

+

chat chat chat

+
+ + +
+
-
- - -
diff --git a/lab-catherine/public/js/main.js b/lab-catherine/public/js/main.js index 029fb37..4905262 100644 --- a/lab-catherine/public/js/main.js +++ b/lab-catherine/public/js/main.js @@ -1,5 +1,4 @@ const socket = io(); -console.log('ID:', socket.id); const sendMessageForm = document.getElementById('message-form'); const messageInput = document.getElementById('message-input'); @@ -15,6 +14,9 @@ usernameForm.addEventListener('submit', (event) => { return; } else { socket.emit('submit-username', {username}); + let header = document.getElementById('welcome'); + header.textContent = 'Welcome: ' + username + '!'; + } }); @@ -22,12 +24,20 @@ sendMessageForm.addEventListener('submit', (event) => { event.preventDefault(); let message = messageInput.value; socket.emit('send-message', {message: message}); + messageInput.value = ''; }); socket.on('receive-message', (data) => { console.log('RECEIVED:', data); let div = document.createElement('div'); let alias = data.username; - div.textContent = alias + ':' + data.message; + div.textContent = alias + ': ' + data.message; messagesContainer.appendChild(div); -}); \ No newline at end of file +}); + +socket.on('set-header', (data) => { + let alias = data.username; + let header = document.getElementById('welcome'); + header.append('Welcome: ' + alias + '!'); +}); + diff --git a/lab-catherine/public/style.css b/lab-catherine/public/style.css index 3ea2de3..a0f6149 100644 --- a/lab-catherine/public/style.css +++ b/lab-catherine/public/style.css @@ -1,3 +1,7 @@ body { background-color: darksalmon; +} + +form { + display: inline; } \ No newline at end of file From 48cc82990d14d9c8df96302993fe9ff1469c0f1d Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 17:38:05 -0800 Subject: [PATCH 5/7] Added styling to messages --- lab-catherine/public/js/main.js | 9 +++++---- lab-catherine/public/style.css | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lab-catherine/public/js/main.js b/lab-catherine/public/js/main.js index 4905262..27b4c1d 100644 --- a/lab-catherine/public/js/main.js +++ b/lab-catherine/public/js/main.js @@ -15,7 +15,7 @@ usernameForm.addEventListener('submit', (event) => { } else { socket.emit('submit-username', {username}); let header = document.getElementById('welcome'); - header.textContent = 'Welcome: ' + username + '!'; + header.textContent = 'Welcome: ' + username.toUpperCase() + '!'; } }); @@ -29,14 +29,15 @@ sendMessageForm.addEventListener('submit', (event) => { socket.on('receive-message', (data) => { console.log('RECEIVED:', data); + let timestamp = new Date().toLocaleTimeString(); let div = document.createElement('div'); - let alias = data.username; - div.textContent = alias + ': ' + data.message; + let alias = data.username.toUpperCase(); + div.textContent = timestamp + ' | ' + alias + ': ' + data.message; messagesContainer.appendChild(div); }); socket.on('set-header', (data) => { - let alias = data.username; + let alias = data.username.toUpperCase(); let header = document.getElementById('welcome'); header.append('Welcome: ' + alias + '!'); }); diff --git a/lab-catherine/public/style.css b/lab-catherine/public/style.css index a0f6149..b346044 100644 --- a/lab-catherine/public/style.css +++ b/lab-catherine/public/style.css @@ -1,7 +1,30 @@ body { background-color: darksalmon; + font-family: Baskerville; } form { display: inline; +} + +h1 { + font-size: 50px; +} + +#messages { + border: 2px solid black; + margin-top: 20px; + padding: 10px; +} + +div { + padding: 5px; +} + +#messages div:nth-child(even) { + background-color: #fff; +} + +div:nth-child(odd) { + background-color: cornsilk; } \ No newline at end of file From b1e7962cdf113870de38d88630958a869fff53dd Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 20:57:38 -0800 Subject: [PATCH 6/7] Refactored code to include an ES6 class to model chat messages and added an avatar option --- lab-catherine/index.js | 35 +++++------ lab-catherine/public/index.html | 18 ++++-- lab-catherine/public/js/main.js | 22 +++++-- .../public/js/models/chat-message.js | 34 +++++++++++ lab-catherine/public/style.css | 60 +++++++++++++++++-- 5 files changed, 133 insertions(+), 36 deletions(-) create mode 100644 lab-catherine/public/js/models/chat-message.js diff --git a/lab-catherine/index.js b/lab-catherine/index.js index 30ae9cd..3137fc2 100644 --- a/lab-catherine/index.js +++ b/lab-catherine/index.js @@ -1,3 +1,5 @@ +'use strict'; + const express = require('express'); const app = express(); const http = require('http').Server(app); @@ -6,39 +8,34 @@ const faker = require('faker'); app.use(express.static('./public')); -const PLAYERS = {}; +const CHATMEMBERS = {}; io.on('connection', (socket) => { - PLAYERS[socket.id] = {}; - PLAYERS[socket.id].username = faker.fake('{{name.jobTitle}}'); - console.log(PLAYERS[socket.id].username); - - socket.emit('set-header', {username: PLAYERS[socket.id].username}); - + CHATMEMBERS[socket.id] = {}; + CHATMEMBERS[socket.id].username = faker.fake('{{name.jobTitle}}'); + CHATMEMBERS[socket.id].avatar = 'https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/1859-Martinique.web.jpg/220px-1859-Martinique.web.jpg'; - io.emit('playerdata', PLAYERS); - - console.log('JOINED', PLAYERS[socket.id].username); + socket.emit('set-header', {username: CHATMEMBERS[socket.id].username}); socket.on('disconnect', () => { - console.log('LEFT', socket.id); - delete PLAYERS[socket.id]; + delete CHATMEMBERS[socket.id]; }); socket.on('send-message', (data) => { - data.username = PLAYERS[socket.id].username; - console.log('MESSAGE:', data.message); + data.timestamp = new Date().toLocaleTimeString(); + data.username = CHATMEMBERS[socket.id].username; + data.avatar = CHATMEMBERS[socket.id].avatar; io.emit('receive-message', data); }); socket.on('submit-username', (msg) => { - console.log(msg.username); if(msg.username === '') return; - console.log(PLAYERS); - PLAYERS[socket.id].username = msg.username; - io.emit('playerdata', PLAYERS); - console.log(PLAYERS); + CHATMEMBERS[socket.id].username = msg.username; + }); + + socket.on('submit-avatar', (data) => { + CHATMEMBERS[socket.id].avatar = data.avatar; }); }); diff --git a/lab-catherine/public/index.html b/lab-catherine/public/index.html index eebfdd3..9318e4f 100644 --- a/lab-catherine/public/index.html +++ b/lab-catherine/public/index.html @@ -9,21 +9,29 @@

-

chat chat chat

+

Start a chat below!

+
+ + +
+ +
-
- - + + +
- + +
+ \ No newline at end of file diff --git a/lab-catherine/public/js/main.js b/lab-catherine/public/js/main.js index 27b4c1d..df33db9 100644 --- a/lab-catherine/public/js/main.js +++ b/lab-catherine/public/js/main.js @@ -1,9 +1,12 @@ +'use strict'; + const socket = io(); const sendMessageForm = document.getElementById('message-form'); const messageInput = document.getElementById('message-input'); const messagesContainer = document.getElementById('messages'); const usernameForm = document.getElementById('username-form'); +const avatarForm = document.getElementById('avatar-form'); usernameForm.addEventListener('submit', (event) => { event.preventDefault(); @@ -28,12 +31,10 @@ sendMessageForm.addEventListener('submit', (event) => { }); socket.on('receive-message', (data) => { - console.log('RECEIVED:', data); - let timestamp = new Date().toLocaleTimeString(); - let div = document.createElement('div'); - let alias = data.username.toUpperCase(); - div.textContent = timestamp + ' | ' + alias + ': ' + data.message; - messagesContainer.appendChild(div); + let message = new ChatMessage(data); + message.render(messagesContainer); + // div.textContent = timestamp + ' | ' + alias + ': ' + data.message; + // messagesContainer.appendChild(div); }); socket.on('set-header', (data) => { @@ -42,3 +43,12 @@ socket.on('set-header', (data) => { header.append('Welcome: ' + alias + '!'); }); +avatarForm.addEventListener('submit', (event) => { + event.preventDefault(); + + const avatarEl = document.getElementById('avatar-input'); + const avatar = avatarEl.value; + socket.emit('submit-avatar', {avatar: avatar}); + +}); + diff --git a/lab-catherine/public/js/models/chat-message.js b/lab-catherine/public/js/models/chat-message.js new file mode 100644 index 0000000..dafbe4b --- /dev/null +++ b/lab-catherine/public/js/models/chat-message.js @@ -0,0 +1,34 @@ +'use strict'; + +class ChatMessage { + constructor(message) { + this.timestamp = message.timestamp; + this.username = message.username; + this.message = message.message; + this.avatar = message.avatar; + } + + render(parentElement) { + const container = document.createElement('div'); + const timestamp = document.createElement('span'); + const avatar = document.createElement('img'); + const username = document.createElement('span'); + const message = document.createElement('span'); + + container.classList.add('message'); + timestamp.classList.add('timestamp'); + username.classList.add('username'); + + timestamp.textContent = this.timestamp; + username.textContent = this.username + ': '; + message.textContent = this.message; + avatar.src = this.avatar; + + container.appendChild(avatar); + container.appendChild(timestamp); + container.appendChild(username); + container.appendChild(message); + + parentElement.appendChild(container); + } +} \ No newline at end of file diff --git a/lab-catherine/public/style.css b/lab-catherine/public/style.css index b346044..aeb6781 100644 --- a/lab-catherine/public/style.css +++ b/lab-catherine/public/style.css @@ -3,28 +3,76 @@ body { font-family: Baskerville; } -form { - display: inline; +textarea { + width: 300px; + height: 100px; + background-color: lightPink; +} + +input { + width: 100px; + background-color: lightPink; } h1 { font-size: 50px; } -#messages { - border: 2px solid black; - margin-top: 20px; - padding: 10px; +img { + object-fit: contain; + width: 50px; + height: 50px; } div { padding: 5px; } +#messages { + border: 2px solid black; + margin-top: 20px; + padding: 10px; +} + #messages div:nth-child(even) { background-color: #fff; } div:nth-child(odd) { background-color: cornsilk; +} + +.timestamp { + margin-right: 10px; +} + +.username { + font-weight: bold; + margin-right: 10px; +} + +button { + background-color: lightblue; + color: darkSlateGray; + padding: 5px; +} + +button:hover { + background-color: darkslategray; + color: cornsilk; +} + +#send-button { + background-color: darkslategray; + padding: 10px; + color: cornsilk; +} + +#send-button:hover { + background-color: lightblue; + color: darkslategray; +} + +#update-data { + text-align: right; } \ No newline at end of file From 184974bf57aa6b02ae169ef4fb513977bea939fa Mon Sep 17 00:00:00 2001 From: Catherine Looper Date: Mon, 29 Jan 2018 21:07:40 -0800 Subject: [PATCH 7/7] Updated README --- lab-catherine/README.md | 21 +++++++++++++++++++++ lab-catherine/public/img/chat-overview.png | Bin 0 -> 122796 bytes 2 files changed, 21 insertions(+) create mode 100644 lab-catherine/public/img/chat-overview.png diff --git a/lab-catherine/README.md b/lab-catherine/README.md index f7c2746..a6ee74a 100644 --- a/lab-catherine/README.md +++ b/lab-catherine/README.md @@ -2,13 +2,33 @@ ## Lab 41: Socket IO with Vanilla JS +![Simple Chat Overview](./public/img/chat-overview.png) + ### Author: Catherine Looper ### Motivation +This application is a simple chat website built with Vanilla JavaScript. Users can enter the chat, send messages, update their username and update their avatar. + +The messages display the users avatar, a timestamp (when the message was sent), the username, and the message itself. + ### Build +The chat message model contains the following properties: + +``` +class ChatMessage { + constructor(message) { + this.timestamp = message.timestamp; + this.username = message.username; + this.message = message.message; + this.avatar = message.avatar; + } +} + +``` + ### Limitations To use this app - it is assumed that the user has familiarity with the tech and frameworks listed below. @@ -28,6 +48,7 @@ Standard JavaScript with ES6. * Step 1. Fork and Clone the Repository. * Step 2. `npm install` +* Step 3. Run `nodemon` ### Credits diff --git a/lab-catherine/public/img/chat-overview.png b/lab-catherine/public/img/chat-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9d18bec187d4e50c4dec1b5752192fb0e8905172 GIT binary patch literal 122796 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 L7Dl-SPM7`yw-4=f literal 0 HcmV?d00001