From 1921d7582fffe55b89d72497b8d69414bd4ed98f Mon Sep 17 00:00:00 2001 From: faksam Date: Sat, 25 Nov 2017 08:21:35 +0100 Subject: [PATCH 1/8] create api endpoints --- .babelrc | 3 + .travis.yml | 3 + README.md | 5 + server/.babelrc | 3 + server/app.js | 4 +- server/bin/www | 1 + server/event-manager/center-events.json | 136 +++++ server/event-manager/centers.json | 85 ++++ server/package-lock.json | 647 +++++++++++++++++++++++- server/package.json | 17 +- server/routes/centers.js | 74 ++- server/routes/events.js | 2 +- server/test/test.js | 90 ++++ template/New File | 38 ++ template/addcenter.html | 64 ++- template/addevent.html | 246 ++++----- template/admindashboard.html | 221 ++++++++ template/centerdetails.html | 135 +++++ template/editcenter.html | 144 ++++++ template/index.html | 4 +- template/login.html | 4 +- template/searchcenters.html | 67 ++- template/searchevents.html | 4 +- template/signup.html | 4 +- template/userdashboard.html | 61 ++- 25 files changed, 1859 insertions(+), 203 deletions(-) create mode 100644 .babelrc create mode 100644 .travis.yml create mode 100644 server/.babelrc create mode 100644 server/event-manager/center-events.json create mode 100644 server/test/test.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..af0f0c3 --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7a56d2a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "stable" diff --git a/README.md b/README.md index cd73e79..734d14a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ Andela Pre-Bootcamp "Developer Challenge" Given you manage an events center, this app will help you accept applications to use your center / facilities, and will either decline events when the proposed day is already taken, or suggest an available day Create a Pivotal Tracker Board +# Install dependencies +npm install + +# Serve at localhost:8000 +npm run start:dev ### The client-side and server-side features are as follows: - User signup and signin pages. diff --git a/server/.babelrc b/server/.babelrc new file mode 100644 index 0000000..af0f0c3 --- /dev/null +++ b/server/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} \ No newline at end of file diff --git a/server/app.js b/server/app.js index 56a6fc3..f2a8e37 100644 --- a/server/app.js +++ b/server/app.js @@ -1,4 +1,4 @@ - +//import express from 'express'; const express = require('express'); const logger = require('morgan'); @@ -22,7 +22,7 @@ app.use(bodyParser.urlencoded({ extended: false })); // message: 'Welcome to the beginning of nothingness.', //})); -app.use(express.static(path.join(__dirname, '../template'))); +app.use(express.static(path.join(__dirname, '../template')));//remove ../ pass template ass // Require static assets from template folder app.use('../template', express.static(path.join(__dirname + '../template'))); diff --git a/server/bin/www b/server/bin/www index 1563623..fd06e7a 100644 --- a/server/bin/www +++ b/server/bin/www @@ -1,5 +1,6 @@ // This will be our application entry. We'll setup our server here. const http = require('http'); +require('babel-register'); const app = require('../app'); // The express app we just created const port = parseInt(process.env.PORT, 10) || 8000; diff --git a/server/event-manager/center-events.json b/server/event-manager/center-events.json new file mode 100644 index 0000000..25d18f4 --- /dev/null +++ b/server/event-manager/center-events.json @@ -0,0 +1,136 @@ +{ + "centers": [ + { + "id": 1, + "name": "Civic Innovation Lab1", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + }, + { + "id": 2, + "name": "Civic Innovation Lab2", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + }, + { + "id": 3, + "name": "Civic Innovation Lab3", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + }, + { + "id": 4, + "name": "Civic Innovation Lab4", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + }, + { + "id": 5, + "name": "Civic Innovation Lab5", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + }, + { + "id": 6, + "name": "Civic Innovation Lab6", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "booked-events": [ + { + "booked-by": "", + "date": "", + "email": "", + "phone": "" + } + ] + } + ] +} \ No newline at end of file diff --git a/server/event-manager/centers.json b/server/event-manager/centers.json index f833852..504468c 100644 --- a/server/event-manager/centers.json +++ b/server/event-manager/centers.json @@ -16,6 +16,91 @@ "first_name": "John", "last_name": "Smith", "phone": "219-839-2819" + }, + { + "id": 2, + "name": "Civic Innovation Lab2", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" + }, + { + "id": 3, + "name": "Civic Innovation Lab3", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" + }, + { + "id": 4, + "name": "Civic Innovation Lab4", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" + }, + { + "id": 5, + "name": "Civic Innovation Lab5", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" + }, + { + "id": 6, + "name": "Civic Innovation Lab6", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" } ] } \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index 0628696..eda5ee8 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -166,12 +166,47 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.11.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -225,6 +260,68 @@ } } }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", @@ -271,6 +368,18 @@ "babel-types": "6.26.0" } }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", @@ -352,6 +461,16 @@ "babel-types": "6.26.0" } }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", @@ -376,18 +495,59 @@ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", @@ -399,6 +559,31 @@ "babel-runtime": "6.26.0" } }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", @@ -644,6 +829,16 @@ "babel-runtime": "6.26.0" } }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", @@ -663,6 +858,25 @@ "babel-types": "6.26.0" } }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, "babel-preset-env": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", @@ -701,6 +915,93 @@ "semver": "5.4.1" } }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-es2015-node5": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-es2015-node5/-/babel-preset-es2015-node5-1.2.0.tgz", + "integrity": "sha1-3tw4F41Yc6B74wZbX2afyQZ364s=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -762,8 +1063,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "basic-auth": { "version": "2.0.0", @@ -820,7 +1120,6 @@ "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" @@ -837,6 +1136,12 @@ "repeat-element": "1.1.2" } }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, "browserslist": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.1.tgz", @@ -890,6 +1195,33 @@ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", "dev": true }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.5" + } + }, + "chai-http": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-3.0.0.tgz", + "integrity": "sha1-VGDYA24fGhKwtbXL1Snm3B0x60s=", + "dev": true, + "requires": { + "cookiejar": "2.0.6", + "is-ip": "1.0.0", + "methods": "1.1.2", + "qs": "6.5.1", + "superagent": "2.3.0" + } + }, "chalk": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", @@ -907,6 +1239,12 @@ "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -986,11 +1324,31 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.0", @@ -1027,6 +1385,12 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -1037,6 +1401,12 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "cookiejar": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", + "integrity": "sha1-Cr81atANHFohnYjURRgEbdAmrP4=", + "dev": true + }, "core-js": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", @@ -1083,6 +1453,15 @@ "ms": "2.0.0" } }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.5" + } + }, "deep-extend": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", @@ -1118,6 +1497,12 @@ } } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", @@ -1128,6 +1513,21 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, "doctrine": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", @@ -1412,6 +1812,12 @@ } } }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, "external-editor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", @@ -1536,6 +1942,23 @@ "for-in": "1.0.2" } }, + "form-data": { + "version": "1.0.0-rc4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", + "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", + "dev": true, + "requires": { + "async": "1.5.2", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "formidable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "dev": true + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -1552,11 +1975,16 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha1-4y/AMKLM7kSmtTcTCNpUvgs5fSc=", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "functional-red-black-tree": { "version": "1.0.1", @@ -1569,6 +1997,12 @@ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.2.0.tgz", "integrity": "sha512-JjcXDHT84icN/kFaF5+rNd1trZsgJFVqTSgM9dv6eayxSIQKMq0ilBJ+5pvf0SgimacMlZEsav4oL+4dUE4E2g==" }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -1579,7 +2013,6 @@ "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", @@ -1669,6 +2102,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -1692,6 +2131,22 @@ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, "http-errors": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", @@ -1741,7 +2196,6 @@ "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" @@ -1789,6 +2243,12 @@ "loose-envify": "1.3.1" } }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true + }, "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", @@ -1841,6 +2301,15 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, "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", @@ -1866,6 +2335,15 @@ "is-path-inside": "1.0.0" } }, + "is-ip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-1.0.0.tgz", + "integrity": "sha1-K7aVn3l8zW+f3IEnWLy8h8TFkHQ=", + "dev": true, + "requires": { + "ip-regex": "1.0.3" + } + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -2016,6 +2494,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -2256,7 +2740,6 @@ "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" } @@ -2284,6 +2767,44 @@ } } }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "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" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, "moment": { "version": "2.19.2", "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz", @@ -2415,7 +2936,6 @@ "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" } @@ -2443,12 +2963,29 @@ "wordwrap": "1.0.0" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, "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 }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -2492,8 +3029,7 @@ "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -2512,6 +3048,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -2896,6 +3438,15 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", @@ -2935,7 +3486,6 @@ "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" } @@ -3092,6 +3642,12 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", @@ -3101,6 +3657,21 @@ "is-fullwidth-code-point": "2.0.0" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -3170,6 +3741,24 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "superagent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", + "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.0.6", + "debug": "2.6.9", + "extend": "3.0.1", + "form-data": "1.0.0-rc4", + "formidable": "1.1.1", + "methods": "1.1.2", + "mime": "1.4.1", + "qs": "6.5.1", + "readable-stream": "2.3.3" + } + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -3264,6 +3853,12 @@ "nopt": "1.0.10" } }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, "tryit": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", @@ -3279,6 +3874,12 @@ "prelude-ls": "1.1.2" } }, + "type-detect": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz", + "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==", + "dev": true + }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", @@ -3351,6 +3952,12 @@ "prepend-http": "1.0.4" } }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3367,6 +3974,15 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, "validator": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/validator/-/validator-9.1.1.tgz", @@ -3449,8 +4065,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", diff --git a/server/package.json b/server/package.json index 0a87028..c7ed562 100644 --- a/server/package.json +++ b/server/package.json @@ -5,7 +5,8 @@ "main": "index.js", "scripts": { "start:dev": "nodemon ./bin/www", - "test": "echo \"Error: no test specified\" && exit 1" + "build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./.babelrc,./package.json,./npm-debug.log --copy-files", + "test": "mocha --recursive" }, "repository": { "type": "git", @@ -23,13 +24,25 @@ "express": "^4.16.2", "jsonfile": "^4.0.0", "morgan": "^1.9.0", + "rimraf": "^2.6.1", "pg": "^7.4.0", "pg-hstore": "^2.3.2", "sequelize": "^4.22.11" }, "devDependencies": { + "babel-cli": "^6.26.0", + "babel-core": "*", "babel-preset-env": "^1.6.1", + "babel-preset-es2015": "^6.24.1", + "babel-preset-es2015-node5": "*", + "babel-preset-stage-2": "^6.24.1", + "babel-preset-stage-3": "*", + "babel-register": "^6.26.0", + "chai": "^4.1.2", + "chai-http": "^3.0.0", "eslint": "^4.11.0", - "nodemon": "^1.12.1" + "mocha": "^4.0.1", + "nodemon": "^1.12.1", + "rimraf": "^2.6.2" } } diff --git a/server/routes/centers.js b/server/routes/centers.js index 0eacda1..7acf2aa 100644 --- a/server/routes/centers.js +++ b/server/routes/centers.js @@ -1,37 +1,64 @@ var express = require('express'); +const logger = require('morgan'); +var path = require('path'); +const bodyParser = require('body-parser'); var router = express.Router(); var jsonfile = require('jsonfile') var file = 'event-manager/centers.json' +// Set up the express app +const app = express(); jsonfile.readFile(file, function (err, obj) { - console.dir(obj) -}) -var Center = require('../models/Center.js'); + console.dir(obj); +}); +//var Center = require('../models/Center.js'); /* GET /todos listing. */ router.get('/', function (req, res, next) { - var d; jsonfile.readFile(file, function (err, obj) { if (err) throw err; - console.log(obj); - d = obj; - console.log("in router"); - console.log(d); - res.render('searchcenters', { centers: obj }); + res.json(obj);//res.render('searchcenters', { centers: obj }); }); }); +// Log requests to the console. +app.use(logger('dev')); + +// Parse incoming requests data (https://github.com/expressjs/body-parser) +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); + +app.use(express.static(path.join(__dirname, '../../template'))); +// Require static assets from template folder +app.use('../../template', express.static(path.join(__dirname + '../../template'))); + +// view engine setup +app.set('views', path.join(__dirname, '../../template')); + +app.engine('html', require('ejs').renderFile); +app.set('view engine', 'html'); +//app.set('view engine', 'ejs'); /* POST /todos */ router.post('/', function (req, res, next) { - Center.create(req.body, function (err, post) { - if (err) return next(err); - res.json(post); - }); + + jsonfile.writeFile(file, req.body, { flag: 'a' }, function (err) { + console.error(err) + }) }); /* GET /todos/id */ router.get('/:id', function (req, res, next) { - res.render('centerdetails.html'); + jsonfile.readFile(file, function (err, obj) { + if (err) throw err; + console.log("Object centers:"+obj.centers); + for (var x in obj.centers) { + var i = req.params.id; + if (obj.centers[x].id && obj.centers[x].id == i) + + res.json(obj.centers[x]); + } + //.render('centerdetails', { centers: obj }); + }); }); /* PUT /todos/:id */ @@ -44,9 +71,22 @@ router.put('/:id', function (req, res, next) { /* DELETE /todos/:id */ router.delete('/:id', function (req, res, next) { - Center.findByIdAndRemove(req.params.id, req.body, function (err, post) { - if (err) return next(err); - res.json(post); + jsonfile.readFile(file, function (err, obj) { + if (err) throw err; + for (var x in obj.centers) { + var i = req.params.id; + if (obj.centers[x].id && obj.centers[x].id == i) { + + console.log("Object centers:" + obj.centers[x]); + delete obj.centers.splice(x, 1); + jsonfile.writeFile(file, obj, function (err) { + console.error(err) + }); + res.json(obj.centers); + } + + } + //.render('centerdetails', { centers: obj }); }); }); diff --git a/server/routes/events.js b/server/routes/events.js index 2ad84b8..62d7eca 100644 --- a/server/routes/events.js +++ b/server/routes/events.js @@ -7,7 +7,7 @@ jsonfile.readFile(file, function (err, obj) { console.dir(obj) }) -var Event = require('../models/Event.js'); +//var Event = require('../models/Event.js'); /* GET /todos listing. */ //router.get('/', function (req, res, next) { diff --git a/server/test/test.js b/server/test/test.js new file mode 100644 index 0000000..a6a32ec --- /dev/null +++ b/server/test/test.js @@ -0,0 +1,90 @@ +'use strict'; + +const chai = require('chai'); +const expect = require('chai').expect; + +chai.use(require('chai-http')); + +const app = require('../app.js'); // Our app + +describe('API endpoint /centers', function () { + this.timeout(5000); // How long to wait for a response (ms) + + before(function () { + + }); + + after(function () { + + }); + + // GET - List all centers + it('should return all centers', function () { + return chai.request(app) + .get('/centers') + .then(function (res) { + expect(res).to.have.status(200); + expect(res).to.be.json; + expect(res.body).to.be.an('object'); + expect(res.body.results).to.be.an('array'); + }); + }); + + // GET - Invalid path + it('should return Not Found', function () { + return chai.request(app) + .get('/INVALID_PATH') + .then(function (res) { + throw new Error('Path exists!'); + }) + .catch(function (err) { + expect(err).to.have.status(404); + }); + }); + + // POST - Add new color + it('should add new center', function () { + return chai.request(app) + .post('/centers') + .send({ + "id": 7, + "name": "Civic Innovation Lab7", + "address": "II Wuse Road Abuja, Nigeria", + "capacity": 500, + "description": "It is a Civic kinda thingly", + "facilities": [ + { + "projector": true, + "no-chairs": 650, + "video-overage": true + } + ], + "first_name": "John", + "last_name": "Smith", + "phone": "219-839-2819" + }) + .then(function (res) { + expect(res).to.have.status(201); + expect(res).to.be.json; + expect(res.body).to.be.an('object'); + expect(res.body.results).to.be.an('array').that.includes( + 'YELLOW'); + }); + }); + + // POST - Bad Request + it('should return Bad Request', function () { + return chai.request(app) + .post('/centers') + .type('form') + .send({ + color: 'YELLOW' + }) + .then(function (res) { + throw new Error('Invalid content type!'); + }) + .catch(function (err) { + expect(err).to.have.status(400); + }); + }); +}); \ No newline at end of file diff --git a/template/New File b/template/New File index ab896c5..79feb2c 100644 --- a/template/New File +++ b/template/New File @@ -1,3 +1,5 @@ +npm run start:dev + My expectations of the Andela Bootcamp The Andela Bootcamp is a two-week, simulated development sprint led by senior Andela developers. The two weeks comprise of one week of home-based self-learning and one week of product development on-site at the Andela Epic Tower. During this time we are expected to learn independently as well as on a team to deliver a final project. @@ -74,6 +76,42 @@ Stand ups *Blockers* >-Power +Thursday +Stand ups +*Last 24 Hours* +>-wrote a medium post on My Experience In Bootcamp So Far +>-worked on the bootcamp Challenge 2 +>-Study and research for better understanding of the bootcamp project +>-check the items I've completed on the trello board checklist +>-would apply today's learnings as I work on the Bootcamp Project. + +*Next 24 Hours* +>-study skills sessions targeted for today +>-participate in a class interaction with my peers to build relationships. +>-would submit your well-structured PivotalTracker board for assessment. +>-Study and research for better understanding of the bootcamp project +>-check the items I've completed on the trello board checklist +>-would apply today's learnings as I work on the Bootcamp Project. + +*Blockers* +>-Power + +Friday +Stand ups +*Last 24 Hours* +>-watched the daily videos for the day +>-studied and research for better understanding of the bootcamp project +>-checked the items I've completed on the trello board checklist +>-would apply today's learnings as I work on the Bootcamp Project. + +*Next 24 Hours* +>-would work on the Bootcamp Project. +>-would submit my PivotalTracker board on trello for assessment. +>-would participate in a class interaction with my peers to build relationships. + +*Blockers* +>-None + Tuesday diff --git a/template/addcenter.html b/template/addcenter.html index d609bec..a429e02 100644 --- a/template/addcenter.html +++ b/template/addcenter.html @@ -16,35 +16,51 @@ -
- +
+
+
-
-
-
-

