├── client
├── static
│ └── .gitkeep
├── .eslintignore
├── config
│ ├── prod.env.js
│ ├── test.env.js
│ ├── dev.env.js
│ └── index.js
├── src
│ ├── assets
│ │ ├── logo.png
│ │ └── login_logo@2x.png
│ ├── routes
│ │ └── home
│ │ │ └── Home.vue
│ ├── components
│ │ ├── AppSidebar
│ │ │ └── AppSidebar.vue
│ │ └── AppHeader
│ │ │ └── AppHeader.vue
│ ├── router
│ │ └── index.js
│ ├── main.js
│ └── App.vue
├── .gitignore
├── test
│ ├── unit
│ │ ├── .eslintrc
│ │ ├── specs
│ │ │ └── Hello.spec.js
│ │ ├── index.js
│ │ └── karma.conf.js
│ └── e2e
│ │ ├── specs
│ │ └── test.js
│ │ ├── custom-assertions
│ │ └── elementCount.js
│ │ ├── runner.js
│ │ └── nightwatch.conf.js
├── .editorconfig
├── .postcssrc.js
├── README.md
├── index.html
├── build
│ ├── dev-client.js
│ ├── vue-loader.conf.js
│ ├── webpack.test.conf.js
│ ├── build.js
│ ├── check-versions.js
│ ├── webpack.dev.conf.js
│ ├── webpack.base.conf.js
│ ├── utils.js
│ ├── dev-server.js
│ └── webpack.prod.conf.js
├── .babelrc
├── .eslintrc.js
└── package.json
├── server
├── .gitignore
├── src
│ ├── models
│ │ ├── index.js
│ │ └── users
│ │ │ └── userModel.js
│ ├── api
│ │ └── v1
│ │ │ ├── login
│ │ │ ├── loginRoutes.js
│ │ │ └── loginController.js
│ │ │ ├── users
│ │ │ ├── userValidation.js
│ │ │ ├── userRoutes.js
│ │ │ └── userController.js
│ │ │ └── signUp
│ │ │ ├── signupValidation.js
│ │ │ ├── signUpRoutes.js
│ │ │ └── signUpController.js
│ ├── utils
│ │ ├── ApiError.js
│ │ └── passportMiddleweare.js
│ ├── libs
│ │ └── winston.js
│ ├── config
│ │ ├── config.js
│ │ ├── dbTest.js
│ │ └── db.js
│ └── index.js
├── Dockerfile
├── docker-compose.yml
├── README.md
├── package.json
├── test
│ ├── login
│ │ └── login.spec.js
│ ├── users
│ │ └── users.spec.js
│ └── signup
│ │ └── signup.spec.js
└── yarn.lock
└── README.md
/client/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/.eslintignore:
--------------------------------------------------------------------------------
1 | build/*.js
2 | config/*.js
3 |
--------------------------------------------------------------------------------
/client/config/prod.env.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | NODE_ENV: '"production"'
3 | }
4 |
--------------------------------------------------------------------------------
/server/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .idea/
3 | npm-debug.log
4 | coverage
5 | .DS_Store
6 | /*.env
--------------------------------------------------------------------------------
/client/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madmous/HipChat-Clone/HEAD/client/src/assets/logo.png
--------------------------------------------------------------------------------
/client/src/assets/login_logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/madmous/HipChat-Clone/HEAD/client/src/assets/login_logo@2x.png
--------------------------------------------------------------------------------
/server/src/models/index.js:
--------------------------------------------------------------------------------
1 | let index = {};
2 |
3 | index.userModel = require ('./users/userModel');
4 |
5 | module.exports = index;
--------------------------------------------------------------------------------
/client/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 | yarn-error.log
6 | test/unit/coverage
7 | test/e2e/reports
8 | selenium-debug.log
9 |
--------------------------------------------------------------------------------
/client/test/unit/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | },
5 | "globals": {
6 | "expect": true,
7 | "sinon": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/client/config/test.env.js:
--------------------------------------------------------------------------------
1 | var merge = require('webpack-merge')
2 | var devEnv = require('./dev.env')
3 |
4 | module.exports = merge(devEnv, {
5 | NODE_ENV: '"testing"'
6 | })
7 |
--------------------------------------------------------------------------------
/client/config/dev.env.js:
--------------------------------------------------------------------------------
1 | var merge = require('webpack-merge')
2 | var prodEnv = require('./prod.env')
3 |
4 | module.exports = merge(prodEnv, {
5 | NODE_ENV: '"development"'
6 | })
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [HipChat Clone](https://github.com/Madmous/Trello-Clone/tree/develop/client/hipchat) was moved. Check my huge mono repo that will contain a bunch of application and micro services.
--------------------------------------------------------------------------------
/client/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/server/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:6
2 |
3 | RUN mkdir -p /src/app
4 | COPY . /src/app
5 | WORKDIR /src/app
6 | RUN npm install --production
7 |
8 | ENV PORT 80
9 | EXPOSE $PORT
10 |
11 | CMD ["npm", "start"]
--------------------------------------------------------------------------------
/client/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | // to edit target browsers: use "browserlist" field in package.json
6 | "autoprefixer": {}
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | This project was bootstrapped with [Vue cli](https://github.com/vuejs/vue-cli).
2 |
3 | ## Main Libraries
4 |
5 | * Vuex
6 |
7 | ## Achievements
8 |
9 | ## Areas for Improvements / involvement
10 |
11 | --
12 |
13 |
--------------------------------------------------------------------------------
/client/src/routes/home/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
17 |
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HipChat-Clone
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/server/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "2"
2 | services:
3 | web:
4 | build: .
5 | ports:
6 | - "3001:80"
7 | links:
8 | - mongo
9 | mongo:
10 | image: mongo
11 | ports:
12 | - "27017:27017"
13 | volumes:
14 | - /data/mongodb:/data/db
--------------------------------------------------------------------------------
/server/src/api/v1/login/loginRoutes.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const express = require ('express');
4 | const router = express.Router();
5 |
6 | const loginController = require ('./loginController');
7 |
8 | router.route('/')
9 | .post(loginController.authenticate)
10 |
11 | module.exports = router;
--------------------------------------------------------------------------------
/server/src/utils/ApiError.js:
--------------------------------------------------------------------------------
1 | function ApiError(message, status) {
2 | this.message = message;
3 | this.status = status;
4 | this.stack = Error().stack;
5 | }
6 |
7 | ApiError.prototype = Object.create(Error.prototype);
8 | ApiError.prototype.name = "ApiError";
9 |
10 | module.exports = ApiError;
--------------------------------------------------------------------------------
/client/build/dev-client.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | require('eventsource-polyfill')
3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
4 |
5 | hotClient.subscribe(function (event) {
6 | if (event.action === 'reload') {
7 | window.location.reload()
8 | }
9 | })
10 |
--------------------------------------------------------------------------------
/server/src/api/v1/users/userValidation.js:
--------------------------------------------------------------------------------
1 | const Joi = require ('joi');
2 |
3 | const userValidation = {};
4 |
5 | userValidation.updateUser = {
6 | body: {
7 | name: Joi.string().required(),
8 | fullname: Joi.string().required(),
9 | initials: Joi.string().required()
10 | }
11 | };
12 |
13 | module.exports = userValidation
--------------------------------------------------------------------------------
/client/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["latest", {
4 | "es2015": { "modules": false }
5 | }],
6 | "stage-2"
7 | ],
8 | "plugins": ["transform-runtime"],
9 | "comments": false,
10 | "env": {
11 | "test": {
12 | "presets": ["latest", "stage-2"],
13 | "plugins": [ "istanbul" ]
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/client/src/components/AppSidebar/AppSidebar.vue:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/client/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Router from 'vue-router';
2 | import Vuex from 'vuex';
3 | import Vue from 'vue';
4 |
5 | import Home from '../routes/home/Home';
6 |
7 | Vue.use(Router);
8 | Vue.use(Vuex);
9 |
10 | export default new Router({
11 | routes: [
12 | {
13 | path: '/',
14 | name: 'Home',
15 | component: Home,
16 | },
17 | ],
18 | });
19 |
--------------------------------------------------------------------------------
/client/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | var utils = require('./utils')
2 | var config = require('../config')
3 | var isProduction = process.env.NODE_ENV === 'production'
4 |
5 | module.exports = {
6 | loaders: utils.cssLoaders({
7 | sourceMap: isProduction
8 | ? config.build.productionSourceMap
9 | : config.dev.cssSourceMap,
10 | extract: isProduction
11 | })
12 | }
13 |
--------------------------------------------------------------------------------
/server/README.md:
--------------------------------------------------------------------------------
1 | This project was bootstrapped from my [Trello Clone project](https://github.com/Madmous/Trello-Clone/tree/develop/server).
2 |
3 | ## Main Libraries
4 |
5 | * Passport (basic and jwt strategies)
6 | * JWT simple
7 | * Winston
8 | * Bluebird
9 | * Joi
10 | * Express-Validator
11 |
12 | ## Achievements
13 |
14 | ## Areas for Improvements / involvement
15 |
16 | --
17 |
--------------------------------------------------------------------------------
/client/test/unit/specs/Hello.spec.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Hello from '@/components/Hello';
3 |
4 | describe('Hello.vue', () => {
5 | it('should render correct contents', () => {
6 | const Constructor = Vue.extend(Hello);
7 | const vm = new Constructor().$mount();
8 | expect(vm.$el.querySelector('.hello h1').textContent)
9 | .to.equal('Welcome to Your Vue.js App');
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/server/src/api/v1/signUp/signupValidation.js:
--------------------------------------------------------------------------------
1 | const Joi = require ('joi');
2 |
3 | const signupValidation = {};
4 |
5 | signupValidation.saveUser = {
6 | body: {
7 | name: Joi.string().required(),
8 | fullname: Joi.string().required(),
9 | initials: Joi.string().required(),
10 | email: Joi.string().email().required(),
11 | password: Joi.string().required()
12 | }
13 | };
14 |
15 | module.exports = signupValidation
--------------------------------------------------------------------------------
/client/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue';
4 | import App from './App';
5 | import router from './router';
6 |
7 | Vue.config.productionTip = false;
8 |
9 | /* eslint-disable no-new */
10 | new Vue({
11 | el: '#app',
12 | router,
13 | template: '',
14 | components: { App },
15 | });
16 |
--------------------------------------------------------------------------------
/server/src/api/v1/signUp/signUpRoutes.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const validate = require ('express-validation');
4 | const express = require ('express');
5 | const router = express.Router();
6 |
7 | const signupValidation = require ('./signupValidation');
8 | const signUpController = require ('./signUpController');
9 |
10 | router.route('/')
11 | .post(validate(signupValidation.saveUser), signUpController.saveUser)
12 |
13 | module.exports = router;
--------------------------------------------------------------------------------
/server/src/api/v1/users/userRoutes.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const validate = require ('express-validation');
4 | const express = require ('express');
5 | const router = express.Router();
6 |
7 | const userValidation = require ('./userValidation');
8 | const userController = require ('./userController');
9 |
10 | router.route('/')
11 | .get(userController.getUser)
12 | .put(validate(userValidation.updateUser), userController.updateUser)
13 | .delete(userController.removeUser)
14 |
15 | module.exports = router;
--------------------------------------------------------------------------------
/server/src/libs/winston.js:
--------------------------------------------------------------------------------
1 | const winston = require ('winston');
2 |
3 | function getLogger (module) {
4 | let path = module.filename.split('/').slice(-2).join('/');
5 |
6 | return new winston.Logger({
7 | transports : [
8 | new winston.transports.Console({
9 | timestamp: () => {
10 | return new Date().toLocaleTimeString();
11 | },
12 | colorize : true,
13 | level : 'debug',
14 | label : path
15 | })
16 | ]
17 | });
18 | }
19 |
20 | module.exports = getLogger;
--------------------------------------------------------------------------------
/server/src/config/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | 'database': (function() {
3 | if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
4 | return 'mongodb://localhost/hipchatCloneApi';
5 | } else {
6 | return 'mongodb://mongo:27017/hipchatCloneApi';
7 | }
8 | })(),
9 | 'port': (function() {
10 | if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
11 | return 3001;
12 | } else {
13 | return 80;
14 | }
15 | })(),
16 | 'databaseTest': 'mongodb://localhost/hipchatCloneApiTest',
17 | 'secret': 'apitest'
18 | };
--------------------------------------------------------------------------------
/server/src/config/dbTest.js:
--------------------------------------------------------------------------------
1 | 'user strict';
2 |
3 | const mongoose = require ('mongoose');
4 | const log = require ('../libs/winston')(module);
5 |
6 | const dbURI = require ('../config/config').databaseTest;
7 |
8 | let db = {};
9 |
10 | db.connect = () => {
11 | const mongooseConnection = mongoose.connection;
12 |
13 | mongoose.connect(dbURI);
14 |
15 | mongooseConnection.on('connected', () => {
16 | log.info('Mongoose default connection connected to ' + dbURI);
17 | });
18 |
19 | mongooseConnection.on('error', (err) => {
20 | log.error('Mongoose default connection error: ' + err);
21 | });
22 | }
23 |
24 | module.exports = db;
--------------------------------------------------------------------------------
/client/test/e2e/specs/test.js:
--------------------------------------------------------------------------------
1 | // For authoring Nightwatch tests, see
2 | // http://nightwatchjs.org/guide#usage
3 |
4 | module.exports = {
5 | 'default e2e tests': function test(browser) {
6 | // automatically uses dev Server port from /config.index.js
7 | // default: http://localhost:8080
8 | // see nightwatch.conf.js
9 | const devServer = browser.globals.devServerURL;
10 |
11 | browser
12 | .url(devServer)
13 | .waitForElementVisible('#app', 5000)
14 | .assert.elementPresent('.hello')
15 | .assert.containsText('h1', 'Welcome to Your Vue.js App')
16 | .assert.elementCount('img', 1)
17 | .end();
18 | },
19 | };
20 |
--------------------------------------------------------------------------------
/client/test/unit/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | Vue.config.productionTip = false;
3 |
4 | // Polyfill fn.bind() for PhantomJS
5 | /* eslint-disable no-extend-native */
6 | Function.prototype.bind = require('function-bind');
7 |
8 | // require all test files (files that ends with .spec.js)
9 | const testsContext = require.context('./specs', true, /\.spec$/);
10 | testsContext.keys().forEach(testsContext);
11 |
12 | // require all src files except main.js for coverage.
13 | // you can also change this to match only the subset of files that
14 | // you want coverage for.
15 | const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/);
16 | srcContext.keys().forEach(srcContext);
17 |
--------------------------------------------------------------------------------
/client/build/webpack.test.conf.js:
--------------------------------------------------------------------------------
1 | // This is the webpack config used for unit tests.
2 |
3 | var utils = require('./utils')
4 | var webpack = require('webpack')
5 | var merge = require('webpack-merge')
6 | var baseConfig = require('./webpack.base.conf')
7 |
8 | var webpackConfig = merge(baseConfig, {
9 | // use inline sourcemap for karma-sourcemap-loader
10 | module: {
11 | rules: utils.styleLoaders()
12 | },
13 | devtool: '#inline-source-map',
14 | plugins: [
15 | new webpack.DefinePlugin({
16 | 'process.env': require('../config/test.env')
17 | })
18 | ]
19 | })
20 |
21 | // no need for app entry during tests
22 | delete webpackConfig.entry
23 |
24 | module.exports = webpackConfig
25 |
--------------------------------------------------------------------------------
/server/src/api/v1/login/loginController.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const async = require ('async');
4 |
5 | const models = require ('../../../models/index');
6 | const config = require ('../../../config/config');
7 | const log = require ('../../../libs/winston')(module);
8 |
9 | const userModel = models.userModel;
10 |
11 | let loginController = {};
12 |
13 | loginController.authenticate = (req, res) => {
14 | const reqUser = req.user;
15 |
16 | if (reqUser.err) {
17 | return res.status(401).json({
18 | data: {
19 | uiError : reqUser.err
20 | }
21 | });
22 | } else {
23 | return res.status(200).json({
24 | data: {
25 | token: reqUser.token
26 | }
27 | });
28 | }
29 | };
30 |
31 | module.exports = loginController;
--------------------------------------------------------------------------------
/client/test/e2e/custom-assertions/elementCount.js:
--------------------------------------------------------------------------------
1 | // A custom Nightwatch assertion.
2 | // the name of the method is the filename.
3 | // can be used in tests like this:
4 | //
5 | // browser.assert.elementCount(selector, count)
6 | //
7 | // for how to write custom assertions see
8 | // http://nightwatchjs.org/guide#writing-custom-assertions
9 | exports.assertion = function (selector, count) {
10 | this.message = 'Testing if element <' + selector + '> has count: ' + count;
11 | this.expected = count;
12 | this.pass = function (val) {
13 | return val === this.expected;
14 | }
15 | this.value = function (res) {
16 | return res.value;
17 | }
18 | this.command = function (cb) {
19 | var self = this;
20 | return this.api.execute(function (selector) {
21 | return document.querySelectorAll(selector).length;
22 | }, [selector], function (res) {
23 | cb.call(self, res);
24 | });
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/client/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
23 |
24 |
51 |
--------------------------------------------------------------------------------
/client/.eslintrc.js:
--------------------------------------------------------------------------------
1 | // http://eslint.org/docs/user-guide/configuring
2 |
3 | module.exports = {
4 | root: true,
5 | parser: 'babel-eslint',
6 | parserOptions: {
7 | sourceType: 'module'
8 | },
9 | env: {
10 | browser: true,
11 | },
12 | extends: 'airbnb-base',
13 | // required to lint *.vue files
14 | plugins: [
15 | 'html'
16 | ],
17 | // check if imports actually resolve
18 | 'settings': {
19 | 'import/resolver': {
20 | 'webpack': {
21 | 'config': 'build/webpack.base.conf.js'
22 | }
23 | }
24 | },
25 | // add your custom rules here
26 | 'rules': {
27 | // don't require .vue extension when importing
28 | 'import/extensions': ['error', 'always', {
29 | 'js': 'never',
30 | 'vue': 'never'
31 | }],
32 | // allow optionalDependencies
33 | 'import/no-extraneous-dependencies': ['error', {
34 | 'optionalDependencies': ['test/unit/index.js']
35 | }],
36 | // allow debugger during development
37 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/server/src/config/db.js:
--------------------------------------------------------------------------------
1 | 'user strict';
2 |
3 | const mongoose = require ('mongoose');
4 | const Promise = require ('bluebird');
5 | const log = require ('../libs/winston')(module);
6 |
7 | const dbURI = require ('../config/config').database;
8 |
9 | mongoose.Promise = Promise;
10 |
11 | let db = {};
12 |
13 | db.connect = () => {
14 | const mongooseConnection = mongoose.connection;
15 |
16 | mongoose.connect(dbURI);
17 |
18 | mongooseConnection.on('connected', () => {
19 | log.info('Mongoose default connection connected to ' + dbURI);
20 | });
21 |
22 | mongooseConnection.on('error', (err) => {
23 | log.error('Mongoose default connection error: ' + err);
24 | });
25 |
26 | mongooseConnection.on('disconnected', () => {
27 | log.info('Mongoose default connection disconnected');
28 | });
29 |
30 | process.on('SIGINT', () => {
31 | mongooseConnection.close( () => {
32 | log.info('Mongoose default connection disconnected through app termination');
33 | process.exit(0);
34 | });
35 | });
36 | }
37 |
38 | module.exports = db;
--------------------------------------------------------------------------------
/client/build/build.js:
--------------------------------------------------------------------------------
1 | require('./check-versions')()
2 |
3 | process.env.NODE_ENV = 'production'
4 |
5 | var ora = require('ora')
6 | var rm = require('rimraf')
7 | var path = require('path')
8 | var chalk = require('chalk')
9 | var webpack = require('webpack')
10 | var config = require('../config')
11 | var webpackConfig = require('./webpack.prod.conf')
12 |
13 | var spinner = ora('building for production...')
14 | spinner.start()
15 |
16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
17 | if (err) throw err
18 | webpack(webpackConfig, function (err, stats) {
19 | spinner.stop()
20 | if (err) throw err
21 | process.stdout.write(stats.toString({
22 | colors: true,
23 | modules: false,
24 | children: false,
25 | chunks: false,
26 | chunkModules: false
27 | }) + '\n\n')
28 |
29 | console.log(chalk.cyan(' Build complete.\n'))
30 | console.log(chalk.yellow(
31 | ' Tip: built files are meant to be served over an HTTP server.\n' +
32 | ' Opening index.html over file:// won\'t work.\n'
33 | ))
34 | })
35 | })
36 |
--------------------------------------------------------------------------------
/client/test/unit/karma.conf.js:
--------------------------------------------------------------------------------
1 | // This is a karma config file. For more details see
2 | // http://karma-runner.github.io/0.13/config/configuration-file.html
3 | // we are also using it with karma-webpack
4 | // https://github.com/webpack/karma-webpack
5 |
6 | var webpackConfig = require('../../build/webpack.test.conf');
7 |
8 | module.exports = function (config) {
9 | config.set({
10 | // to run in additional browsers:
11 | // 1. install corresponding karma launcher
12 | // http://karma-runner.github.io/0.13/config/browsers.html
13 | // 2. add it to the `browsers` array below.
14 | browsers: ['PhantomJS'],
15 | frameworks: ['mocha', 'sinon-chai'],
16 | reporters: ['spec', 'coverage'],
17 | files: ['./index.js'],
18 | preprocessors: {
19 | './index.js': ['webpack', 'sourcemap']
20 | },
21 | webpack: webpackConfig,
22 | webpackMiddleware: {
23 | noInfo: true,
24 | },
25 | coverageReporter: {
26 | dir: './coverage',
27 | reporters: [
28 | { type: 'lcov', subdir: '.' },
29 | { type: 'text-summary' },
30 | ]
31 | },
32 | });
33 | };
34 |
--------------------------------------------------------------------------------
/client/test/e2e/runner.js:
--------------------------------------------------------------------------------
1 | // 1. start the dev server using production config
2 | process.env.NODE_ENV = 'testing';
3 | var server = require('../../build/dev-server.js');
4 |
5 | // 2. run the nightwatch test suite against it
6 | // to run in additional browsers:
7 | // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings"
8 | // 2. add it to the --env flag below
9 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
10 | // For more information on Nightwatch's config file, see
11 | // http://nightwatchjs.org/guide#settings-file
12 | var opts = process.argv.slice(2);
13 | if (opts.indexOf('--config') === -1) {
14 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']);
15 | }
16 | if (opts.indexOf('--env') === -1) {
17 | opts = opts.concat(['--env', 'chrome']);
18 | }
19 |
20 | var spawn = require('cross-spawn');
21 | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' });
22 |
23 | runner.on('exit', function (code) {
24 | server.close();
25 | process.exit(code);
26 | });
27 |
28 | runner.on('error', function (err) {
29 | server.close();
30 | throw err;
31 | });
32 |
--------------------------------------------------------------------------------
/client/test/e2e/nightwatch.conf.js:
--------------------------------------------------------------------------------
1 | require('babel-register')
2 | var config = require('../../config')
3 |
4 | // http://nightwatchjs.org/guide#settings-file
5 | module.exports = {
6 | src_folders: ['test/e2e/specs'],
7 | output_folder: 'test/e2e/reports',
8 | custom_assertions_path: ['test/e2e/custom-assertions'],
9 |
10 | selenium: {
11 | start_process: true,
12 | server_path: require('selenium-server').path,
13 | host: '127.0.0.1',
14 | port: 4444,
15 | cli_args: {
16 | 'webdriver.chrome.driver': require('chromedriver').path
17 | }
18 | },
19 |
20 | test_settings: {
21 | default: {
22 | selenium_port: 4444,
23 | selenium_host: 'localhost',
24 | silent: true,
25 | globals: {
26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
27 | }
28 | },
29 |
30 | chrome: {
31 | desiredCapabilities: {
32 | browserName: 'chrome',
33 | javascriptEnabled: true,
34 | acceptSslCerts: true
35 | }
36 | },
37 |
38 | firefox: {
39 | desiredCapabilities: {
40 | browserName: 'firefox',
41 | javascriptEnabled: true,
42 | acceptSslCerts: true
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/client/src/components/AppHeader/AppHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
20 |
21 |
55 |
--------------------------------------------------------------------------------
/client/build/check-versions.js:
--------------------------------------------------------------------------------
1 | var chalk = require('chalk')
2 | var semver = require('semver')
3 | var packageConfig = require('../package.json')
4 |
5 | function exec (cmd) {
6 | return require('child_process').execSync(cmd).toString().trim()
7 | }
8 |
9 | var versionRequirements = [
10 | {
11 | name: 'node',
12 | currentVersion: semver.clean(process.version),
13 | versionRequirement: packageConfig.engines.node
14 | },
15 | {
16 | name: 'npm',
17 | currentVersion: exec('npm --version'),
18 | versionRequirement: packageConfig.engines.npm
19 | }
20 | ]
21 |
22 | module.exports = function () {
23 | var warnings = []
24 | for (var i = 0; i < versionRequirements.length; i++) {
25 | var mod = versionRequirements[i]
26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
27 | warnings.push(mod.name + ': ' +
28 | chalk.red(mod.currentVersion) + ' should be ' +
29 | chalk.green(mod.versionRequirement)
30 | )
31 | }
32 | }
33 |
34 | if (warnings.length) {
35 | console.log('')
36 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
37 | console.log()
38 | for (var i = 0; i < warnings.length; i++) {
39 | var warning = warnings[i]
40 | console.log(' ' + warning)
41 | }
42 | console.log()
43 | process.exit(1)
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/client/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | var utils = require('./utils')
2 | var webpack = require('webpack')
3 | var config = require('../config')
4 | var merge = require('webpack-merge')
5 | var baseWebpackConfig = require('./webpack.base.conf')
6 | var HtmlWebpackPlugin = require('html-webpack-plugin')
7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
8 |
9 | // add hot-reload related code to entry chunks
10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) {
11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
12 | })
13 |
14 | module.exports = merge(baseWebpackConfig, {
15 | module: {
16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
17 | },
18 | // cheap-module-eval-source-map is faster for development
19 | devtool: '#cheap-module-eval-source-map',
20 | plugins: [
21 | new webpack.DefinePlugin({
22 | 'process.env': config.dev.env
23 | }),
24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
25 | new webpack.HotModuleReplacementPlugin(),
26 | new webpack.NoEmitOnErrorsPlugin(),
27 | // https://github.com/ampedandwired/html-webpack-plugin
28 | new HtmlWebpackPlugin({
29 | filename: 'index.html',
30 | template: 'index.html',
31 | inject: true
32 | }),
33 | new FriendlyErrorsPlugin()
34 | ]
35 | })
36 |
--------------------------------------------------------------------------------
/server/src/api/v1/signUp/signUpController.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const async = require ('async');
4 |
5 | const models = require ('../../../models/index');
6 | const config = require ('../../../config/config');
7 | const log = require ('../../../libs/winston')(module);
8 | const jwt = require('jwt-simple');
9 |
10 | const secret = require('../../../config/config').secret;
11 |
12 | const userModel = models.userModel;
13 |
14 | let signUpController = {};
15 |
16 | function buildResponse(statusCode, data, res) {
17 | if (statusCode === 200) {
18 | return res.status(200).json({
19 | data: data
20 | })
21 | } else if (statusCode === 404) {
22 | return res.status(404).json({
23 | data: data
24 | })
25 | }
26 | }
27 |
28 | signUpController.saveUser = (req, res) => {
29 | userModel.findOne({name: req.body.name})
30 | .then(user => {
31 | if (user) {
32 | throw ('That name is already taken');
33 | } else {
34 | const user = new userModel({
35 | name: req.body.name,
36 | fullname: req.body.fullname,
37 | password: req.body.password,
38 | initials: req.body.initials,
39 | email: req.body.email
40 | });
41 |
42 | return user.save();
43 | }
44 | })
45 | .then(user => buildResponse(200, jwt.encode(user._id, secret), res))
46 | .catch(err => buildResponse(404, err, res));
47 | };
48 |
49 | module.exports = signUpController;
--------------------------------------------------------------------------------
/server/src/models/users/userModel.js:
--------------------------------------------------------------------------------
1 | const mongoose = require ('mongoose');
2 | const bcrypt = require ('bcrypt');
3 |
4 | const Schema = mongoose.Schema;
5 |
6 | const UserSchema = new Schema({
7 | name: {
8 | type: String,
9 | unique: true,
10 | required: true
11 | },
12 | fullname: {
13 | type: String,
14 | required: true
15 | },
16 | password: {
17 | type: String,
18 | required: true
19 | },
20 | initials: {
21 | type: String,
22 | required: true
23 | },
24 | email: {
25 | type: String,
26 | unique: true,
27 | required: true
28 | }
29 | });
30 |
31 | UserSchema.pre('save', function (callback) {
32 | let userName = this;
33 |
34 | if (this.isModified('password') || this.isNew) {
35 | bcrypt.genSalt(10, (err, salt) => {
36 | if (err) {
37 | return callback(err);
38 | }
39 | bcrypt.hash(userName.password, salt, (err, hash) => {
40 | if (err) {
41 | return callback(err);
42 | }
43 | userName.password = hash;
44 | callback();
45 | });
46 | });
47 | } else {
48 | return callback();
49 | }
50 | });
51 |
52 | UserSchema.methods.arePasswordsMatching = function (password, callback) {
53 | bcrypt.compare(password, this.password, (err, isMatch) => {
54 | if (err) {
55 | return callback(err);
56 | }
57 | callback(null, isMatch);
58 | });
59 | }
60 |
61 | module.exports = mongoose.model('User', UserSchema);
--------------------------------------------------------------------------------
/server/src/api/v1/users/userController.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const log = require ('../../../libs/winston')(module);
4 |
5 | let userController = {};
6 |
7 | function formatResponse(pUser) {
8 | return {
9 | user: {
10 | _id: pUser._id,
11 | fullname: pUser.fullname,
12 | }
13 | }
14 | }
15 |
16 | function buildResponse(statusCode, data, res) {
17 | if (statusCode === 200) {
18 | return res.status(200).json({
19 | data: formatResponse(data)
20 | })
21 | } else if (statusCode === 404) {
22 | return res.status(404).json({
23 | data: data
24 | })
25 | }
26 | }
27 |
28 | userController.getUser = (req, res) => {
29 | const user = req.user;
30 |
31 | if (!user) {
32 | buildResponse(404, req.err, res);
33 | } else {
34 | buildResponse(200, user, res);
35 | }
36 | };
37 |
38 | userController.updateUser = (req, res) => {
39 | const errorMessage = 'Sorry. I could not update that user';
40 |
41 | let user = req.user;
42 |
43 | user.name = req.body.name;
44 | user.fullname = req.body.fullname;
45 | user.initials = req.body.initials;
46 |
47 | user.save()
48 | .then(user => buildResponse(200, user, res))
49 | .catch(buildResponse(404, errorMessage, res));
50 | };
51 |
52 | userController.removeUser = (req, res) => {
53 | const errorMessage = 'Sorry. I could not remove that user';
54 |
55 | user.remove()
56 | .then(user => buildResponse(200, user, res))
57 | .catch(buildResponse(404, errorMessage, res));
58 | };
59 |
60 | module.exports = userController;
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "trello-clone-api",
3 | "version": "0.1.0",
4 | "author": "Moustapha Amadou Diouf",
5 | "license": "MIT",
6 | "main": "./src/index.js",
7 | "scripts": {
8 | "start": "node ./src/index",
9 | "start:dev": "NODE_ENV=development nodemon ./src/index",
10 | "start:debug": "NODE_ENV=development node --inspect ./src/index",
11 | "test": "NODE_ENV=test ./node_modules/.bin/mocha test/**/*.spec.js",
12 | "test:debug": "NODE_ENV=test ./node_modules/.bin/mocha --inspect --recursive --debug-brk",
13 | "test:cover": "NODE_ENV=test istanbul cover ./node_modules/.bin/_mocha -- -R spec test/**/*.spec.js"
14 | },
15 | "devDependencies": {
16 | "chai": "^3.5.0",
17 | "chai-http": "^3.0.0",
18 | "istanbul": "^0.4.5",
19 | "mocha": "^3.2.0",
20 | "nodemon": "^1.11.0",
21 | "sinon": "^1.17.6",
22 | "sinon-mongoose": "^1.3.0"
23 | },
24 | "dependencies": {
25 | "bcrypt": "^0.8.7",
26 | "bluebird": "^3.5.0",
27 | "body-parser": "^1.15.2",
28 | "cors": "^2.8.1",
29 | "express": "^4.14.0",
30 | "express-validation": "^1.0.1",
31 | "global": "^4.3.1",
32 | "helmet": "^3.1.0",
33 | "joi": "^10.2.2",
34 | "jwt-simple": "^0.5.1",
35 | "mongodb": "^2.2.11",
36 | "mongoose": "^4.7.0",
37 | "nodemon": "^1.11.0",
38 | "passport": "^0.3.2",
39 | "passport-http": "^0.3.0",
40 | "passport-jwt": "^2.2.1",
41 | "winston": "^2.3.0"
42 | },
43 | "engines": {
44 | "node": "6.9.1"
45 | },
46 | "proxy": "http:://localhost"
47 | }
48 |
--------------------------------------------------------------------------------
/client/config/index.js:
--------------------------------------------------------------------------------
1 | // see http://vuejs-templates.github.io/webpack for documentation.
2 | var path = require('path')
3 |
4 | module.exports = {
5 | build: {
6 | env: require('./prod.env'),
7 | index: path.resolve(__dirname, '../dist/index.html'),
8 | assetsRoot: path.resolve(__dirname, '../dist'),
9 | assetsSubDirectory: 'static',
10 | assetsPublicPath: '/',
11 | productionSourceMap: true,
12 | // Gzip off by default as many popular static hosts such as
13 | // Surge or Netlify already gzip all static assets for you.
14 | // Before setting to `true`, make sure to:
15 | // npm install --save-dev compression-webpack-plugin
16 | productionGzip: false,
17 | productionGzipExtensions: ['js', 'css'],
18 | // Run the build command with an extra argument to
19 | // View the bundle analyzer report after build finishes:
20 | // `npm run build --report`
21 | // Set to `true` or `false` to always turn it on or off
22 | bundleAnalyzerReport: process.env.npm_config_report
23 | },
24 | dev: {
25 | env: require('./dev.env'),
26 | port: 8080,
27 | autoOpenBrowser: true,
28 | assetsSubDirectory: 'static',
29 | assetsPublicPath: '/',
30 | proxyTable: {},
31 | // CSS Sourcemaps off by default because relative paths are "buggy"
32 | // with this option, according to the CSS-Loader README
33 | // (https://github.com/webpack/css-loader#sourcemaps)
34 | // In our experience, they generally work as expected,
35 | // just be aware of this issue when enabling this option.
36 | cssSourceMap: false
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/client/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var utils = require('./utils')
3 | var config = require('../config')
4 | var vueLoaderConfig = require('./vue-loader.conf')
5 |
6 | function resolve (dir) {
7 | return path.join(__dirname, '..', dir)
8 | }
9 |
10 | module.exports = {
11 | entry: {
12 | app: './src/main.js'
13 | },
14 | output: {
15 | path: config.build.assetsRoot,
16 | filename: '[name].js',
17 | publicPath: process.env.NODE_ENV === 'production'
18 | ? config.build.assetsPublicPath
19 | : config.dev.assetsPublicPath
20 | },
21 | resolve: {
22 | extensions: ['.js', '.vue', '.json'],
23 | alias: {
24 | 'vue$': 'vue/dist/vue.esm.js',
25 | '@': resolve('src'),
26 | }
27 | },
28 | module: {
29 | rules: [
30 | {
31 | test: /\.(js|vue)$/,
32 | loader: 'eslint-loader',
33 | enforce: "pre",
34 | include: [resolve('src'), resolve('test')],
35 | options: {
36 | formatter: require('eslint-friendly-formatter')
37 | }
38 | },
39 | {
40 | test: /\.vue$/,
41 | loader: 'vue-loader',
42 | options: vueLoaderConfig
43 | },
44 | {
45 | test: /\.js$/,
46 | loader: 'babel-loader',
47 | include: [resolve('src'), resolve('test')]
48 | },
49 | {
50 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
51 | loader: 'url-loader',
52 | query: {
53 | limit: 10000,
54 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
55 | }
56 | },
57 | {
58 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
59 | loader: 'url-loader',
60 | query: {
61 | limit: 10000,
62 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
63 | }
64 | }
65 | ]
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/server/src/utils/passportMiddleweare.js:
--------------------------------------------------------------------------------
1 | const passport = require('passport');
2 | const BasicStrategy = require('passport-http').BasicStrategy;
3 | const async = require('async');
4 | const jwt = require('jwt-simple');
5 |
6 | const JwtStrategy = require('passport-jwt').Strategy;
7 | const ExtractJwt = require('passport-jwt').ExtractJwt;
8 |
9 | const secret = require('../config/config').secret;
10 |
11 | const models = require('../models/index');
12 | const userModel = models.userModel;
13 |
14 | passport.use(new BasicStrategy(
15 | function(username, password, callback) {
16 |
17 | userModel.findOne({ name: username }, function (err, user) {
18 |
19 | if (err) {
20 | return callback(err);
21 | }
22 |
23 | if (!user) {
24 | return callback(null, { err: {usernameErr: 'There is not an account for this username' } });
25 | }
26 |
27 | user.arePasswordsMatching(password, function(err, isMatch) {
28 |
29 | if (err) {
30 | return callback(err);
31 | }
32 |
33 | if (!isMatch) {
34 | return callback(null, { err: { passwordErr: 'Invalid password' } });
35 | }
36 |
37 | const token = jwt.encode(user._id, secret)
38 |
39 | return callback(null, { token: token });
40 | });
41 | });
42 | }
43 | ));
44 |
45 | let opts = {};
46 |
47 | opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
48 | opts.secretOrKey = secret;
49 |
50 | passport.use(new JwtStrategy(opts,
51 | function(jwt_payload, callback) {
52 | const userId = jwt_payload;
53 |
54 | userModel.findById(userId, function(err, user) {
55 |
56 | if (err) {
57 | return callback(err, false);
58 | }
59 |
60 | if (user) {
61 | return callback(null, user);
62 | } else {
63 | return callback(null, { err: 'There is not a user for this token' });
64 | }
65 | });
66 | }
67 | ));
68 |
69 | exports.isAuthenticatedWithToken = passport.authenticate('jwt', { session : false });
70 | exports.isAuthenticatedWithBasic = passport.authenticate('basic', { session : false });
--------------------------------------------------------------------------------
/client/build/utils.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var config = require('../config')
3 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
4 |
5 | exports.assetsPath = function (_path) {
6 | var assetsSubDirectory = process.env.NODE_ENV === 'production'
7 | ? config.build.assetsSubDirectory
8 | : config.dev.assetsSubDirectory
9 | return path.posix.join(assetsSubDirectory, _path)
10 | }
11 |
12 | exports.cssLoaders = function (options) {
13 | options = options || {}
14 |
15 | var cssLoader = {
16 | loader: 'css-loader',
17 | options: {
18 | minimize: process.env.NODE_ENV === 'production',
19 | sourceMap: options.sourceMap
20 | }
21 | }
22 |
23 | // generate loader string to be used with extract text plugin
24 | function generateLoaders (loader, loaderOptions) {
25 | var loaders = [cssLoader]
26 | if (loader) {
27 | loaders.push({
28 | loader: loader + '-loader',
29 | options: Object.assign({}, loaderOptions, {
30 | sourceMap: options.sourceMap
31 | })
32 | })
33 | }
34 |
35 | // Extract CSS when that option is specified
36 | // (which is the case during production build)
37 | if (options.extract) {
38 | return ExtractTextPlugin.extract({
39 | use: loaders,
40 | fallback: 'vue-style-loader'
41 | })
42 | } else {
43 | return ['vue-style-loader'].concat(loaders)
44 | }
45 | }
46 |
47 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html
48 | return {
49 | css: generateLoaders(),
50 | postcss: generateLoaders(),
51 | less: generateLoaders('less'),
52 | sass: generateLoaders('sass', { indentedSyntax: true }),
53 | scss: generateLoaders('sass'),
54 | stylus: generateLoaders('stylus'),
55 | styl: generateLoaders('stylus')
56 | }
57 | }
58 |
59 | // Generate loaders for standalone style files (outside of .vue)
60 | exports.styleLoaders = function (options) {
61 | var output = []
62 | var loaders = exports.cssLoaders(options)
63 | for (var extension in loaders) {
64 | var loader = loaders[extension]
65 | output.push({
66 | test: new RegExp('\\.' + extension + '$'),
67 | use: loader
68 | })
69 | }
70 | return output
71 | }
72 |
--------------------------------------------------------------------------------
/server/src/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const expressValidation = require ('express-validation');
4 | const bodyParser = require ('body-parser');
5 | const passport = require ('passport');
6 | const express = require ('express');
7 | const winston = require ('winston');
8 | const helmet = require ('helmet');
9 |
10 | const signUpRoutes = require ('./api/v1/signUp/signUpRoutes');
11 | const loginRoutes = require ('./api/v1/login/loginRoutes');
12 | const userRoutes = require ('./api/v1/users/userRoutes');
13 |
14 | const config = require ('./config/config');
15 | const dbTest = require ('./config/dbTest');
16 | const port = require ('./config/config').port;
17 | const cors = require ('cors');
18 | const log = require ('./libs/winston')(module);
19 | const db = require ('./config/db');
20 |
21 | const passportMiddleweare = require ('./utils/passportMiddleweare');
22 |
23 | const app = express ();
24 |
25 | app.use(cors());
26 | app.use(passport.initialize());
27 | app.use(helmet());
28 | app.use(bodyParser.urlencoded({ extended: true }));
29 | app.use(bodyParser.json());
30 |
31 | app.disable('x-powered-by');
32 |
33 | app.use('/api/v1/signup', signUpRoutes);
34 |
35 | app.use('/api/v1/login', passportMiddleweare.isAuthenticatedWithBasic, loginRoutes);
36 |
37 | app.use('/api/v1/users', passportMiddleweare.isAuthenticatedWithToken, userRoutes);
38 |
39 | app.use((err, req, res, next) => {
40 | if (err instanceof expressValidation.ValidationError) {
41 | const unifiedErrorMessage = err.errors.map(error => error.messages.join('. ')).join(' and ');
42 |
43 | return res.status(err.status).json({
44 | message: unifiedErrorMessage
45 | });
46 | }
47 | });
48 |
49 | app.use((req, res) => {
50 | res.status(404).json({
51 | status: 404,
52 | message: 'The requested URL ' + req.originalUrl + ' was not found on the server.'
53 | });
54 | });
55 |
56 | let server = app.listen(port, (err) => {
57 | server.address().port;
58 |
59 | if (err) {
60 | log.error('something bad happened', err);
61 | } else if (process.env.NODE_ENV === 'test') {
62 | dbTest.connect();
63 | } else {
64 | db.connect();
65 | }
66 |
67 | log.info(`server is listening on ${port}`);
68 | });
69 |
70 | module.exports = server;
--------------------------------------------------------------------------------
/server/test/login/login.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const mongoose = require('mongoose');
4 | const chaiHttp = require('chai-http');
5 | const chai = require('chai');
6 |
7 | const models = require('../../src/models/index');
8 |
9 | const userModel = models.userModel;
10 |
11 | const log = require('../../src/libs/winston')(module);
12 | const app = require('../../src/index');
13 |
14 | chai.use(chaiHttp);
15 |
16 | const loginUrl = '/api/v1/login/';
17 | const assert = chai.assert;
18 |
19 | describe('Login' , () => {
20 |
21 | before(done => {
22 | const userTest = new userModel({
23 | name: 'testName',
24 | fullname: 'testFullname',
25 | password: 'testPassword',
26 | initials: 'testInitials',
27 | email: 'testEmail@email.com'
28 | });
29 |
30 | userTest.save(err => {
31 | done();
32 | });
33 | });
34 |
35 | after(done => {
36 | userModel.find().remove().exec();
37 |
38 | done();
39 | });
40 |
41 | describe('/POST', () => {
42 |
43 | it ('should login - success', done => {
44 | chai.request(app)
45 | .post(loginUrl)
46 | .auth('testName', 'testPassword')
47 | .end((err, res) => {
48 | assert.equal(res.status, '200', 'status equals 200');
49 |
50 | done();
51 | });
52 | });
53 |
54 | it ('should login - fail', done => {
55 | chai.request(app)
56 | .post(loginUrl)
57 | .auth('testName')
58 | .end((err, res) => {
59 | assert.equal(res.status, '401', 'status equals 401 because second argument is missing');
60 |
61 | done();
62 | });
63 | });
64 |
65 | it ('should login - fail', done => {
66 | chai.request(app)
67 | .post(loginUrl)
68 | .auth('name', 'testPassword')
69 | .end((err, res) => {
70 | assert.equal(res.status, '401', 'status equals 401 because username is invalid');
71 |
72 | done();
73 | });
74 | });
75 |
76 | it ('should login - fail', done => {
77 | chai.request(app)
78 | .post(loginUrl)
79 | .auth('testName', 'password')
80 | .end((err, res) => {
81 | assert.equal(res.status, '401', 'status equals 401 because password is invalid');
82 |
83 | done();
84 | });
85 | });
86 |
87 | it ('should login - fail', done => {
88 | chai.request(app)
89 | .post(loginUrl)
90 | .end((err, res) => {
91 | assert.equal(res.status, '401', 'status equals 401 because arguments are missing');
92 |
93 | done();
94 | });
95 | });
96 | });
97 | });
--------------------------------------------------------------------------------
/client/build/dev-server.js:
--------------------------------------------------------------------------------
1 | require('./check-versions')()
2 |
3 | var config = require('../config')
4 | if (!process.env.NODE_ENV) {
5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
6 | }
7 |
8 | var opn = require('opn')
9 | var path = require('path')
10 | var express = require('express')
11 | var webpack = require('webpack')
12 | var proxyMiddleware = require('http-proxy-middleware')
13 | var webpackConfig = process.env.NODE_ENV === 'testing'
14 | ? require('./webpack.prod.conf')
15 | : require('./webpack.dev.conf')
16 |
17 | // default port where dev server listens for incoming traffic
18 | var port = process.env.PORT || config.dev.port
19 | // automatically open browser, if not set will be false
20 | var autoOpenBrowser = !!config.dev.autoOpenBrowser
21 | // Define HTTP proxies to your custom API backend
22 | // https://github.com/chimurai/http-proxy-middleware
23 | var proxyTable = config.dev.proxyTable
24 |
25 | var app = express()
26 | var compiler = webpack(webpackConfig)
27 |
28 | var devMiddleware = require('webpack-dev-middleware')(compiler, {
29 | publicPath: webpackConfig.output.publicPath,
30 | quiet: true
31 | })
32 |
33 | var hotMiddleware = require('webpack-hot-middleware')(compiler, {
34 | log: () => {}
35 | })
36 | // force page reload when html-webpack-plugin template changes
37 | compiler.plugin('compilation', function (compilation) {
38 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
39 | hotMiddleware.publish({ action: 'reload' })
40 | cb()
41 | })
42 | })
43 |
44 | // proxy api requests
45 | Object.keys(proxyTable).forEach(function (context) {
46 | var options = proxyTable[context]
47 | if (typeof options === 'string') {
48 | options = { target: options }
49 | }
50 | app.use(proxyMiddleware(options.filter || context, options))
51 | })
52 |
53 | // handle fallback for HTML5 history API
54 | app.use(require('connect-history-api-fallback')())
55 |
56 | // serve webpack bundle output
57 | app.use(devMiddleware)
58 |
59 | // enable hot-reload and state-preserving
60 | // compilation error display
61 | app.use(hotMiddleware)
62 |
63 | // serve pure static assets
64 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
65 | app.use(staticPath, express.static('./static'))
66 |
67 | var uri = 'http://localhost:' + port
68 |
69 | devMiddleware.waitUntilValid(function () {
70 | console.log('> Listening at ' + uri + '\n')
71 | })
72 |
73 | module.exports = app.listen(port, function (err) {
74 | if (err) {
75 | console.log(err)
76 | return
77 | }
78 |
79 | // when env is testing, don't need open it
80 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
81 | opn(uri)
82 | }
83 | })
84 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hipchat-clone",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "Moustapha A Diouf ",
6 | "private": true,
7 | "scripts": {
8 | "dev": "node build/dev-server.js",
9 | "build": "node build/build.js",
10 | "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
11 | "e2e": "node test/e2e/runner.js",
12 | "test": "npm run unit && npm run e2e",
13 | "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
14 | },
15 | "dependencies": {
16 | "vue": "^2.2.1",
17 | "vue-router": "^2.2.0",
18 | "vuex": "^2.2.1"
19 | },
20 | "devDependencies": {
21 | "autoprefixer": "^6.7.2",
22 | "babel-core": "^6.22.1",
23 | "babel-eslint": "^7.1.1",
24 | "babel-loader": "^6.2.10",
25 | "babel-plugin-istanbul": "^3.1.2",
26 | "babel-plugin-transform-runtime": "^6.22.0",
27 | "babel-preset-latest": "^6.22.0",
28 | "babel-preset-stage-2": "^6.22.0",
29 | "babel-register": "^6.22.0",
30 | "chai": "^3.5.0",
31 | "chalk": "^1.1.3",
32 | "chromedriver": "^2.27.2",
33 | "connect-history-api-fallback": "^1.3.0",
34 | "copy-webpack-plugin": "^4.0.1",
35 | "cross-env": "^3.1.4",
36 | "cross-spawn": "^5.0.1",
37 | "css-loader": "^0.26.1",
38 | "eslint": "^3.14.1",
39 | "eslint-config-airbnb-base": "^11.0.1",
40 | "eslint-friendly-formatter": "^2.0.7",
41 | "eslint-import-resolver-webpack": "^0.8.1",
42 | "eslint-loader": "^1.6.1",
43 | "eslint-plugin-html": "^2.0.0",
44 | "eslint-plugin-import": "^2.2.0",
45 | "eventsource-polyfill": "^0.9.6",
46 | "express": "^4.14.1",
47 | "extract-text-webpack-plugin": "^2.0.0",
48 | "file-loader": "^0.10.0",
49 | "friendly-errors-webpack-plugin": "^1.1.3",
50 | "function-bind": "^1.1.0",
51 | "html-webpack-plugin": "^2.28.0",
52 | "http-proxy-middleware": "^0.17.3",
53 | "inject-loader": "^2.0.1",
54 | "karma": "^1.4.1",
55 | "karma-coverage": "^1.1.1",
56 | "karma-mocha": "^1.3.0",
57 | "karma-phantomjs-launcher": "^1.0.2",
58 | "karma-sinon-chai": "^1.2.4",
59 | "karma-sourcemap-loader": "^0.3.7",
60 | "karma-spec-reporter": "0.0.26",
61 | "karma-webpack": "^2.0.2",
62 | "lolex": "^1.5.2",
63 | "mocha": "^3.2.0",
64 | "nightwatch": "^0.9.12",
65 | "opn": "^4.0.2",
66 | "optimize-css-assets-webpack-plugin": "^1.3.0",
67 | "ora": "^1.1.0",
68 | "phantomjs-prebuilt": "^2.1.14",
69 | "rimraf": "^2.6.0",
70 | "selenium-server": "^3.0.1",
71 | "semver": "^5.3.0",
72 | "sinon": "^1.17.7",
73 | "sinon-chai": "^2.8.0",
74 | "url-loader": "^0.5.7",
75 | "vue-awesome": "^2.1.0",
76 | "vue-loader": "^11.1.4",
77 | "vue-style-loader": "^2.0.0",
78 | "vue-template-compiler": "^2.2.1",
79 | "webpack": "^2.2.1",
80 | "webpack-bundle-analyzer": "^2.2.1",
81 | "webpack-dev-middleware": "^1.10.0",
82 | "webpack-hot-middleware": "^2.16.1",
83 | "webpack-merge": "^2.6.1"
84 | },
85 | "engines": {
86 | "node": ">= 4.0.0",
87 | "npm": ">= 3.0.0"
88 | },
89 | "browserlist": [
90 | "> 1%",
91 | "last 2 versions",
92 | "not ie <= 8"
93 | ]
94 | }
95 |
--------------------------------------------------------------------------------
/client/build/webpack.prod.conf.js:
--------------------------------------------------------------------------------
1 | var path = require('path')
2 | var utils = require('./utils')
3 | var webpack = require('webpack')
4 | var config = require('../config')
5 | var merge = require('webpack-merge')
6 | var baseWebpackConfig = require('./webpack.base.conf')
7 | var CopyWebpackPlugin = require('copy-webpack-plugin')
8 | var HtmlWebpackPlugin = require('html-webpack-plugin')
9 | var ExtractTextPlugin = require('extract-text-webpack-plugin')
10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
11 |
12 | var env = process.env.NODE_ENV === 'testing'
13 | ? require('../config/test.env')
14 | : config.build.env
15 |
16 | var webpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({
19 | sourceMap: config.build.productionSourceMap,
20 | extract: true
21 | })
22 | },
23 | devtool: config.build.productionSourceMap ? '#source-map' : false,
24 | output: {
25 | path: config.build.assetsRoot,
26 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
27 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
28 | },
29 | plugins: [
30 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
31 | new webpack.DefinePlugin({
32 | 'process.env': env
33 | }),
34 | new webpack.optimize.UglifyJsPlugin({
35 | compress: {
36 | warnings: false
37 | },
38 | sourceMap: true
39 | }),
40 | // extract css into its own file
41 | new ExtractTextPlugin({
42 | filename: utils.assetsPath('css/[name].[contenthash].css')
43 | }),
44 | // Compress extracted CSS. We are using this plugin so that possible
45 | // duplicated CSS from different components can be deduped.
46 | new OptimizeCSSPlugin(),
47 | // generate dist index.html with correct asset hash for caching.
48 | // you can customize output by editing /index.html
49 | // see https://github.com/ampedandwired/html-webpack-plugin
50 | new HtmlWebpackPlugin({
51 | filename: process.env.NODE_ENV === 'testing'
52 | ? 'index.html'
53 | : config.build.index,
54 | template: 'index.html',
55 | inject: true,
56 | minify: {
57 | removeComments: true,
58 | collapseWhitespace: true,
59 | removeAttributeQuotes: true
60 | // more options:
61 | // https://github.com/kangax/html-minifier#options-quick-reference
62 | },
63 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
64 | chunksSortMode: 'dependency'
65 | }),
66 | // split vendor js into its own file
67 | new webpack.optimize.CommonsChunkPlugin({
68 | name: 'vendor',
69 | minChunks: function (module, count) {
70 | // any required modules inside node_modules are extracted to vendor
71 | return (
72 | module.resource &&
73 | /\.js$/.test(module.resource) &&
74 | module.resource.indexOf(
75 | path.join(__dirname, '../node_modules')
76 | ) === 0
77 | )
78 | }
79 | }),
80 | // extract webpack runtime and module manifest to its own file in order to
81 | // prevent vendor hash from being updated whenever app bundle is updated
82 | new webpack.optimize.CommonsChunkPlugin({
83 | name: 'manifest',
84 | chunks: ['vendor']
85 | }),
86 | // copy custom static assets
87 | new CopyWebpackPlugin([
88 | {
89 | from: path.resolve(__dirname, '../static'),
90 | to: config.build.assetsSubDirectory,
91 | ignore: ['.*']
92 | }
93 | ])
94 | ]
95 | })
96 |
97 | if (config.build.productionGzip) {
98 | var CompressionWebpackPlugin = require('compression-webpack-plugin')
99 |
100 | webpackConfig.plugins.push(
101 | new CompressionWebpackPlugin({
102 | asset: '[path].gz[query]',
103 | algorithm: 'gzip',
104 | test: new RegExp(
105 | '\\.(' +
106 | config.build.productionGzipExtensions.join('|') +
107 | ')$'
108 | ),
109 | threshold: 10240,
110 | minRatio: 0.8
111 | })
112 | )
113 | }
114 |
115 | if (config.build.bundleAnalyzerReport) {
116 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
117 | webpackConfig.plugins.push(new BundleAnalyzerPlugin())
118 | }
119 |
120 | module.exports = webpackConfig
121 |
--------------------------------------------------------------------------------
/server/test/users/users.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const mongoose = require('mongoose');
4 | const chaiHttp = require('chai-http');
5 | const chai = require('chai');
6 |
7 | const userModel = require('../../src/models/index').userModel;
8 |
9 | const log = require('../../src/libs/winston')(module);
10 | const app = require('../../src/index');
11 |
12 | chai.use(chaiHttp);
13 |
14 | const signupUrl = '/api/v1/signup/';
15 | const userUrl = '/api/v1/users/';
16 | const assert = chai.assert;
17 |
18 | describe('Users' , () => {
19 |
20 | let token = '';
21 |
22 | after(done => {
23 | userModel.find().remove().exec();
24 |
25 | done();
26 | });
27 |
28 | it ('should signup - success', done => {
29 | const user = {
30 | name: 'testName',
31 | fullname: 'testFullname',
32 | password: 'testPassword',
33 | initials: 'testInitials',
34 | email: 'testEmail@email.com'
35 | };
36 |
37 | chai.request(app)
38 | .post(signupUrl)
39 | .send(user)
40 | .end((err, res) => {
41 | assert.equal(res.status, '200', 'status equals 200');
42 | token = res.body.data.token;
43 |
44 | done();
45 | });
46 | });
47 |
48 | describe('/GET', () => {
49 |
50 | it ('should get user - success', done => {
51 | chai.request(app)
52 | .get(userUrl)
53 | .set('Authorization', `JWT ${token}`)
54 | .end((err, res) => {
55 | assert.equal(res.status, '200', 'status equals 200');
56 |
57 | done();
58 | });
59 | });
60 |
61 | it ('should get user - fail', done => {
62 | chai.request(app)
63 | .get(userUrl)
64 | .set('Authorization', `JWT`)
65 | .end((err, res) => {
66 | assert.equal(res.status, '401', 'status equals 401');
67 |
68 | done();
69 | });
70 | });
71 | });
72 |
73 | describe('/PUT', () => {
74 |
75 | it ('should update user - success', done => {
76 | const user = {
77 | name: 'testNameUpdated',
78 | fullname: 'testFullnameUpdated',
79 | initials: 'testInitialsUpdated',
80 | };
81 |
82 | chai.request(app)
83 | .put(userUrl)
84 | .set('Authorization', `JWT ${token}`)
85 | .send(user)
86 | .end((err, res) => {
87 | assert.equal(res.status, '200', 'status equals 200');
88 | assert.notEqual(res.body.data.user._id, undefined, 'User has an id value');
89 | assert.equal(res.body.data.user.fullname, 'testFullnameUpdated', 'User fullname is testFullnameUpdated');
90 |
91 | done();
92 | });
93 | });
94 |
95 | it ('should not update user - fail', done => {
96 | const user = {
97 | fullname: 'testFullnameUpdated',
98 | initials: 'testInitialsUpdated'
99 | };
100 |
101 | chai.request(app)
102 | .put(userUrl)
103 | .set('Authorization', `JWT ${token}`)
104 | .send(user)
105 | .end((err, res) => {
106 | assert.equal(res.status, '400', 'status equals 400 because name is missing');
107 | assert.equal(res.body.data.error.missingName,
108 | 'Please enter your name');
109 |
110 | done();
111 | });
112 | });
113 |
114 | it ('should not update user - fail', done => {
115 | const user = {
116 | name: 'testNameUpdated',
117 | initials: 'testInitialsUpdated'
118 | };
119 |
120 | chai.request(app)
121 | .put(userUrl)
122 | .set('Authorization', `JWT ${token}`)
123 | .send(user)
124 | .end((err, res) => {
125 | assert.equal(res.status, '400', 'status equals 400 because full name is missing');
126 | assert.equal(res.body.data.error.missingFullName,
127 | 'Please enter your full name');
128 |
129 | done();
130 | });
131 | });
132 |
133 | it ('should not update user - fail', done => {
134 | const user = {
135 | name: 'testNameUpdated',
136 | fullname: 'testFullnameUpdated'
137 | };
138 |
139 | chai.request(app)
140 | .put(userUrl)
141 | .set('Authorization', `JWT ${token}`)
142 | .send(user)
143 | .end((err, res) => {
144 | assert.equal(res.status, '400', 'status equals 400 because initials are missing');
145 | assert.equal(res.body.data.error.missingInitials,
146 | 'Please enter your initials');
147 |
148 | done();
149 | });
150 | });
151 |
152 | it ('should not update user - fail', done => {
153 | chai.request(app)
154 | .put(userUrl)
155 | .set('Authorization', `JWT ${token}`)
156 | .end((err, res) => {
157 | assert.equal(res.status, '400',
158 | 'status equals 400 because username, full name and initials are missing');
159 | assert.equal(res.body.data.error.missingName,
160 | 'Please enter your name');
161 | assert.equal(res.body.data.error.missingFullName,
162 | 'Please enter your full name');
163 | assert.equal(res.body.data.error.missingInitials,
164 | 'Please enter your initials');
165 |
166 | done();
167 | });
168 | });
169 | });
170 |
171 | describe('/DELETE', () => {
172 |
173 | it ('should delete user - success', done => {
174 | chai.request(app)
175 | .delete(userUrl)
176 | .set('Authorization', `JWT ${token}`)
177 | .end((err, res) => {
178 | assert.equal(res.status, '200', 'status equals 200');
179 |
180 | userModel.find({name: 'testFullnameUpdated'}, (err, res) => {
181 | assert.equal(0, res.length, 'No result for name testFullnameUpdated')
182 | })
183 |
184 | done();
185 | });
186 | });
187 |
188 | it ('should delete user - fail', done => {
189 | chai.request(app)
190 | .delete(userUrl)
191 | .set('Authorization', `JWT`)
192 | .end((err, res) => {
193 | assert.equal(res.status, '401', 'status equals 401');
194 |
195 | done();
196 | });
197 | });
198 | });
199 | });
--------------------------------------------------------------------------------
/server/test/signup/signup.spec.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const mongoose = require('mongoose');
4 | const chaiHttp = require('chai-http');
5 | const chai = require('chai');
6 |
7 | const userModel = require('../../src/models/index').userModel;
8 |
9 | const log = require('../../src/libs/winston')(module);
10 | const app = require('../../src/index');
11 |
12 | chai.use(chaiHttp);
13 |
14 | const signupUrl = '/api/v1/signup/';
15 | const assert = chai.assert;
16 |
17 | describe('Signup' , () => {
18 |
19 | after(done => {
20 | userModel.find().remove().exec();
21 |
22 | done();
23 | });
24 |
25 | describe('/POST', () => {
26 |
27 | it ('should signup - sucess', done => {
28 | const user = {
29 | name: 'testName',
30 | fullname: 'testFullname',
31 | password: 'testPassword',
32 | initials: 'testInitials',
33 | email: 'testEmail@email.com'
34 | };
35 |
36 | chai.request(app)
37 | .post(signupUrl)
38 | .send(user)
39 | .end((err, res) => {
40 | assert.equal(res.status, '200', 'status equals 200');
41 |
42 | done();
43 | });
44 | });
45 |
46 | it ('should signup - fail', done => {
47 | const user = {
48 | name: 'testName',
49 | fullname: 'testFullname',
50 | password: 'testPassword',
51 | initials: 'testInitials',
52 | email: 'testEmail@email.com'
53 | };
54 |
55 | chai.request(app)
56 | .post(signupUrl)
57 | .send(user)
58 | .end((err, res) => {
59 | assert.equal(res.status, '404', 'status equals 404 because username already exists');
60 | done();
61 | });
62 | });
63 |
64 | it ('should signup - fail', done => {
65 | const user = {
66 | name: 'testName2',
67 | fullname: 'testFullname',
68 | password: 'testPassword',
69 | initials: 'testInitials',
70 | email: 'testEmail@email.com'
71 | };
72 |
73 | chai.request(app)
74 | .post(signupUrl)
75 | .send(user)
76 | .end((err, res) => {
77 | assert.equal(res.status, '404', 'status equals 404 because email already exists');
78 |
79 | done();
80 | });
81 | });
82 |
83 | it ('should signup - fail', done => {
84 | const user = {
85 | fullname: 'testFullname',
86 | password: 'testPassword',
87 | initials: 'testInitials',
88 | email: 'testEmail@email.com'
89 | };
90 |
91 | chai.request(app)
92 | .post(signupUrl)
93 | .send(user)
94 | .end((err, res) => {
95 | assert.equal(res.status, '400', 'status equals 400 because name is missing');
96 | done();
97 | });
98 | });
99 |
100 | it ('should signup - fail', done => {
101 | const user = {
102 | name: 'testName',
103 | password: 'testPassword',
104 | initials: 'testInitials',
105 | email: 'testEmail@email.com'
106 | };
107 |
108 | chai.request(app)
109 | .post(signupUrl)
110 | .send(user)
111 | .end((err, res) => {
112 | assert.equal(res.status, '400', 'status equals 400 because fullname is missing');
113 | done();
114 | });
115 | });
116 |
117 | it ('should signup - fail', done => {
118 | const user = {
119 | name: 'testName',
120 | fullname: 'testFullname',
121 | initials: 'testInitials',
122 | email: 'testEmail@email.com'
123 | };
124 |
125 | chai.request(app)
126 | .post(signupUrl)
127 | .send(user)
128 | .end((err, res) => {
129 | assert.equal(res.status, '400', 'status equals 400 because password is missing');
130 | done();
131 | });
132 | });
133 |
134 | it ('should signup - fail', done => {
135 | const user = {
136 | name: 'testName',
137 | fullname: 'testFullname',
138 | password: 'testPassword',
139 | email: 'testEmail@email.com'
140 | };
141 |
142 | chai.request(app)
143 | .post(signupUrl)
144 | .send(user)
145 | .end((err, res) => {
146 | assert.equal(res.status, '400', 'status equals 400 because initials missing');
147 | done();
148 | });
149 | });
150 |
151 | it ('should signup - fail', done => {
152 | const user = {
153 | name: 'testName',
154 | fullname: 'testFullname',
155 | password: 'testPassword',
156 | initials: 'testInitials'
157 | };
158 |
159 | chai.request(app)
160 | .post(signupUrl)
161 | .send(user)
162 | .end((err, res) => {
163 | assert.equal(res.status, '400', 'status equals 400 because email is missing');
164 | done();
165 | });
166 | });
167 |
168 | it ('should signup - fail', done => {
169 | const user = {
170 | password: 'testPassword',
171 | initials: 'testInitials',
172 | email: 'testEmail@email.com'
173 | };
174 |
175 | chai.request(app)
176 | .post(signupUrl)
177 | .send(user)
178 | .end((err, res) => {
179 | assert.equal(res.status, '400', 'status equals 400 because username and full name are missing');
180 | done();
181 | });
182 | });
183 |
184 | it ('should signup - fail', done => {
185 | const user = {
186 | initials: 'testInitials',
187 | email: 'testEmail@email.com'
188 | };
189 |
190 | chai.request(app)
191 | .post(signupUrl)
192 | .send(user)
193 | .end((err, res) => {
194 | assert.equal(res.status, '400',
195 | 'status equals 400 because username, full name and password are missing');
196 | done();
197 | });
198 | });
199 |
200 | it ('should signup - fail', done => {
201 | const user = {
202 | email: 'testEmail@email.com'
203 | };
204 |
205 | chai.request(app)
206 | .post(signupUrl)
207 | .send(user)
208 | .end((err, res) => {
209 | assert.equal(res.status, '400',
210 | 'status equals 400 because username, full name, password and initials are missing');
211 | done();
212 | });
213 | });
214 |
215 | it ('should signup - fail', done => {
216 | chai.request(app)
217 | .post(signupUrl)
218 | .end((err, res) => {
219 | assert.equal(res.status, '400',
220 | 'status equals 400 because all arguments are missing');
221 | done();
222 | });
223 | });
224 | });
225 | });
--------------------------------------------------------------------------------
/server/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 | abbrev@1, abbrev@1.0.x:
4 | version "1.0.9"
5 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
6 |
7 | accepts@~1.3.3:
8 | version "1.3.3"
9 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
10 | dependencies:
11 | mime-types "~2.1.11"
12 | negotiator "0.6.1"
13 |
14 | align-text@^0.1.1, align-text@^0.1.3:
15 | version "0.1.4"
16 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
17 | dependencies:
18 | kind-of "^3.0.2"
19 | longest "^1.0.1"
20 | repeat-string "^1.5.2"
21 |
22 | amdefine@>=0.0.4:
23 | version "1.0.1"
24 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
25 |
26 | ansi-regex@^2.0.0:
27 | version "2.0.0"
28 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
29 |
30 | ansi-styles@^2.2.1:
31 | version "2.2.1"
32 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
33 |
34 | anymatch@^1.3.0:
35 | version "1.3.0"
36 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
37 | dependencies:
38 | arrify "^1.0.0"
39 | micromatch "^2.1.5"
40 |
41 | aproba@^1.0.3:
42 | version "1.0.4"
43 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
44 |
45 | are-we-there-yet@~1.1.2:
46 | version "1.1.2"
47 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
48 | dependencies:
49 | delegates "^1.0.0"
50 | readable-stream "^2.0.0 || ^1.1.13"
51 |
52 | argparse@^1.0.7:
53 | version "1.0.9"
54 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
55 | dependencies:
56 | sprintf-js "~1.0.2"
57 |
58 | arr-diff@^2.0.0:
59 | version "2.0.0"
60 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
61 | dependencies:
62 | arr-flatten "^1.0.1"
63 |
64 | arr-flatten@^1.0.1:
65 | version "1.0.1"
66 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
67 |
68 | array-flatten@1.1.1:
69 | version "1.1.1"
70 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
71 |
72 | array-unique@^0.2.1:
73 | version "0.2.1"
74 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
75 |
76 | arrify@^1.0.0:
77 | version "1.0.1"
78 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
79 |
80 | asn1@~0.2.3:
81 | version "0.2.3"
82 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
83 |
84 | assert-plus@^0.2.0:
85 | version "0.2.0"
86 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
87 |
88 | assert-plus@^1.0.0:
89 | version "1.0.0"
90 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
91 |
92 | assertion-error@^1.0.1:
93 | version "1.0.2"
94 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
95 |
96 | async-each@^1.0.0:
97 | version "1.0.1"
98 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
99 |
100 | async@^1.4.0, async@^1.5.2, async@1.x:
101 | version "1.5.2"
102 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
103 |
104 | async@~0.2.6:
105 | version "0.2.10"
106 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
107 |
108 | async@~1.0.0:
109 | version "1.0.0"
110 | resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
111 |
112 | async@2.1.2:
113 | version "2.1.2"
114 | resolved "https://registry.yarnpkg.com/async/-/async-2.1.2.tgz#612a4ab45ef42a70cde806bad86ee6db047e8385"
115 | dependencies:
116 | lodash "^4.14.0"
117 |
118 | asynckit@^0.4.0:
119 | version "0.4.0"
120 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
121 |
122 | aws-sign2@~0.6.0:
123 | version "0.6.0"
124 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
125 |
126 | aws4@^1.2.1:
127 | version "1.5.0"
128 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
129 |
130 | balanced-match@^0.4.1:
131 | version "0.4.2"
132 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
133 |
134 | base64-url@^1.2.1:
135 | version "1.3.3"
136 | resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f"
137 |
138 | base64url@^2.0.0, base64url@2.0.0:
139 | version "2.0.0"
140 | resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
141 |
142 | bcrypt-pbkdf@^1.0.0:
143 | version "1.0.0"
144 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
145 | dependencies:
146 | tweetnacl "^0.14.3"
147 |
148 | bcrypt@^0.8.7:
149 | version "0.8.7"
150 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-0.8.7.tgz#bc3875a9afd0a7b2cd231a6a7f218a5ce156b093"
151 | dependencies:
152 | bindings "1.2.1"
153 | nan "2.3.5"
154 |
155 | binary-extensions@^1.0.0:
156 | version "1.7.0"
157 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d"
158 |
159 | bindings@1.2.1:
160 | version "1.2.1"
161 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
162 |
163 | block-stream@*:
164 | version "0.0.9"
165 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
166 | dependencies:
167 | inherits "~2.0.0"
168 |
169 | bluebird:
170 | version "3.5.0"
171 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
172 |
173 | bluebird@2.10.2:
174 | version "2.10.2"
175 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b"
176 |
177 | body-parser@^1.15.2:
178 | version "1.15.2"
179 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67"
180 | dependencies:
181 | bytes "2.4.0"
182 | content-type "~1.0.2"
183 | debug "~2.2.0"
184 | depd "~1.1.0"
185 | http-errors "~1.5.0"
186 | iconv-lite "0.4.13"
187 | on-finished "~2.3.0"
188 | qs "6.2.0"
189 | raw-body "~2.1.7"
190 | type-is "~1.6.13"
191 |
192 | boom@2.x.x:
193 | version "2.10.1"
194 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
195 | dependencies:
196 | hoek "2.x.x"
197 |
198 | brace-expansion@^1.0.0:
199 | version "1.1.6"
200 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
201 | dependencies:
202 | balanced-match "^0.4.1"
203 | concat-map "0.0.1"
204 |
205 | braces@^1.8.2:
206 | version "1.8.5"
207 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
208 | dependencies:
209 | expand-range "^1.8.1"
210 | preserve "^0.2.0"
211 | repeat-element "^1.1.2"
212 |
213 | browser-stdout@1.3.0:
214 | version "1.3.0"
215 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
216 |
217 | bson@~0.5.4, bson@~0.5.6:
218 | version "0.5.7"
219 | resolved "https://registry.yarnpkg.com/bson/-/bson-0.5.7.tgz#0d11fe0936c1fee029e11f7063f5d0ab2422ea3e"
220 |
221 | buffer-equal-constant-time@1.0.1:
222 | version "1.0.1"
223 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
224 |
225 | buffer-shims@^1.0.0:
226 | version "1.0.0"
227 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
228 |
229 | bytes@2.4.0:
230 | version "2.4.0"
231 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
232 |
233 | camelcase@^1.0.2:
234 | version "1.2.1"
235 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
236 |
237 | camelize@1.0.0:
238 | version "1.0.0"
239 | resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
240 |
241 | caseless@~0.11.0:
242 | version "0.11.0"
243 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
244 |
245 | center-align@^0.1.1:
246 | version "0.1.3"
247 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
248 | dependencies:
249 | align-text "^0.1.3"
250 | lazy-cache "^1.0.3"
251 |
252 | chai:
253 | version "3.5.0"
254 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
255 | dependencies:
256 | assertion-error "^1.0.1"
257 | deep-eql "^0.1.3"
258 | type-detect "^1.0.0"
259 |
260 | chai-http:
261 | version "3.0.0"
262 | resolved "https://registry.yarnpkg.com/chai-http/-/chai-http-3.0.0.tgz#5460d8036e1f1a12b0b5b5cbd529e6dc1d31eb4b"
263 | dependencies:
264 | cookiejar "2.0.x"
265 | is-ip "1.0.0"
266 | methods "^1.1.2"
267 | qs "^6.2.0"
268 | superagent "^2.0.0"
269 |
270 | chalk@^1.0.0, chalk@^1.1.1:
271 | version "1.1.3"
272 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
273 | dependencies:
274 | ansi-styles "^2.2.1"
275 | escape-string-regexp "^1.0.2"
276 | has-ansi "^2.0.0"
277 | strip-ansi "^3.0.0"
278 | supports-color "^2.0.0"
279 |
280 | chokidar@^1.4.3:
281 | version "1.6.1"
282 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
283 | dependencies:
284 | anymatch "^1.3.0"
285 | async-each "^1.0.0"
286 | glob-parent "^2.0.0"
287 | inherits "^2.0.1"
288 | is-binary-path "^1.0.0"
289 | is-glob "^2.0.0"
290 | path-is-absolute "^1.0.0"
291 | readdirp "^2.0.0"
292 | optionalDependencies:
293 | fsevents "^1.0.0"
294 |
295 | cliui@^2.1.0:
296 | version "2.1.0"
297 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
298 | dependencies:
299 | center-align "^0.1.1"
300 | right-align "^0.1.1"
301 | wordwrap "0.0.2"
302 |
303 | code-point-at@^1.0.0:
304 | version "1.1.0"
305 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
306 |
307 | colors@1.0.x:
308 | version "1.0.3"
309 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
310 |
311 | combined-stream@^1.0.5, combined-stream@~1.0.5:
312 | version "1.0.5"
313 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
314 | dependencies:
315 | delayed-stream "~1.0.0"
316 |
317 | commander@^2.9.0, commander@2.9.0:
318 | version "2.9.0"
319 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
320 | dependencies:
321 | graceful-readlink ">= 1.0.0"
322 |
323 | component-emitter@^1.2.0:
324 | version "1.2.1"
325 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
326 |
327 | concat-map@0.0.1:
328 | version "0.0.1"
329 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
330 |
331 | configstore@^1.0.0:
332 | version "1.4.0"
333 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021"
334 | dependencies:
335 | graceful-fs "^4.1.2"
336 | mkdirp "^0.5.0"
337 | object-assign "^4.0.1"
338 | os-tmpdir "^1.0.0"
339 | osenv "^0.1.0"
340 | uuid "^2.0.1"
341 | write-file-atomic "^1.1.2"
342 | xdg-basedir "^2.0.0"
343 |
344 | connect@3.4.1:
345 | version "3.4.1"
346 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.4.1.tgz#a21361d3f4099ef761cda6dc4a973bb1ebb0a34d"
347 | dependencies:
348 | debug "~2.2.0"
349 | finalhandler "0.4.1"
350 | parseurl "~1.3.1"
351 | utils-merge "1.0.0"
352 |
353 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
354 | version "1.1.0"
355 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
356 |
357 | content-disposition@0.5.1:
358 | version "0.5.1"
359 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
360 |
361 | content-security-policy-builder@1.1.0:
362 | version "1.1.0"
363 | resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-1.1.0.tgz#d91f1b076236c119850c7dee9924bf55e05772b3"
364 | dependencies:
365 | dashify "^0.2.0"
366 |
367 | content-type@~1.0.2:
368 | version "1.0.2"
369 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
370 |
371 | cookie-signature@1.0.6:
372 | version "1.0.6"
373 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
374 |
375 | cookie@0.3.1:
376 | version "0.3.1"
377 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
378 |
379 | cookiejar@^2.0.6:
380 | version "2.1.0"
381 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898"
382 |
383 | cookiejar@2.0.x:
384 | version "2.0.6"
385 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe"
386 |
387 | core-util-is@~1.0.0, core-util-is@1.0.2:
388 | version "1.0.2"
389 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
390 |
391 | cors:
392 | version "2.8.1"
393 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.1.tgz#6181aa56abb45a2825be3304703747ae4e9d2383"
394 | dependencies:
395 | vary "^1"
396 |
397 | cryptiles@2.x.x:
398 | version "2.0.5"
399 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
400 | dependencies:
401 | boom "2.x.x"
402 |
403 | cycle@1.0.x:
404 | version "1.0.3"
405 | resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
406 |
407 | dashdash@^1.12.0:
408 | version "1.14.1"
409 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
410 | dependencies:
411 | assert-plus "^1.0.0"
412 |
413 | dasherize@2.0.0:
414 | version "2.0.0"
415 | resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308"
416 |
417 | dashify@^0.2.0:
418 | version "0.2.2"
419 | resolved "https://registry.yarnpkg.com/dashify/-/dashify-0.2.2.tgz#6a07415a01c91faf4a32e38d9dfba71f61cb20fe"
420 |
421 | debug@^2.2.0:
422 | version "2.3.3"
423 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
424 | dependencies:
425 | ms "0.7.2"
426 |
427 | debug@~2.2.0, debug@2.2.0:
428 | version "2.2.0"
429 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
430 | dependencies:
431 | ms "0.7.1"
432 |
433 | decamelize@^1.0.0:
434 | version "1.2.0"
435 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
436 |
437 | deep-eql@^0.1.3:
438 | version "0.1.3"
439 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
440 | dependencies:
441 | type-detect "0.1.1"
442 |
443 | deep-extend@~0.4.0:
444 | version "0.4.1"
445 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
446 |
447 | deep-is@~0.1.3:
448 | version "0.1.3"
449 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
450 |
451 | delayed-stream@~1.0.0:
452 | version "1.0.0"
453 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
454 |
455 | delegates@^1.0.0:
456 | version "1.0.0"
457 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
458 |
459 | depd@~1.1.0:
460 | version "1.1.0"
461 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
462 |
463 | destroy@~1.0.4:
464 | version "1.0.4"
465 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
466 |
467 | diff@1.4.0:
468 | version "1.4.0"
469 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
470 |
471 | dns-prefetch-control@0.1.0:
472 | version "0.1.0"
473 | resolved "https://registry.yarnpkg.com/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz#60ddb457774e178f1f9415f0cabb0e85b0b300b2"
474 |
475 | dom-walk@^0.1.0:
476 | version "0.1.1"
477 | resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
478 |
479 | dont-sniff-mimetype@1.0.0:
480 | version "1.0.0"
481 | resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz#5932890dc9f4e2f19e5eb02a20026e5e5efc8f58"
482 |
483 | duplexer@~0.1.1:
484 | version "0.1.1"
485 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
486 |
487 | duplexify@^3.2.0:
488 | version "3.5.0"
489 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
490 | dependencies:
491 | end-of-stream "1.0.0"
492 | inherits "^2.0.1"
493 | readable-stream "^2.0.0"
494 | stream-shift "^1.0.0"
495 |
496 | ecc-jsbn@~0.1.1:
497 | version "0.1.1"
498 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
499 | dependencies:
500 | jsbn "~0.1.0"
501 |
502 | ecdsa-sig-formatter@1.0.7:
503 | version "1.0.7"
504 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.7.tgz#3137e976a1d6232517e2513e04e32f79bcbdf126"
505 | dependencies:
506 | base64-url "^1.2.1"
507 |
508 | ee-first@1.1.1:
509 | version "1.1.1"
510 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
511 |
512 | encodeurl@~1.0.1:
513 | version "1.0.1"
514 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
515 |
516 | end-of-stream@1.0.0:
517 | version "1.0.0"
518 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
519 | dependencies:
520 | once "~1.3.0"
521 |
522 | es6-promise@^3.0.2:
523 | version "3.3.1"
524 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
525 |
526 | es6-promise@3.2.1:
527 | version "3.2.1"
528 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
529 |
530 | escape-html@~1.0.3:
531 | version "1.0.3"
532 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
533 |
534 | escape-string-regexp@^1.0.2, escape-string-regexp@1.0.5:
535 | version "1.0.5"
536 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
537 |
538 | escodegen@1.8.x:
539 | version "1.8.1"
540 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
541 | dependencies:
542 | esprima "^2.7.1"
543 | estraverse "^1.9.1"
544 | esutils "^2.0.2"
545 | optionator "^0.8.1"
546 | optionalDependencies:
547 | source-map "~0.2.0"
548 |
549 | esprima@^2.6.0, esprima@^2.7.1, esprima@2.7.x:
550 | version "2.7.3"
551 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
552 |
553 | estraverse@^1.9.1:
554 | version "1.9.3"
555 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
556 |
557 | esutils@^2.0.2:
558 | version "2.0.2"
559 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
560 |
561 | etag@~1.7.0:
562 | version "1.7.0"
563 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
564 |
565 | event-stream@~3.3.0:
566 | version "3.3.4"
567 | resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
568 | dependencies:
569 | duplexer "~0.1.1"
570 | from "~0"
571 | map-stream "~0.1.0"
572 | pause-stream "0.0.11"
573 | split "0.3"
574 | stream-combiner "~0.0.4"
575 | through "~2.3.1"
576 |
577 | expand-brackets@^0.1.4:
578 | version "0.1.5"
579 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
580 | dependencies:
581 | is-posix-bracket "^0.1.0"
582 |
583 | expand-range@^1.8.1:
584 | version "1.8.2"
585 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
586 | dependencies:
587 | fill-range "^2.1.0"
588 |
589 | express-validation:
590 | version "1.0.1"
591 | resolved "https://registry.yarnpkg.com/express-validation/-/express-validation-1.0.1.tgz#630946f10cff406406ab19881e37be14562a0fba"
592 | dependencies:
593 | lodash "^4.9.0"
594 |
595 | express@^4.14.0:
596 | version "4.14.0"
597 | resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66"
598 | dependencies:
599 | accepts "~1.3.3"
600 | array-flatten "1.1.1"
601 | content-disposition "0.5.1"
602 | content-type "~1.0.2"
603 | cookie "0.3.1"
604 | cookie-signature "1.0.6"
605 | debug "~2.2.0"
606 | depd "~1.1.0"
607 | encodeurl "~1.0.1"
608 | escape-html "~1.0.3"
609 | etag "~1.7.0"
610 | finalhandler "0.5.0"
611 | fresh "0.3.0"
612 | merge-descriptors "1.0.1"
613 | methods "~1.1.2"
614 | on-finished "~2.3.0"
615 | parseurl "~1.3.1"
616 | path-to-regexp "0.1.7"
617 | proxy-addr "~1.1.2"
618 | qs "6.2.0"
619 | range-parser "~1.2.0"
620 | send "0.14.1"
621 | serve-static "~1.11.1"
622 | type-is "~1.6.13"
623 | utils-merge "1.0.0"
624 | vary "~1.1.0"
625 |
626 | extend@^3.0.0, extend@~3.0.0:
627 | version "3.0.0"
628 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
629 |
630 | extglob@^0.3.1:
631 | version "0.3.2"
632 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
633 | dependencies:
634 | is-extglob "^1.0.0"
635 |
636 | extsprintf@1.0.2:
637 | version "1.0.2"
638 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
639 |
640 | eyes@0.1.x:
641 | version "0.1.8"
642 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
643 |
644 | fast-levenshtein@~2.0.4:
645 | version "2.0.5"
646 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2"
647 |
648 | filename-regex@^2.0.0:
649 | version "2.0.0"
650 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
651 |
652 | fill-range@^2.1.0:
653 | version "2.2.3"
654 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
655 | dependencies:
656 | is-number "^2.1.0"
657 | isobject "^2.0.0"
658 | randomatic "^1.1.3"
659 | repeat-element "^1.1.2"
660 | repeat-string "^1.5.2"
661 |
662 | finalhandler@0.4.1:
663 | version "0.4.1"
664 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.1.tgz#85a17c6c59a94717d262d61230d4b0ebe3d4a14d"
665 | dependencies:
666 | debug "~2.2.0"
667 | escape-html "~1.0.3"
668 | on-finished "~2.3.0"
669 | unpipe "~1.0.0"
670 |
671 | finalhandler@0.5.0:
672 | version "0.5.0"
673 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7"
674 | dependencies:
675 | debug "~2.2.0"
676 | escape-html "~1.0.3"
677 | on-finished "~2.3.0"
678 | statuses "~1.3.0"
679 | unpipe "~1.0.0"
680 |
681 | for-in@^0.1.5:
682 | version "0.1.6"
683 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
684 |
685 | for-own@^0.1.4:
686 | version "0.1.4"
687 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
688 | dependencies:
689 | for-in "^0.1.5"
690 |
691 | forever-agent@~0.6.1:
692 | version "0.6.1"
693 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
694 |
695 | form-data@~2.1.1:
696 | version "2.1.2"
697 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
698 | dependencies:
699 | asynckit "^0.4.0"
700 | combined-stream "^1.0.5"
701 | mime-types "^2.1.12"
702 |
703 | form-data@1.0.0-rc4:
704 | version "1.0.0-rc4"
705 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.0-rc4.tgz#05ac6bc22227b43e4461f488161554699d4f8b5e"
706 | dependencies:
707 | async "^1.5.2"
708 | combined-stream "^1.0.5"
709 | mime-types "^2.1.10"
710 |
711 | formatio@1.1.1:
712 | version "1.1.1"
713 | resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
714 | dependencies:
715 | samsam "~1.1"
716 |
717 | formidable@^1.0.17:
718 | version "1.0.17"
719 | resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559"
720 |
721 | forwarded@~0.1.0:
722 | version "0.1.0"
723 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
724 |
725 | frameguard@3.0.0:
726 | version "3.0.0"
727 | resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.0.0.tgz#7bcad469ee7b96e91d12ceb3959c78235a9272e9"
728 |
729 | fresh@0.3.0:
730 | version "0.3.0"
731 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
732 |
733 | from@~0:
734 | version "0.1.3"
735 | resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc"
736 |
737 | fs.realpath@^1.0.0:
738 | version "1.0.0"
739 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
740 |
741 | fsevents@^1.0.0:
742 | version "1.0.15"
743 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44"
744 | dependencies:
745 | nan "^2.3.0"
746 | node-pre-gyp "^0.6.29"
747 |
748 | fstream-ignore@~1.0.5:
749 | version "1.0.5"
750 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
751 | dependencies:
752 | fstream "^1.0.0"
753 | inherits "2"
754 | minimatch "^3.0.0"
755 |
756 | fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
757 | version "1.0.10"
758 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
759 | dependencies:
760 | graceful-fs "^4.1.2"
761 | inherits "~2.0.0"
762 | mkdirp ">=0.5 0"
763 | rimraf "2"
764 |
765 | gauge@~2.7.1:
766 | version "2.7.1"
767 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.1.tgz#388473894fe8be5e13ffcdb8b93e4ed0616428c7"
768 | dependencies:
769 | aproba "^1.0.3"
770 | console-control-strings "^1.0.0"
771 | has-color "^0.1.7"
772 | has-unicode "^2.0.0"
773 | object-assign "^4.1.0"
774 | signal-exit "^3.0.0"
775 | string-width "^1.0.1"
776 | strip-ansi "^3.0.1"
777 | wide-align "^1.1.0"
778 |
779 | generate-function@^2.0.0:
780 | version "2.0.0"
781 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
782 |
783 | generate-object-property@^1.1.0:
784 | version "1.2.0"
785 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
786 | dependencies:
787 | is-property "^1.0.0"
788 |
789 | getpass@^0.1.1:
790 | version "0.1.6"
791 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
792 | dependencies:
793 | assert-plus "^1.0.0"
794 |
795 | glob-base@^0.3.0:
796 | version "0.3.0"
797 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
798 | dependencies:
799 | glob-parent "^2.0.0"
800 | is-glob "^2.0.0"
801 |
802 | glob-parent@^2.0.0:
803 | version "2.0.0"
804 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
805 | dependencies:
806 | is-glob "^2.0.0"
807 |
808 | glob@^5.0.15:
809 | version "5.0.15"
810 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
811 | dependencies:
812 | inflight "^1.0.4"
813 | inherits "2"
814 | minimatch "2 || 3"
815 | once "^1.3.0"
816 | path-is-absolute "^1.0.0"
817 |
818 | glob@^7.0.5:
819 | version "7.1.1"
820 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
821 | dependencies:
822 | fs.realpath "^1.0.0"
823 | inflight "^1.0.4"
824 | inherits "2"
825 | minimatch "^3.0.2"
826 | once "^1.3.0"
827 | path-is-absolute "^1.0.0"
828 |
829 | glob@7.0.5:
830 | version "7.0.5"
831 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
832 | dependencies:
833 | fs.realpath "^1.0.0"
834 | inflight "^1.0.4"
835 | inherits "2"
836 | minimatch "^3.0.2"
837 | once "^1.3.0"
838 | path-is-absolute "^1.0.0"
839 |
840 | global@^4.3.1:
841 | version "4.3.1"
842 | resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df"
843 | dependencies:
844 | min-document "^2.19.0"
845 | process "~0.5.1"
846 |
847 | got@^3.2.0:
848 | version "3.3.1"
849 | resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca"
850 | dependencies:
851 | duplexify "^3.2.0"
852 | infinity-agent "^2.0.0"
853 | is-redirect "^1.0.0"
854 | is-stream "^1.0.0"
855 | lowercase-keys "^1.0.0"
856 | nested-error-stacks "^1.0.0"
857 | object-assign "^3.0.0"
858 | prepend-http "^1.0.0"
859 | read-all-stream "^3.0.0"
860 | timed-out "^2.0.0"
861 |
862 | graceful-fs@^4.1.2:
863 | version "4.1.11"
864 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
865 |
866 | "graceful-readlink@>= 1.0.0":
867 | version "1.0.1"
868 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
869 |
870 | growl@1.9.2:
871 | version "1.9.2"
872 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
873 |
874 | handlebars@^4.0.1:
875 | version "4.0.6"
876 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
877 | dependencies:
878 | async "^1.4.0"
879 | optimist "^0.6.1"
880 | source-map "^0.4.4"
881 | optionalDependencies:
882 | uglify-js "^2.6"
883 |
884 | har-validator@~2.0.6:
885 | version "2.0.6"
886 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
887 | dependencies:
888 | chalk "^1.1.1"
889 | commander "^2.9.0"
890 | is-my-json-valid "^2.12.4"
891 | pinkie-promise "^2.0.0"
892 |
893 | has-ansi@^2.0.0:
894 | version "2.0.0"
895 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
896 | dependencies:
897 | ansi-regex "^2.0.0"
898 |
899 | has-color@^0.1.7:
900 | version "0.1.7"
901 | resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
902 |
903 | has-flag@^1.0.0:
904 | version "1.0.0"
905 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
906 |
907 | has-unicode@^2.0.0:
908 | version "2.0.1"
909 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
910 |
911 | hawk@~3.1.3:
912 | version "3.1.3"
913 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
914 | dependencies:
915 | boom "2.x.x"
916 | cryptiles "2.x.x"
917 | hoek "2.x.x"
918 | sntp "1.x.x"
919 |
920 | helmet-csp@2.1.0:
921 | version "2.1.0"
922 | resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.1.0.tgz#c0fbff8d9e8f3bbff2b83dc7fed3d47143184040"
923 | dependencies:
924 | camelize "1.0.0"
925 | content-security-policy-builder "1.1.0"
926 | dasherize "2.0.0"
927 | lodash.reduce "4.6.0"
928 | platform "1.3.1"
929 |
930 | helmet@^3.1.0:
931 | version "3.1.0"
932 | resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.1.0.tgz#64449547398e51b063fe1c75e7cb0274a557ea09"
933 | dependencies:
934 | connect "3.4.1"
935 | dns-prefetch-control "0.1.0"
936 | dont-sniff-mimetype "1.0.0"
937 | frameguard "3.0.0"
938 | helmet-csp "2.1.0"
939 | hide-powered-by "1.0.0"
940 | hpkp "2.0.0"
941 | hsts "2.0.0"
942 | ienoopen "1.0.0"
943 | nocache "2.0.0"
944 | referrer-policy "1.0.0"
945 | x-xss-protection "1.0.0"
946 |
947 | hide-powered-by@1.0.0:
948 | version "1.0.0"
949 | resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b"
950 |
951 | hoek@2.x.x:
952 | version "2.16.3"
953 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
954 |
955 | hoek@4.x.x:
956 | version "4.1.0"
957 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.1.0.tgz#4a4557460f69842ed463aa00628cc26d2683afa7"
958 |
959 | hooks-fixed@1.2.0:
960 | version "1.2.0"
961 | resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-1.2.0.tgz#0d2772d4d7d685ff9244724a9f0b5b2559aac96b"
962 |
963 | hpkp@2.0.0:
964 | version "2.0.0"
965 | resolved "https://registry.yarnpkg.com/hpkp/-/hpkp-2.0.0.tgz#10e142264e76215a5d30c44ec43de64dee6d1672"
966 |
967 | hsts@2.0.0:
968 | version "2.0.0"
969 | resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.0.0.tgz#a52234c6070decf214b2b6b70bb144d07e4776c7"
970 | dependencies:
971 | core-util-is "1.0.2"
972 |
973 | http-errors@~1.5.0:
974 | version "1.5.1"
975 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
976 | dependencies:
977 | inherits "2.0.3"
978 | setprototypeof "1.0.2"
979 | statuses ">= 1.3.1 < 2"
980 |
981 | http-signature@~1.1.0:
982 | version "1.1.1"
983 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
984 | dependencies:
985 | assert-plus "^0.2.0"
986 | jsprim "^1.2.2"
987 | sshpk "^1.7.0"
988 |
989 | iconv-lite@0.4.13:
990 | version "0.4.13"
991 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
992 |
993 | ienoopen@1.0.0:
994 | version "1.0.0"
995 | resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.0.0.tgz#346a428f474aac8f50cf3784ea2d0f16f62bda6b"
996 |
997 | ignore-by-default@^1.0.0:
998 | version "1.0.1"
999 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
1000 |
1001 | imurmurhash@^0.1.4:
1002 | version "0.1.4"
1003 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1004 |
1005 | infinity-agent@^2.0.0:
1006 | version "2.0.3"
1007 | resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216"
1008 |
1009 | inflight@^1.0.4:
1010 | version "1.0.6"
1011 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1012 | dependencies:
1013 | once "^1.3.0"
1014 | wrappy "1"
1015 |
1016 | inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2, inherits@2.0.3:
1017 | version "2.0.3"
1018 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1019 |
1020 | inherits@2.0.1:
1021 | version "2.0.1"
1022 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
1023 |
1024 | ini@~1.3.0:
1025 | version "1.3.4"
1026 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
1027 |
1028 | ip-regex@^1.0.0:
1029 | version "1.0.3"
1030 | resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
1031 |
1032 | ipaddr.js@1.1.1:
1033 | version "1.1.1"
1034 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230"
1035 |
1036 | is-binary-path@^1.0.0:
1037 | version "1.0.1"
1038 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
1039 | dependencies:
1040 | binary-extensions "^1.0.0"
1041 |
1042 | is-buffer@^1.0.2:
1043 | version "1.1.4"
1044 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
1045 |
1046 | is-dotfile@^1.0.0:
1047 | version "1.0.2"
1048 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
1049 |
1050 | is-equal-shallow@^0.1.3:
1051 | version "0.1.3"
1052 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
1053 | dependencies:
1054 | is-primitive "^2.0.0"
1055 |
1056 | is-extendable@^0.1.1:
1057 | version "0.1.1"
1058 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
1059 |
1060 | is-extglob@^1.0.0:
1061 | version "1.0.0"
1062 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
1063 |
1064 | is-finite@^1.0.0:
1065 | version "1.0.2"
1066 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
1067 | dependencies:
1068 | number-is-nan "^1.0.0"
1069 |
1070 | is-fullwidth-code-point@^1.0.0:
1071 | version "1.0.0"
1072 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
1073 | dependencies:
1074 | number-is-nan "^1.0.0"
1075 |
1076 | is-glob@^2.0.0, is-glob@^2.0.1:
1077 | version "2.0.1"
1078 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
1079 | dependencies:
1080 | is-extglob "^1.0.0"
1081 |
1082 | is-ip@1.0.0:
1083 | version "1.0.0"
1084 | resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-1.0.0.tgz#2bb6959f797ccd6f9fdc812758bcbc87c4c59074"
1085 | dependencies:
1086 | ip-regex "^1.0.0"
1087 |
1088 | is-my-json-valid@^2.12.4:
1089 | version "2.15.0"
1090 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
1091 | dependencies:
1092 | generate-function "^2.0.0"
1093 | generate-object-property "^1.1.0"
1094 | jsonpointer "^4.0.0"
1095 | xtend "^4.0.0"
1096 |
1097 | is-npm@^1.0.0:
1098 | version "1.0.0"
1099 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
1100 |
1101 | is-number@^2.0.2, is-number@^2.1.0:
1102 | version "2.1.0"
1103 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
1104 | dependencies:
1105 | kind-of "^3.0.2"
1106 |
1107 | is-posix-bracket@^0.1.0:
1108 | version "0.1.1"
1109 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
1110 |
1111 | is-primitive@^2.0.0:
1112 | version "2.0.0"
1113 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
1114 |
1115 | is-property@^1.0.0:
1116 | version "1.0.2"
1117 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
1118 |
1119 | is-redirect@^1.0.0:
1120 | version "1.0.0"
1121 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
1122 |
1123 | is-stream@^1.0.0:
1124 | version "1.1.0"
1125 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
1126 |
1127 | is-typedarray@~1.0.0:
1128 | version "1.0.0"
1129 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1130 |
1131 | isarray@~1.0.0, isarray@1.0.0:
1132 | version "1.0.0"
1133 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1134 |
1135 | isemail@1.x.x:
1136 | version "1.2.0"
1137 | resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
1138 |
1139 | isemail@2.x.x:
1140 | version "2.2.1"
1141 | resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6"
1142 |
1143 | isexe@^1.1.1:
1144 | version "1.1.2"
1145 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
1146 |
1147 | isobject@^2.0.0:
1148 | version "2.1.0"
1149 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
1150 | dependencies:
1151 | isarray "1.0.0"
1152 |
1153 | isstream@~0.1.2, isstream@0.1.x:
1154 | version "0.1.2"
1155 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
1156 |
1157 | istanbul:
1158 | version "0.4.5"
1159 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
1160 | dependencies:
1161 | abbrev "1.0.x"
1162 | async "1.x"
1163 | escodegen "1.8.x"
1164 | esprima "2.7.x"
1165 | glob "^5.0.15"
1166 | handlebars "^4.0.1"
1167 | js-yaml "3.x"
1168 | mkdirp "0.5.x"
1169 | nopt "3.x"
1170 | once "1.x"
1171 | resolve "1.1.x"
1172 | supports-color "^3.1.0"
1173 | which "^1.1.1"
1174 | wordwrap "^1.0.0"
1175 |
1176 | items@2.x.x:
1177 | version "2.1.1"
1178 | resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198"
1179 |
1180 | jodid25519@^1.0.0:
1181 | version "1.0.2"
1182 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
1183 | dependencies:
1184 | jsbn "~0.1.0"
1185 |
1186 | joi:
1187 | version "10.2.2"
1188 | resolved "https://registry.yarnpkg.com/joi/-/joi-10.2.2.tgz#dc5a792b7b4c6fffa562242a95b55d9d3f077e24"
1189 | dependencies:
1190 | hoek "4.x.x"
1191 | isemail "2.x.x"
1192 | items "2.x.x"
1193 | topo "2.x.x"
1194 |
1195 | joi@^6.10.1:
1196 | version "6.10.1"
1197 | resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06"
1198 | dependencies:
1199 | hoek "2.x.x"
1200 | isemail "1.x.x"
1201 | moment "2.x.x"
1202 | topo "1.x.x"
1203 |
1204 | js-yaml@3.x:
1205 | version "3.7.0"
1206 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
1207 | dependencies:
1208 | argparse "^1.0.7"
1209 | esprima "^2.6.0"
1210 |
1211 | jsbn@~0.1.0:
1212 | version "0.1.0"
1213 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
1214 |
1215 | json-schema@0.2.3:
1216 | version "0.2.3"
1217 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
1218 |
1219 | json-stringify-safe@~5.0.1:
1220 | version "5.0.1"
1221 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
1222 |
1223 | json3@3.3.2:
1224 | version "3.3.2"
1225 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
1226 |
1227 | jsonpointer@^4.0.0:
1228 | version "4.0.0"
1229 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
1230 |
1231 | jsonwebtoken@^7.0.0:
1232 | version "7.1.9"
1233 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz#847804e5258bec5a9499a8dc4a5e7a3bae08d58a"
1234 | dependencies:
1235 | joi "^6.10.1"
1236 | jws "^3.1.3"
1237 | lodash.once "^4.0.0"
1238 | ms "^0.7.1"
1239 | xtend "^4.0.1"
1240 |
1241 | jsprim@^1.2.2:
1242 | version "1.3.1"
1243 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
1244 | dependencies:
1245 | extsprintf "1.0.2"
1246 | json-schema "0.2.3"
1247 | verror "1.3.6"
1248 |
1249 | jwa@^1.1.4:
1250 | version "1.1.4"
1251 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.4.tgz#dbb01bd38cd409899fa715107e90d90f9bcb161e"
1252 | dependencies:
1253 | base64url "2.0.0"
1254 | buffer-equal-constant-time "1.0.1"
1255 | ecdsa-sig-formatter "1.0.7"
1256 | safe-buffer "^5.0.1"
1257 |
1258 | jws@^3.1.3:
1259 | version "3.1.4"
1260 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
1261 | dependencies:
1262 | base64url "^2.0.0"
1263 | jwa "^1.1.4"
1264 | safe-buffer "^5.0.1"
1265 |
1266 | jwt-simple:
1267 | version "0.5.1"
1268 | resolved "https://registry.yarnpkg.com/jwt-simple/-/jwt-simple-0.5.1.tgz#79ea01891b61de6b68e13e67c0b4b5bda937b294"
1269 |
1270 | kareem@1.1.3:
1271 | version "1.1.3"
1272 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.1.3.tgz#0877610d8879c38da62d1dbafde4e17f2692f041"
1273 |
1274 | kind-of@^3.0.2:
1275 | version "3.0.4"
1276 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74"
1277 | dependencies:
1278 | is-buffer "^1.0.2"
1279 |
1280 | latest-version@^1.0.0:
1281 | version "1.0.1"
1282 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz#72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb"
1283 | dependencies:
1284 | package-json "^1.0.0"
1285 |
1286 | lazy-cache@^1.0.3:
1287 | version "1.0.4"
1288 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
1289 |
1290 | levn@~0.3.0:
1291 | version "0.3.0"
1292 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1293 | dependencies:
1294 | prelude-ls "~1.1.2"
1295 | type-check "~0.3.2"
1296 |
1297 | lodash._baseassign@^3.0.0:
1298 | version "3.2.0"
1299 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
1300 | dependencies:
1301 | lodash._basecopy "^3.0.0"
1302 | lodash.keys "^3.0.0"
1303 |
1304 | lodash._basecopy@^3.0.0:
1305 | version "3.0.1"
1306 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
1307 |
1308 | lodash._basecreate@^3.0.0:
1309 | version "3.0.3"
1310 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
1311 |
1312 | lodash._bindcallback@^3.0.0:
1313 | version "3.0.1"
1314 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
1315 |
1316 | lodash._createassigner@^3.0.0:
1317 | version "3.1.1"
1318 | resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
1319 | dependencies:
1320 | lodash._bindcallback "^3.0.0"
1321 | lodash._isiterateecall "^3.0.0"
1322 | lodash.restparam "^3.0.0"
1323 |
1324 | lodash._getnative@^3.0.0:
1325 | version "3.9.1"
1326 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
1327 |
1328 | lodash._isiterateecall@^3.0.0:
1329 | version "3.0.9"
1330 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
1331 |
1332 | lodash.assign@^3.0.0:
1333 | version "3.2.0"
1334 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
1335 | dependencies:
1336 | lodash._baseassign "^3.0.0"
1337 | lodash._createassigner "^3.0.0"
1338 | lodash.keys "^3.0.0"
1339 |
1340 | lodash.create@3.1.1:
1341 | version "3.1.1"
1342 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
1343 | dependencies:
1344 | lodash._baseassign "^3.0.0"
1345 | lodash._basecreate "^3.0.0"
1346 | lodash._isiterateecall "^3.0.0"
1347 |
1348 | lodash.defaults@^3.1.2:
1349 | version "3.1.2"
1350 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c"
1351 | dependencies:
1352 | lodash.assign "^3.0.0"
1353 | lodash.restparam "^3.0.0"
1354 |
1355 | lodash.isarguments@^3.0.0:
1356 | version "3.1.0"
1357 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
1358 |
1359 | lodash.isarray@^3.0.0:
1360 | version "3.0.4"
1361 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
1362 |
1363 | lodash.keys@^3.0.0:
1364 | version "3.1.2"
1365 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
1366 | dependencies:
1367 | lodash._getnative "^3.0.0"
1368 | lodash.isarguments "^3.0.0"
1369 | lodash.isarray "^3.0.0"
1370 |
1371 | lodash.once@^4.0.0:
1372 | version "4.1.1"
1373 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
1374 |
1375 | lodash.reduce@4.6.0:
1376 | version "4.6.0"
1377 | resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
1378 |
1379 | lodash.restparam@^3.0.0:
1380 | version "3.6.1"
1381 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
1382 |
1383 | lodash@^4.14.0:
1384 | version "4.17.2"
1385 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
1386 |
1387 | lodash@^4.9.0:
1388 | version "4.17.4"
1389 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
1390 |
1391 | lolex@1.3.2:
1392 | version "1.3.2"
1393 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
1394 |
1395 | longest@^1.0.1:
1396 | version "1.0.1"
1397 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
1398 |
1399 | lowercase-keys@^1.0.0:
1400 | version "1.0.0"
1401 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
1402 |
1403 | map-stream@~0.1.0:
1404 | version "0.1.0"
1405 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
1406 |
1407 | media-typer@0.3.0:
1408 | version "0.3.0"
1409 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1410 |
1411 | merge-descriptors@1.0.1:
1412 | version "1.0.1"
1413 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1414 |
1415 | methods@^1.1.1, methods@^1.1.2, methods@~1.1.2:
1416 | version "1.1.2"
1417 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1418 |
1419 | micromatch@^2.1.5:
1420 | version "2.3.11"
1421 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
1422 | dependencies:
1423 | arr-diff "^2.0.0"
1424 | array-unique "^0.2.1"
1425 | braces "^1.8.2"
1426 | expand-brackets "^0.1.4"
1427 | extglob "^0.3.1"
1428 | filename-regex "^2.0.0"
1429 | is-extglob "^1.0.0"
1430 | is-glob "^2.0.1"
1431 | kind-of "^3.0.2"
1432 | normalize-path "^2.0.1"
1433 | object.omit "^2.0.0"
1434 | parse-glob "^3.0.4"
1435 | regex-cache "^0.4.2"
1436 |
1437 | mime-db@~1.25.0:
1438 | version "1.25.0"
1439 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
1440 |
1441 | mime-types@^2.1.10, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7:
1442 | version "2.1.13"
1443 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
1444 | dependencies:
1445 | mime-db "~1.25.0"
1446 |
1447 | mime@^1.3.4, mime@1.3.4:
1448 | version "1.3.4"
1449 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
1450 |
1451 | min-document@^2.19.0:
1452 | version "2.19.0"
1453 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
1454 | dependencies:
1455 | dom-walk "^0.1.0"
1456 |
1457 | minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3":
1458 | version "3.0.3"
1459 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
1460 | dependencies:
1461 | brace-expansion "^1.0.0"
1462 |
1463 | minimist@^1.2.0:
1464 | version "1.2.0"
1465 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
1466 |
1467 | minimist@~0.0.1:
1468 | version "0.0.10"
1469 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
1470 |
1471 | minimist@0.0.8:
1472 | version "0.0.8"
1473 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
1474 |
1475 | mkdirp@^0.5.0, "mkdirp@>=0.5 0", mkdirp@~0.5.1, mkdirp@0.5.1, mkdirp@0.5.x:
1476 | version "0.5.1"
1477 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
1478 | dependencies:
1479 | minimist "0.0.8"
1480 |
1481 | mocha@^3.2.0:
1482 | version "3.2.0"
1483 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3"
1484 | dependencies:
1485 | browser-stdout "1.3.0"
1486 | commander "2.9.0"
1487 | debug "2.2.0"
1488 | diff "1.4.0"
1489 | escape-string-regexp "1.0.5"
1490 | glob "7.0.5"
1491 | growl "1.9.2"
1492 | json3 "3.3.2"
1493 | lodash.create "3.1.1"
1494 | mkdirp "0.5.1"
1495 | supports-color "3.1.2"
1496 |
1497 | moment@2.x.x:
1498 | version "2.17.0"
1499 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.0.tgz#a4c292e02aac5ddefb29a6eed24f51938dd3b74f"
1500 |
1501 | mongodb-core@2.0.13:
1502 | version "2.0.13"
1503 | resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.0.13.tgz#f9394b588dce0e579482e53d74dbc7d7a9d4519c"
1504 | dependencies:
1505 | bson "~0.5.6"
1506 | require_optional "~1.0.0"
1507 |
1508 | mongodb@^2.2.11, mongodb@2.2.11:
1509 | version "2.2.11"
1510 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.11.tgz#a828b036fe6a437a35e723af5f81781c4976306c"
1511 | dependencies:
1512 | es6-promise "3.2.1"
1513 | mongodb-core "2.0.13"
1514 | readable-stream "2.1.5"
1515 |
1516 | mongoose@^4.7.0:
1517 | version "4.7.0"
1518 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.7.0.tgz#adb7c6b73dfb76f204a70ba6cd364f887dcc2012"
1519 | dependencies:
1520 | async "2.1.2"
1521 | bson "~0.5.4"
1522 | hooks-fixed "1.2.0"
1523 | kareem "1.1.3"
1524 | mongodb "2.2.11"
1525 | mpath "0.2.1"
1526 | mpromise "0.5.5"
1527 | mquery "2.0.0"
1528 | ms "0.7.1"
1529 | muri "1.1.1"
1530 | regexp-clone "0.0.1"
1531 | sliced "1.0.1"
1532 |
1533 | mpath@0.2.1:
1534 | version "0.2.1"
1535 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.2.1.tgz#3a4e829359801de96309c27a6b2e102e89f9e96e"
1536 |
1537 | mpromise@0.5.5:
1538 | version "0.5.5"
1539 | resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6"
1540 |
1541 | mquery@2.0.0:
1542 | version "2.0.0"
1543 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.0.0.tgz#b5abc850b90dffc3e10ae49b4b6e7a479752df22"
1544 | dependencies:
1545 | bluebird "2.10.2"
1546 | debug "2.2.0"
1547 | regexp-clone "0.0.1"
1548 | sliced "0.0.5"
1549 |
1550 | ms@^0.7.1, ms@0.7.2:
1551 | version "0.7.2"
1552 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
1553 |
1554 | ms@0.7.1:
1555 | version "0.7.1"
1556 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
1557 |
1558 | muri@1.1.1:
1559 | version "1.1.1"
1560 | resolved "https://registry.yarnpkg.com/muri/-/muri-1.1.1.tgz#64bd904eaf8ff89600c994441fad3c5195905ac2"
1561 |
1562 | nan@^2.3.0:
1563 | version "2.4.0"
1564 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
1565 |
1566 | nan@2.3.5:
1567 | version "2.3.5"
1568 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.3.5.tgz#822a0dc266290ce4cd3a12282ca3e7e364668a08"
1569 |
1570 | negotiator@0.6.1:
1571 | version "0.6.1"
1572 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
1573 |
1574 | nested-error-stacks@^1.0.0:
1575 | version "1.0.2"
1576 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf"
1577 | dependencies:
1578 | inherits "~2.0.1"
1579 |
1580 | nocache@2.0.0:
1581 | version "2.0.0"
1582 | resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980"
1583 |
1584 | node-pre-gyp@^0.6.29:
1585 | version "0.6.31"
1586 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017"
1587 | dependencies:
1588 | mkdirp "~0.5.1"
1589 | nopt "~3.0.6"
1590 | npmlog "^4.0.0"
1591 | rc "~1.1.6"
1592 | request "^2.75.0"
1593 | rimraf "~2.5.4"
1594 | semver "~5.3.0"
1595 | tar "~2.2.1"
1596 | tar-pack "~3.3.0"
1597 |
1598 | nodemon:
1599 | version "1.11.0"
1600 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.11.0.tgz#226c562bd2a7b13d3d7518b49ad4828a3623d06c"
1601 | dependencies:
1602 | chokidar "^1.4.3"
1603 | debug "^2.2.0"
1604 | es6-promise "^3.0.2"
1605 | ignore-by-default "^1.0.0"
1606 | lodash.defaults "^3.1.2"
1607 | minimatch "^3.0.0"
1608 | ps-tree "^1.0.1"
1609 | touch "1.0.0"
1610 | undefsafe "0.0.3"
1611 | update-notifier "0.5.0"
1612 |
1613 | nopt@~1.0.10:
1614 | version "1.0.10"
1615 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
1616 | dependencies:
1617 | abbrev "1"
1618 |
1619 | nopt@~3.0.6, nopt@3.x:
1620 | version "3.0.6"
1621 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
1622 | dependencies:
1623 | abbrev "1"
1624 |
1625 | normalize-path@^2.0.1:
1626 | version "2.0.1"
1627 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
1628 |
1629 | npmlog@^4.0.0:
1630 | version "4.0.1"
1631 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8"
1632 | dependencies:
1633 | are-we-there-yet "~1.1.2"
1634 | console-control-strings "~1.1.0"
1635 | gauge "~2.7.1"
1636 | set-blocking "~2.0.0"
1637 |
1638 | number-is-nan@^1.0.0:
1639 | version "1.0.1"
1640 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
1641 |
1642 | oauth-sign@~0.8.1:
1643 | version "0.8.2"
1644 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
1645 |
1646 | object-assign@^3.0.0:
1647 | version "3.0.0"
1648 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
1649 |
1650 | object-assign@^4.0.1, object-assign@^4.1.0:
1651 | version "4.1.0"
1652 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
1653 |
1654 | object.omit@^2.0.0:
1655 | version "2.0.1"
1656 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
1657 | dependencies:
1658 | for-own "^0.1.4"
1659 | is-extendable "^0.1.1"
1660 |
1661 | on-finished@~2.3.0:
1662 | version "2.3.0"
1663 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1664 | dependencies:
1665 | ee-first "1.1.1"
1666 |
1667 | once@^1.3.0, once@1.x:
1668 | version "1.4.0"
1669 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1670 | dependencies:
1671 | wrappy "1"
1672 |
1673 | once@~1.3.0, once@~1.3.3:
1674 | version "1.3.3"
1675 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
1676 | dependencies:
1677 | wrappy "1"
1678 |
1679 | optimist@^0.6.1:
1680 | version "0.6.1"
1681 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
1682 | dependencies:
1683 | minimist "~0.0.1"
1684 | wordwrap "~0.0.2"
1685 |
1686 | optionator@^0.8.1:
1687 | version "0.8.2"
1688 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
1689 | dependencies:
1690 | deep-is "~0.1.3"
1691 | fast-levenshtein "~2.0.4"
1692 | levn "~0.3.0"
1693 | prelude-ls "~1.1.2"
1694 | type-check "~0.3.2"
1695 | wordwrap "~1.0.0"
1696 |
1697 | os-homedir@^1.0.0:
1698 | version "1.0.2"
1699 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
1700 |
1701 | os-tmpdir@^1.0.0:
1702 | version "1.0.2"
1703 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1704 |
1705 | osenv@^0.1.0:
1706 | version "0.1.3"
1707 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217"
1708 | dependencies:
1709 | os-homedir "^1.0.0"
1710 | os-tmpdir "^1.0.0"
1711 |
1712 | package-json@^1.0.0:
1713 | version "1.2.0"
1714 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0"
1715 | dependencies:
1716 | got "^3.2.0"
1717 | registry-url "^3.0.0"
1718 |
1719 | parse-glob@^3.0.4:
1720 | version "3.0.4"
1721 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
1722 | dependencies:
1723 | glob-base "^0.3.0"
1724 | is-dotfile "^1.0.0"
1725 | is-extglob "^1.0.0"
1726 | is-glob "^2.0.0"
1727 |
1728 | parseurl@~1.3.1:
1729 | version "1.3.1"
1730 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
1731 |
1732 | passport:
1733 | version "0.3.2"
1734 | resolved "https://registry.yarnpkg.com/passport/-/passport-0.3.2.tgz#9dd009f915e8fe095b0124a01b8f82da07510102"
1735 | dependencies:
1736 | passport-strategy "1.x.x"
1737 | pause "0.0.1"
1738 |
1739 | passport-http:
1740 | version "0.3.0"
1741 | resolved "https://registry.yarnpkg.com/passport-http/-/passport-http-0.3.0.tgz#8ee53d4380be9c60df2151925029826f77115603"
1742 | dependencies:
1743 | passport-strategy "1.x.x"
1744 |
1745 | passport-jwt@^2.2.1:
1746 | version "2.2.1"
1747 | resolved "https://registry.yarnpkg.com/passport-jwt/-/passport-jwt-2.2.1.tgz#0e004c94071319d673d9d9bcfd1574a868011527"
1748 | dependencies:
1749 | jsonwebtoken "^7.0.0"
1750 | passport-strategy "^1.0.0"
1751 |
1752 | passport-strategy@^1.0.0, passport-strategy@1.x.x:
1753 | version "1.0.0"
1754 | resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4"
1755 |
1756 | path-is-absolute@^1.0.0:
1757 | version "1.0.1"
1758 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1759 |
1760 | path-to-regexp@0.1.7:
1761 | version "0.1.7"
1762 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
1763 |
1764 | pause-stream@0.0.11:
1765 | version "0.0.11"
1766 | resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
1767 | dependencies:
1768 | through "~2.3"
1769 |
1770 | pause@0.0.1:
1771 | version "0.0.1"
1772 | resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
1773 |
1774 | pinkie-promise@^2.0.0:
1775 | version "2.0.1"
1776 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
1777 | dependencies:
1778 | pinkie "^2.0.0"
1779 |
1780 | pinkie@^2.0.0:
1781 | version "2.0.4"
1782 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
1783 |
1784 | platform@1.3.1:
1785 | version "1.3.1"
1786 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.1.tgz#492210892335bd3131c0a08dda2d93ec3543e423"
1787 |
1788 | prelude-ls@~1.1.2:
1789 | version "1.1.2"
1790 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1791 |
1792 | prepend-http@^1.0.0:
1793 | version "1.0.4"
1794 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
1795 |
1796 | preserve@^0.2.0:
1797 | version "0.2.0"
1798 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
1799 |
1800 | process-nextick-args@~1.0.6:
1801 | version "1.0.7"
1802 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
1803 |
1804 | process@~0.5.1:
1805 | version "0.5.2"
1806 | resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
1807 |
1808 | proxy-addr@~1.1.2:
1809 | version "1.1.2"
1810 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37"
1811 | dependencies:
1812 | forwarded "~0.1.0"
1813 | ipaddr.js "1.1.1"
1814 |
1815 | ps-tree@^1.0.1:
1816 | version "1.1.0"
1817 | resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014"
1818 | dependencies:
1819 | event-stream "~3.3.0"
1820 |
1821 | punycode@^1.4.1:
1822 | version "1.4.1"
1823 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
1824 |
1825 | qs@^6.1.0, qs@^6.2.0, qs@~6.3.0:
1826 | version "6.3.0"
1827 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
1828 |
1829 | qs@6.2.0:
1830 | version "6.2.0"
1831 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
1832 |
1833 | randomatic@^1.1.3:
1834 | version "1.1.6"
1835 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
1836 | dependencies:
1837 | is-number "^2.0.2"
1838 | kind-of "^3.0.2"
1839 |
1840 | range-parser@~1.2.0:
1841 | version "1.2.0"
1842 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
1843 |
1844 | raw-body@~2.1.7:
1845 | version "2.1.7"
1846 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774"
1847 | dependencies:
1848 | bytes "2.4.0"
1849 | iconv-lite "0.4.13"
1850 | unpipe "1.0.0"
1851 |
1852 | rc@^1.0.1, rc@~1.1.6:
1853 | version "1.1.6"
1854 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
1855 | dependencies:
1856 | deep-extend "~0.4.0"
1857 | ini "~1.3.0"
1858 | minimist "^1.2.0"
1859 | strip-json-comments "~1.0.4"
1860 |
1861 | read-all-stream@^3.0.0:
1862 | version "3.1.0"
1863 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
1864 | dependencies:
1865 | pinkie-promise "^2.0.0"
1866 | readable-stream "^2.0.0"
1867 |
1868 | readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5:
1869 | version "2.2.2"
1870 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
1871 | dependencies:
1872 | buffer-shims "^1.0.0"
1873 | core-util-is "~1.0.0"
1874 | inherits "~2.0.1"
1875 | isarray "~1.0.0"
1876 | process-nextick-args "~1.0.6"
1877 | string_decoder "~0.10.x"
1878 | util-deprecate "~1.0.1"
1879 |
1880 | readable-stream@~2.1.4, readable-stream@2.1.5:
1881 | version "2.1.5"
1882 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
1883 | dependencies:
1884 | buffer-shims "^1.0.0"
1885 | core-util-is "~1.0.0"
1886 | inherits "~2.0.1"
1887 | isarray "~1.0.0"
1888 | process-nextick-args "~1.0.6"
1889 | string_decoder "~0.10.x"
1890 | util-deprecate "~1.0.1"
1891 |
1892 | readdirp@^2.0.0:
1893 | version "2.1.0"
1894 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
1895 | dependencies:
1896 | graceful-fs "^4.1.2"
1897 | minimatch "^3.0.2"
1898 | readable-stream "^2.0.2"
1899 | set-immediate-shim "^1.0.1"
1900 |
1901 | referrer-policy@1.0.0:
1902 | version "1.0.0"
1903 | resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.0.0.tgz#f60eedc92f942b01a6118121ec932d66e8fd7e14"
1904 |
1905 | regex-cache@^0.4.2:
1906 | version "0.4.3"
1907 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
1908 | dependencies:
1909 | is-equal-shallow "^0.1.3"
1910 | is-primitive "^2.0.0"
1911 |
1912 | regexp-clone@0.0.1:
1913 | version "0.0.1"
1914 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589"
1915 |
1916 | registry-url@^3.0.0:
1917 | version "3.1.0"
1918 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
1919 | dependencies:
1920 | rc "^1.0.1"
1921 |
1922 | repeat-element@^1.1.2:
1923 | version "1.1.2"
1924 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
1925 |
1926 | repeat-string@^1.5.2:
1927 | version "1.6.1"
1928 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
1929 |
1930 | repeating@^1.1.2:
1931 | version "1.1.3"
1932 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac"
1933 | dependencies:
1934 | is-finite "^1.0.0"
1935 |
1936 | request@^2.75.0:
1937 | version "2.79.0"
1938 | resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
1939 | dependencies:
1940 | aws-sign2 "~0.6.0"
1941 | aws4 "^1.2.1"
1942 | caseless "~0.11.0"
1943 | combined-stream "~1.0.5"
1944 | extend "~3.0.0"
1945 | forever-agent "~0.6.1"
1946 | form-data "~2.1.1"
1947 | har-validator "~2.0.6"
1948 | hawk "~3.1.3"
1949 | http-signature "~1.1.0"
1950 | is-typedarray "~1.0.0"
1951 | isstream "~0.1.2"
1952 | json-stringify-safe "~5.0.1"
1953 | mime-types "~2.1.7"
1954 | oauth-sign "~0.8.1"
1955 | qs "~6.3.0"
1956 | stringstream "~0.0.4"
1957 | tough-cookie "~2.3.0"
1958 | tunnel-agent "~0.4.1"
1959 | uuid "^3.0.0"
1960 |
1961 | require_optional@~1.0.0:
1962 | version "1.0.0"
1963 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf"
1964 | dependencies:
1965 | resolve-from "^2.0.0"
1966 | semver "^5.1.0"
1967 |
1968 | resolve-from@^2.0.0:
1969 | version "2.0.0"
1970 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
1971 |
1972 | resolve@1.1.x:
1973 | version "1.1.7"
1974 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
1975 |
1976 | right-align@^0.1.1:
1977 | version "0.1.3"
1978 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
1979 | dependencies:
1980 | align-text "^0.1.1"
1981 |
1982 | rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2:
1983 | version "2.5.4"
1984 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
1985 | dependencies:
1986 | glob "^7.0.5"
1987 |
1988 | safe-buffer@^5.0.1:
1989 | version "5.0.1"
1990 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
1991 |
1992 | samsam@~1.1:
1993 | version "1.1.3"
1994 | resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621"
1995 |
1996 | samsam@1.1.2:
1997 | version "1.1.2"
1998 | resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
1999 |
2000 | semver-diff@^2.0.0:
2001 | version "2.1.0"
2002 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
2003 | dependencies:
2004 | semver "^5.0.3"
2005 |
2006 | semver@^5.0.3, semver@^5.1.0, semver@~5.3.0:
2007 | version "5.3.0"
2008 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
2009 |
2010 | send@0.14.1:
2011 | version "0.14.1"
2012 | resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a"
2013 | dependencies:
2014 | debug "~2.2.0"
2015 | depd "~1.1.0"
2016 | destroy "~1.0.4"
2017 | encodeurl "~1.0.1"
2018 | escape-html "~1.0.3"
2019 | etag "~1.7.0"
2020 | fresh "0.3.0"
2021 | http-errors "~1.5.0"
2022 | mime "1.3.4"
2023 | ms "0.7.1"
2024 | on-finished "~2.3.0"
2025 | range-parser "~1.2.0"
2026 | statuses "~1.3.0"
2027 |
2028 | serve-static@~1.11.1:
2029 | version "1.11.1"
2030 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805"
2031 | dependencies:
2032 | encodeurl "~1.0.1"
2033 | escape-html "~1.0.3"
2034 | parseurl "~1.3.1"
2035 | send "0.14.1"
2036 |
2037 | set-blocking@~2.0.0:
2038 | version "2.0.0"
2039 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2040 |
2041 | set-immediate-shim@^1.0.1:
2042 | version "1.0.1"
2043 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
2044 |
2045 | setprototypeof@1.0.2:
2046 | version "1.0.2"
2047 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
2048 |
2049 | signal-exit@^3.0.0:
2050 | version "3.0.1"
2051 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
2052 |
2053 | sinon:
2054 | version "1.17.6"
2055 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.6.tgz#a43116db59577c8296356afee13fafc2332e58e1"
2056 | dependencies:
2057 | formatio "1.1.1"
2058 | lolex "1.3.2"
2059 | samsam "1.1.2"
2060 | util ">=0.10.3 <1"
2061 |
2062 | sinon-mongoose:
2063 | version "1.3.0"
2064 | resolved "https://registry.yarnpkg.com/sinon-mongoose/-/sinon-mongoose-1.3.0.tgz#2a2c75c36e9d7b665390f23fc7f91d548f580e45"
2065 |
2066 | sliced@0.0.5:
2067 | version "0.0.5"
2068 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f"
2069 |
2070 | sliced@1.0.1:
2071 | version "1.0.1"
2072 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
2073 |
2074 | slide@^1.1.5:
2075 | version "1.1.6"
2076 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
2077 |
2078 | sntp@1.x.x:
2079 | version "1.0.9"
2080 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
2081 | dependencies:
2082 | hoek "2.x.x"
2083 |
2084 | source-map@^0.4.4:
2085 | version "0.4.4"
2086 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
2087 | dependencies:
2088 | amdefine ">=0.0.4"
2089 |
2090 | source-map@~0.2.0:
2091 | version "0.2.0"
2092 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
2093 | dependencies:
2094 | amdefine ">=0.0.4"
2095 |
2096 | source-map@~0.5.1:
2097 | version "0.5.6"
2098 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
2099 |
2100 | split@0.3:
2101 | version "0.3.3"
2102 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
2103 | dependencies:
2104 | through "2"
2105 |
2106 | sprintf-js@~1.0.2:
2107 | version "1.0.3"
2108 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2109 |
2110 | sshpk@^1.7.0:
2111 | version "1.10.1"
2112 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
2113 | dependencies:
2114 | asn1 "~0.2.3"
2115 | assert-plus "^1.0.0"
2116 | dashdash "^1.12.0"
2117 | getpass "^0.1.1"
2118 | optionalDependencies:
2119 | bcrypt-pbkdf "^1.0.0"
2120 | ecc-jsbn "~0.1.1"
2121 | jodid25519 "^1.0.0"
2122 | jsbn "~0.1.0"
2123 | tweetnacl "~0.14.0"
2124 |
2125 | stack-trace@0.0.x:
2126 | version "0.0.9"
2127 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695"
2128 |
2129 | "statuses@>= 1.3.1 < 2", statuses@~1.3.0:
2130 | version "1.3.1"
2131 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
2132 |
2133 | stream-combiner@~0.0.4:
2134 | version "0.0.4"
2135 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
2136 | dependencies:
2137 | duplexer "~0.1.1"
2138 |
2139 | stream-shift@^1.0.0:
2140 | version "1.0.0"
2141 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
2142 |
2143 | string_decoder@~0.10.x:
2144 | version "0.10.31"
2145 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
2146 |
2147 | string-length@^1.0.0:
2148 | version "1.0.1"
2149 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
2150 | dependencies:
2151 | strip-ansi "^3.0.0"
2152 |
2153 | string-width@^1.0.1:
2154 | version "1.0.2"
2155 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
2156 | dependencies:
2157 | code-point-at "^1.0.0"
2158 | is-fullwidth-code-point "^1.0.0"
2159 | strip-ansi "^3.0.0"
2160 |
2161 | stringstream@~0.0.4:
2162 | version "0.0.5"
2163 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
2164 |
2165 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
2166 | version "3.0.1"
2167 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
2168 | dependencies:
2169 | ansi-regex "^2.0.0"
2170 |
2171 | strip-json-comments@~1.0.4:
2172 | version "1.0.4"
2173 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
2174 |
2175 | superagent@^2.0.0:
2176 | version "2.3.0"
2177 | resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115"
2178 | dependencies:
2179 | component-emitter "^1.2.0"
2180 | cookiejar "^2.0.6"
2181 | debug "^2.2.0"
2182 | extend "^3.0.0"
2183 | form-data "1.0.0-rc4"
2184 | formidable "^1.0.17"
2185 | methods "^1.1.1"
2186 | mime "^1.3.4"
2187 | qs "^6.1.0"
2188 | readable-stream "^2.0.5"
2189 |
2190 | supports-color@^2.0.0:
2191 | version "2.0.0"
2192 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
2193 |
2194 | supports-color@^3.1.0, supports-color@3.1.2:
2195 | version "3.1.2"
2196 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
2197 | dependencies:
2198 | has-flag "^1.0.0"
2199 |
2200 | tar-pack@~3.3.0:
2201 | version "3.3.0"
2202 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
2203 | dependencies:
2204 | debug "~2.2.0"
2205 | fstream "~1.0.10"
2206 | fstream-ignore "~1.0.5"
2207 | once "~1.3.3"
2208 | readable-stream "~2.1.4"
2209 | rimraf "~2.5.1"
2210 | tar "~2.2.1"
2211 | uid-number "~0.0.6"
2212 |
2213 | tar@~2.2.1:
2214 | version "2.2.1"
2215 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
2216 | dependencies:
2217 | block-stream "*"
2218 | fstream "^1.0.2"
2219 | inherits "2"
2220 |
2221 | through@~2.3, through@~2.3.1, through@2:
2222 | version "2.3.8"
2223 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
2224 |
2225 | timed-out@^2.0.0:
2226 | version "2.0.0"
2227 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a"
2228 |
2229 | topo@1.x.x:
2230 | version "1.1.0"
2231 | resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5"
2232 | dependencies:
2233 | hoek "2.x.x"
2234 |
2235 | topo@2.x.x:
2236 | version "2.0.2"
2237 | resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182"
2238 | dependencies:
2239 | hoek "4.x.x"
2240 |
2241 | touch@1.0.0:
2242 | version "1.0.0"
2243 | resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de"
2244 | dependencies:
2245 | nopt "~1.0.10"
2246 |
2247 | tough-cookie@~2.3.0:
2248 | version "2.3.2"
2249 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
2250 | dependencies:
2251 | punycode "^1.4.1"
2252 |
2253 | tunnel-agent@~0.4.1:
2254 | version "0.4.3"
2255 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
2256 |
2257 | tweetnacl@^0.14.3, tweetnacl@~0.14.0:
2258 | version "0.14.3"
2259 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d"
2260 |
2261 | type-check@~0.3.2:
2262 | version "0.3.2"
2263 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
2264 | dependencies:
2265 | prelude-ls "~1.1.2"
2266 |
2267 | type-detect@^1.0.0:
2268 | version "1.0.0"
2269 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
2270 |
2271 | type-detect@0.1.1:
2272 | version "0.1.1"
2273 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
2274 |
2275 | type-is@~1.6.13:
2276 | version "1.6.14"
2277 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
2278 | dependencies:
2279 | media-typer "0.3.0"
2280 | mime-types "~2.1.13"
2281 |
2282 | uglify-js@^2.6:
2283 | version "2.7.4"
2284 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2"
2285 | dependencies:
2286 | async "~0.2.6"
2287 | source-map "~0.5.1"
2288 | uglify-to-browserify "~1.0.0"
2289 | yargs "~3.10.0"
2290 |
2291 | uglify-to-browserify@~1.0.0:
2292 | version "1.0.2"
2293 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
2294 |
2295 | uid-number@~0.0.6:
2296 | version "0.0.6"
2297 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
2298 |
2299 | undefsafe@0.0.3:
2300 | version "0.0.3"
2301 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f"
2302 |
2303 | unpipe@~1.0.0, unpipe@1.0.0:
2304 | version "1.0.0"
2305 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2306 |
2307 | update-notifier@0.5.0:
2308 | version "0.5.0"
2309 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc"
2310 | dependencies:
2311 | chalk "^1.0.0"
2312 | configstore "^1.0.0"
2313 | is-npm "^1.0.0"
2314 | latest-version "^1.0.0"
2315 | repeating "^1.1.2"
2316 | semver-diff "^2.0.0"
2317 | string-length "^1.0.0"
2318 |
2319 | util-deprecate@~1.0.1:
2320 | version "1.0.2"
2321 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2322 |
2323 | "util@>=0.10.3 <1":
2324 | version "0.10.3"
2325 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
2326 | dependencies:
2327 | inherits "2.0.1"
2328 |
2329 | utils-merge@1.0.0:
2330 | version "1.0.0"
2331 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
2332 |
2333 | uuid@^2.0.1:
2334 | version "2.0.3"
2335 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
2336 |
2337 | uuid@^3.0.0:
2338 | version "3.0.0"
2339 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728"
2340 |
2341 | vary@^1, vary@~1.1.0:
2342 | version "1.1.0"
2343 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
2344 |
2345 | verror@1.3.6:
2346 | version "1.3.6"
2347 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
2348 | dependencies:
2349 | extsprintf "1.0.2"
2350 |
2351 | which@^1.1.1:
2352 | version "1.2.12"
2353 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
2354 | dependencies:
2355 | isexe "^1.1.1"
2356 |
2357 | wide-align@^1.1.0:
2358 | version "1.1.0"
2359 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
2360 | dependencies:
2361 | string-width "^1.0.1"
2362 |
2363 | window-size@0.1.0:
2364 | version "0.1.0"
2365 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
2366 |
2367 | winston@^2.3.0:
2368 | version "2.3.0"
2369 | resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.0.tgz#207faaab6fccf3fe493743dd2b03dbafc7ceb78c"
2370 | dependencies:
2371 | async "~1.0.0"
2372 | colors "1.0.x"
2373 | cycle "1.0.x"
2374 | eyes "0.1.x"
2375 | isstream "0.1.x"
2376 | stack-trace "0.0.x"
2377 |
2378 | wordwrap@^1.0.0, wordwrap@~1.0.0:
2379 | version "1.0.0"
2380 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
2381 |
2382 | wordwrap@~0.0.2:
2383 | version "0.0.3"
2384 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
2385 |
2386 | wordwrap@0.0.2:
2387 | version "0.0.2"
2388 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
2389 |
2390 | wrappy@1:
2391 | version "1.0.2"
2392 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2393 |
2394 | write-file-atomic@^1.1.2:
2395 | version "1.2.0"
2396 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab"
2397 | dependencies:
2398 | graceful-fs "^4.1.2"
2399 | imurmurhash "^0.1.4"
2400 | slide "^1.1.5"
2401 |
2402 | x-xss-protection@1.0.0:
2403 | version "1.0.0"
2404 | resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.0.0.tgz#898afb93869b24661cf9c52f9ee8db8ed0764dd9"
2405 |
2406 | xdg-basedir@^2.0.0:
2407 | version "2.0.0"
2408 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
2409 | dependencies:
2410 | os-homedir "^1.0.0"
2411 |
2412 | xtend@^4.0.0, xtend@^4.0.1:
2413 | version "4.0.1"
2414 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
2415 |
2416 | yargs@~3.10.0:
2417 | version "3.10.0"
2418 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
2419 | dependencies:
2420 | camelcase "^1.0.2"
2421 | cliui "^2.1.0"
2422 | decamelize "^1.0.0"
2423 | window-size "0.1.0"
2424 |
2425 |
--------------------------------------------------------------------------------