Add a new center

+
+
+
+
+

Create a new center

+ + + + + -


+ + + + + Addsend    + Cancelcancel +
+


+
+ + + + + \ No newline at end of file diff --git a/template/admindashboard.html b/template/admindashboard.html index e69de29..6ace5ba 100644 --- a/template/admindashboard.html +++ b/template/admindashboard.html @@ -0,0 +1,221 @@ + + + + Event Manager + + + + + + + + + + + + + + +
+ + +
+ + + + + + + \ No newline at end of file diff --git a/template/centerdetails.html b/template/centerdetails.html index e69de29..4f301d3 100644 --- a/template/centerdetails.html +++ b/template/centerdetails.html @@ -0,0 +1,135 @@ + + + + Event Manager + + + + + + + + + + + + + + + +
+ +
+ +
+
+

Civic-Innovation-Hub

+

II Wuse Road Abuja, Nigeria

+

The best event center in the world

+

500 Capacity

+
+
+ + + + + + + \ No newline at end of file diff --git a/template/editcenter.html b/template/editcenter.html index e69de29..3968b57 100644 --- a/template/editcenter.html +++ b/template/editcenter.html @@ -0,0 +1,144 @@ + + + + Event Manager + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+

Create a new center

+ + + + + + + + + + + Addsend    + Cancelcancel +
+
+
+


+
+
+ + + + + + + \ No newline at end of file diff --git a/template/index.html b/template/index.html index 9693028..41ee2dd 100644 --- a/template/index.html +++ b/template/index.html @@ -25,12 +25,12 @@ menu diff --git a/template/login.html b/template/login.html index 53fc6e9..ea8fdc0 100644 --- a/template/login.html +++ b/template/login.html @@ -23,12 +23,12 @@ menu diff --git a/template/searchcenters.html b/template/searchcenters.html index d8dbbf0..c9d3710 100644 --- a/template/searchcenters.html +++ b/template/searchcenters.html @@ -17,7 +17,7 @@ -
+
+