From 426d3fffc1b17e4f3747bf494419e440de3eff58 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 22 Jan 2019 16:50:33 +0100 Subject: [PATCH 01/77] Replace gulp with webpack, new build pipeline for js and scss assets --- .babelrc | 13 +- .browserlistrc | 2 + .postcssrc | 5 + .../components/FormLocationSelector.js | 3 +- app/scripts/components/LocationMap.js | 3 +- app/scripts/index.js | 2 + app/styles/app.scss | 2 +- gulpfile.babel.js | 349 - package-lock.json | 16542 ++++++---------- package.json | 169 +- webpack.config.js | 92 + 11 files changed, 6239 insertions(+), 10943 deletions(-) create mode 100644 .browserlistrc create mode 100644 .postcssrc delete mode 100644 gulpfile.babel.js create mode 100644 webpack.config.js diff --git a/.babelrc b/.babelrc index a9d75928..fc4a1169 100644 --- a/.babelrc +++ b/.babelrc @@ -1,11 +1,16 @@ { "presets": [ - "es2015", - "stage-0", - "react" + [ + "@babel/preset-env", + { + "useBuiltIns": "usage" + } + ], + "@babel/preset-react" ], "plugins": [ - "add-module-exports", + "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-object-rest-spread", "transform-inline-environment-variables" ] } diff --git a/.browserlistrc b/.browserlistrc new file mode 100644 index 00000000..590d3d4b --- /dev/null +++ b/.browserlistrc @@ -0,0 +1,2 @@ +> 1% +last 4 versions diff --git a/.postcssrc b/.postcssrc new file mode 100644 index 00000000..529e0a2b --- /dev/null +++ b/.postcssrc @@ -0,0 +1,5 @@ +{ + "plugins": { + "autoprefixer": {} + } +} diff --git a/app/scripts/components/FormLocationSelector.js b/app/scripts/components/FormLocationSelector.js index 04fda029..754845b7 100644 --- a/app/scripts/components/FormLocationSelector.js +++ b/app/scripts/components/FormLocationSelector.js @@ -1,7 +1,6 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import withScriptjs from 'react-google-maps/lib/async/withScriptjs' -import { GoogleMap, Marker, withGoogleMap } from 'react-google-maps' +import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' import { asFormField } from '../containers' import config from '../../../common/config' diff --git a/app/scripts/components/LocationMap.js b/app/scripts/components/LocationMap.js index 7aa94d09..9a0582e6 100644 --- a/app/scripts/components/LocationMap.js +++ b/app/scripts/components/LocationMap.js @@ -1,7 +1,6 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import withScriptjs from 'react-google-maps/lib/async/withScriptjs' -import { GoogleMap, Marker, withGoogleMap } from 'react-google-maps' +import { GoogleMap, Marker, withGoogleMap, withScriptjs} from 'react-google-maps' import config from '../../../common/config' import styles from '../utils/googleMapStyle.json' diff --git a/app/scripts/index.js b/app/scripts/index.js index 62500008..ebda5232 100644 --- a/app/scripts/index.js +++ b/app/scripts/index.js @@ -1,3 +1,5 @@ +import '../styles/app.scss' + import moment from 'moment-timezone' import React from 'react' import { ConnectedRouter } from 'react-router-redux' diff --git a/app/styles/app.scss b/app/styles/app.scss index 4114b6e3..ba332819 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -1,6 +1,6 @@ // vendor -@import "../../node_modules/normalize.css/normalize"; +@import "~normalize.css"; // common diff --git a/gulpfile.babel.js b/gulpfile.babel.js deleted file mode 100644 index a6a0ef58..00000000 --- a/gulpfile.babel.js +++ /dev/null @@ -1,349 +0,0 @@ -import autoprefixer from 'gulp-autoprefixer' -import babelify from 'babelify' -import browserify from 'browserify' -import buffer from 'vinyl-buffer' -import cleancss from 'gulp-clean-css' -import del from 'del' -import dotenv from 'dotenv' -import eslint from 'gulp-eslint' -import fs from 'fs' -import gulp from 'gulp' -import handlebars from 'gulp-compile-handlebars' -import htmlmin from 'gulp-htmlmin' -import imagemin from 'gulp-imagemin' -import notify from 'gulp-notify' -import path from 'path' -import rename from 'gulp-rename' -import rev from 'gulp-rev' -import runIf from 'gulp-if' -import runSequence from 'run-sequence' -import sass from 'gulp-sass' -import sasslint from 'gulp-sass-lint' -import source from 'vinyl-source-stream' -import tap from 'gulp-tap' -import uglify from 'gulp-uglify' - -const VENDOR_MODULES = [ - 'classnames', - 'gif-stream', - 'history', - 'immutability-helper', - 'isomorphic-fetch', - 'jwt-decode', - 'keymirror', - 'moment-timezone', - 'path', - 'prop-types', - 'react', - 'react-dom', - 'react-google-maps', - 'react-google-maps/lib/async/withScriptjs', - 'react-modal', - 'react-redux', - 'react-router', - 'react-router-dom', - 'react-router-redux', - 'react-scroll', - 'react-slider', - 'react-youtube', - 'redux', - 'redux-auth-wrapper/authWrapper', - 'redux-auth-wrapper/history4/redirect', - 'redux-form', - 'redux-logger', - 'redux-thunk', -] - -const APP_PATH = './app' -const DIST_PATH = './public' -const TMP_PATH = './.tmp' - -/** - * Load environment variables and configuration from file - */ - -const envVariables = dotenv.config({ - path: path.join(__dirname, '.env'), -}) - -if (envVariables.error && process.env.NODE_ENV === 'development') { - console.error('".env" file does not exist, please configure the app first') - process.exit(1) -} - -/** - * Helper method for checking if build - * is for a production environment - */ - -function isDevelopment() { - return process.env.NODE_ENV === 'development' -} - -/** - * Helper methods for loading configuration files - */ - -function readJsonSync(path) { - return JSON.parse( - fs.readFileSync(path, 'utf8') - ) -} - -function getBabelConfiguration() { - return readJsonSync('./.babelrc') -} - -function getRevisioningManifest() { - return readJsonSync(`${DIST_PATH}/rev-manifest.json`) -} - -/** - * We need these Handlebar Options to utilize our own - * methods for static asset revisioning replacement in - * .html files - */ - -function getEnvironmentVariable(key) { - return key in process.env ? process.env[key] : '' -} - -const handlebarOptions = { - helpers: { - assets: (path, context) => { - return `/static/${context.data.root[path.replace('/static/', '')]}` - }, - env: getEnvironmentVariable, - }, -} - -const handlebarOptionsDevelopment = { - helpers: { - assets: (path) => path, - env: getEnvironmentVariable, - }, -} - -/** - * Cleanup tasks to delete the temporary - * or production build folder - */ - -gulp.task('clean:tmp', () => { - return del.sync([ - `${TMP_PATH}/**`, - ]) -}) - -gulp.task('clean:dist', () => { - return del.sync([ - `${DIST_PATH}/**`, - ]) -}) - -gulp.task('clean:rev', () => { - return del.sync([ - `${DIST_PATH}/rev-manifest.json`, - ]) -}) - -gulp.task('clean', [ - 'clean:tmp', - 'clean:dist', -]) - -/** - * A collection of tasks for preparing, minifing, - * bundling different kinds of assets for our app - */ - -gulp.task('assets:styles', (done) => { - gulp.src(`${APP_PATH}/styles/app.scss`) - .pipe(sass()) - .on('error', notify.onError({ - message: 'Error: <%= error.message %>', - title: 'Error on styles compilation', - })) - .pipe(autoprefixer({ - browsers: ['last 3 versions'], - })) - .pipe(runIf(!isDevelopment(), cleancss())) - .pipe(gulp.dest(`${TMP_PATH}/styles/`)) - .on('end', done) -}) - -gulp.task('assets:scripts:app', (done) => { - gulp.src(`${APP_PATH}/scripts/index.js`, { read: false }) - .pipe(tap((file) => { - file.contents = browserify( - file.path, { - debug: isDevelopment(), - bundleExternal: false, - }) - .transform(babelify.configure(getBabelConfiguration())) - .bundle() - })) - .pipe(buffer()) - .on('error', notify.onError({ - message: 'Error: <%= error.message %>', - title: 'Error on scripts compilation', - })) - .pipe(runIf(!isDevelopment(), uglify())) - .pipe(rename('app.js')) - .pipe(gulp.dest(`${TMP_PATH}/scripts/`)) - .on('end', done) -}) - -gulp.task('assets:scripts:vendor', (done) => { - const dependencies = browserify() - - VENDOR_MODULES.forEach(lib => { - dependencies.require(lib) - }) - - dependencies.bundle() - .pipe(source('lib.js')) - .pipe(buffer()) - .pipe(runIf(!isDevelopment(), uglify())) - .pipe(gulp.dest(`${TMP_PATH}/scripts/`)) - .on('end', done) -}) - -gulp.task('assets:scripts', (done) => { - runSequence( - 'assets:scripts:app', - 'assets:scripts:vendor', - done - ) -}) - -gulp.task('assets:images', (done) => { - gulp.src(`${APP_PATH}/images/**/*.{png,jpg,svg,gif,ico}`) - .pipe(imagemin()) - .pipe(gulp.dest(`${TMP_PATH}/images/`)) - .on('end', done) -}) - -gulp.task('assets:fonts', (done) => { - gulp.src(`${APP_PATH}/fonts/**/*`) - .pipe(gulp.dest(`${TMP_PATH}/fonts/`)) - .on('end', done) -}) - -gulp.task('assets:html', (done) => { - gulp.src(`${APP_PATH}/index.html`) - .pipe(handlebars({}, handlebarOptionsDevelopment)) - .pipe(gulp.dest(TMP_PATH)) - .on('end', done) -}) - -gulp.task('assets:manifest', (done) => { - gulp.src(`${APP_PATH}/manifest.json`) - .pipe(gulp.dest(TMP_PATH)) - .on('end', done) -}) - -gulp.task('assets', (done) => { - runSequence( - 'assets:styles', - 'assets:fonts', - 'assets:scripts', - 'assets:images', - 'assets:html', - 'assets:manifest', - done - ) -}) - -/** - * Check against style violations - */ - -gulp.task('lint:js', (done) => { - gulp.src(['./gulpfile.babel.js', `${APP_PATH}/scripts/**/*.js`]) - .pipe(eslint()) - .pipe(eslint.format()) - .on('end', done) -}) - -gulp.task('lint:scss', (done) => { - gulp.src(`${APP_PATH}/styles/**/*.scss`) - .pipe(sasslint()) - .pipe(sasslint.format()) - .on('end', done) -}) - -gulp.task('lint', [ - 'lint:js', - 'lint:scss', -]) - -/** - * Build the app for production - */ - -gulp.task('build:rev:pre', (done) => { - // copy all files without revisioning into dist folder - gulp.src([`${TMP_PATH}/**/*`, `!${TMP_PATH}/**/{app,lib}.{js,css}`]) - .pipe(gulp.dest(DIST_PATH)) - .on('end', done) -}) - -gulp.task('build:rev', (done) => { - // copy assets with revisioning and build a version manifest - gulp.src(`${TMP_PATH}/**/{app,lib}.{js,css}`) - .pipe(rev()) - .pipe(gulp.dest(DIST_PATH)) - .pipe(rev.manifest()) - .pipe(gulp.dest(DIST_PATH)) - .on('end', done) -}) - -gulp.task('build:rev:post', (done) => { - // read the asset name version manifest - const manifest = getRevisioningManifest() - - // replace asset file names via handlebars in .html files - gulp.src(`${APP_PATH}/*.html`) - .pipe(handlebars(manifest, handlebarOptions)) - .pipe(htmlmin({ - collapseWhitespace: true, - minifyCSS: true, - minifyJS: true, - })) - .pipe(gulp.dest(DIST_PATH)) - .on('end', done) -}) - -gulp.task('build', (done) => { - if (isDevelopment()) { - console.info('Ignore build task when NODE_ENV is not set to production') // eslint-disable-line no-console - return done() - } - - return runSequence( - 'clean', - 'assets', - 'build:rev:pre', - 'build:rev', - 'build:rev:post', - 'clean:rev', - done - ) -}) - -/** - * Main tasks for development and deployment - */ - -gulp.task('watch', ['clean:tmp', 'assets'], () => { - gulp.watch(`${APP_PATH}/styles/**/*.scss`, ['assets:styles', 'lint:scss']) - gulp.watch(`${APP_PATH}/scripts/**/*.js`, ['assets:scripts:app', 'lint:js']) - gulp.watch('./common/**/*.js', ['assets:scripts:app', 'lint:js']) - gulp.watch(`${APP_PATH}/images/**/*`, ['assets:images']) - gulp.watch(`${APP_PATH}/fonts/**/*`, ['assets:fonts']) - gulp.watch(`${APP_PATH}/index.html`, ['assets:html']) - gulp.watch(`${APP_PATH}/manifest.json`, ['assets:manifest']) -}) - -gulp.task('default', ['build']) diff --git a/package-lock.json b/package-lock.json index f6a9c75a..398b3902 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,1817 +4,1649 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/geojson": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz", - "integrity": "sha1-sC0QqwKOKSisWSoFGqpJgaGUHQM=" - }, - "@types/node": { - "version": "6.0.85", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.85.tgz", - "integrity": "sha512-6qLZpfQFO/g5Ns2e7RsW6brk0Q6Xzwiw7kVVU/XiQNOiJXSojhX76GP457PBYIsNMH2WfcGgcnZB4awFDHrwpA==" - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "@babel/highlight": "^7.0.0" } }, - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" - }, - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "@babel/core": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", + "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "dev": true, "requires": { - "mime-types": "2.1.15", - "negotiator": "0.6.1" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helpers": "^7.2.0", + "@babel/parser": "^7.2.2", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.2.2", + "@babel/types": "^7.2.2", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.10", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "@babel/generator": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.0.tgz", + "integrity": "sha512-dZTwMvTgWfhmibq4V9X+LMf6Bgl7zAodRn9PvcPdhlzFMbvUutx74dbEv7Atz3ToeEpevYEJtAwfxq/bDCzHWg==", "dev": true, "requires": { - "acorn": "3.3.0" + "@babel/types": "^7.3.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true } } }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "@babel/types": "^7.0.0" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "@babel/helper-builder-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", + "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" + "@babel/types": "^7.3.0", + "esutils": "^2.0.0" } }, - "ap": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ap/-/ap-0.2.0.tgz", - "integrity": "sha1-rglCYAspkS8NKxTsYMRejzMLYRA=" - }, - "append-field": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", - "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" - }, - "aproba": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", - "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" - }, - "archive-type": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", - "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "@babel/helper-call-delegate": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", + "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", + "dev": true, "requires": { - "file-type": "3.9.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - } + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "@babel/helper-create-class-features-plugin": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.0.tgz", + "integrity": "sha512-DUsQNS2CGLZZ7I3W3fvh0YpPDd6BuWJlDl+qmZZpABZHza2ErE3LxtEzLJFHFC1ZwtlAXvHhbFYbtM5o5B0WBw==", + "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.2.3" } }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "@babel/helper-define-map": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", + "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", + "dev": true, "requires": { - "sprintf-js": "1.0.3" + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, "requires": { - "arr-flatten": "1.1.0" + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, "requires": { - "array-uniq": "1.0.3" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "bn.js": "4.11.7", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "@babel/types": "^7.0.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@babel/helper-hoist-variables": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", + "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", "dev": true, "requires": { - "util": "0.10.3" + "@babel/types": "^7.0.0" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "@babel/helper-member-expression-to-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", + "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", "dev": true, "requires": { - "acorn": "4.0.13" + "@babel/types": "^7.0.0" } }, - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "@babel/helper-module-transforms": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", + "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.2.2", + "@babel/types": "^7.2.2", + "lodash": "^4.17.10" + } }, - "async-each-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", - "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", - "optional": true + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "autoprefixer": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.2.tgz", - "integrity": "sha1-++rwfUj9h44Ggr98vurecorbKxg=", - "dev": true, - "requires": { - "browserslist": "2.2.2", - "caniuse-lite": "1.0.30000704", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.8", - "postcss-value-parser": "3.3.0" - } - }, - "aws-sdk": { - "version": "2.94.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.94.0.tgz", - "integrity": "sha1-cEPePvjCTLarS/I18I2H2EFz4XQ=", - "requires": { - "buffer": "4.9.1", - "crypto-browserify": "1.0.9", - "events": "1.1.1", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.0.1", - "xml2js": "0.4.17", - "xmlbuilder": "4.2.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "crypto-browserify": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz", - "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" - } + "@babel/helper-regex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", + "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", + "dev": true, + "requires": { + "lodash": "^4.17.10" } }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" - }, - "babel-cli": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", - "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", - "dev": true, - "requires": { - "babel-core": "6.25.0", - "babel-polyfill": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "chokidar": "1.7.0", - "commander": "2.8.1", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.6", - "v8flags": "2.1.1" - } - }, - "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", - "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-generator": "6.25.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "convert-source-map": "1.5.0", - "debug": "2.2.0", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.6" - } - }, - "babel-eslint": { + "@babel/helper-replace-supers": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", - "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz", + "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==", "dev": true, "requires": { - "babel-code-frame": "6.22.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4" + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.2.3", + "@babel/types": "^7.0.0" } }, - "babel-generator": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", - "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "@babel/helper-split-export-declaration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", + "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/types": "^7.0.0" } }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" } }, - "babel-helper-builder-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz", - "integrity": "sha1-CteRfjPI11HmRtrKTnfMGTd9LLw=", + "@babel/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "esutils": "2.0.2" + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.5", + "@babel/types": "^7.3.0" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, - "babel-helper-define-map": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", - "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", + "@babel/parser": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.1.tgz", + "integrity": "sha512-ATz6yX/L8LEnC3dtLQnIx4ydcPxhLcoy9Vl6re00zb2w5lG6itY6Vhnr1KFRPq/FHNsgl/gh2mjNN20f9iJTTA==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "@babel/plugin-proposal-class-properties": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz", + "integrity": "sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-create-class-features-plugin": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.1.tgz", + "integrity": "sha512-Nmmv1+3LqxJu/V5jU9vJmxR/KIRWFk2qLHmbB56yRRRFhlaSuOVXscX3gUmhaKgUhzA3otOHVubbIEVYsZ0eZg==", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz", + "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.2.0" + }, + "dependencies": { + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", - "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "@babel/plugin-syntax-jsx": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", + "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-add-module-exports": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", - "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=", - "dev": true + "@babel/plugin-transform-async-to-generator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz", + "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true + "@babel/plugin-transform-block-scoping": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz", + "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.10" + } }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", - "dev": true + "@babel/plugin-transform-classes": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", + "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" + } }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", - "dev": true - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", - "dev": true - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", - "dev": true - }, - "babel-plugin-syntax-do-expressions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", - "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", - "dev": true - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-function-bind": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", - "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "@babel/plugin-transform-destructuring": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz", + "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "@babel/plugin-transform-dotall-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", + "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", "dev": true, "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + }, + "dependencies": { + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } } }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", + "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-do-expressions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", - "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "@babel/plugin-transform-for-of": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz", + "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==", "dev": true, "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "@babel/plugin-transform-function-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", + "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", - "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", + "@babel/plugin-transform-modules-amd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", + "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz", + "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==", "dev": true, "requires": { - "babel-helper-define-map": "6.24.1", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" } }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz", + "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", + "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "regexp-tree": "^0.1.0" } }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "@babel/plugin-transform-new-target": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", + "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "@babel/plugin-transform-object-super": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", + "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" } }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "@babel/plugin-transform-parameters": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz", + "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "@babel/plugin-transform-react-display-name": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", + "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", - "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", + "@babel/plugin-transform-react-jsx": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", + "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-builder-react-jsx": "^7.3.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "@babel/plugin-transform-react-jsx-self": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", + "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "@babel/plugin-transform-react-jsx-source": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", + "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0" } }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "@babel/plugin-transform-regenerator": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", + "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.23.0" + "regenerator-transform": "^0.13.3" } }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "@babel/plugin-transform-template-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", + "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", "dev": true, "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", + "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" + }, + "dependencies": { + "regexpu-core": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz", + "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + } } }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "@babel/polyfill": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.2.5.tgz", + "integrity": "sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug==", "dev": true, "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "regexpu-core": "2.0.0" + "core-js": "^2.5.7", + "regenerator-runtime": "^0.12.0" } }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "@babel/preset-env": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", + "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.2.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.2.0", + "@babel/plugin-transform-classes": "^7.2.0", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.2.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + } + }, + "@babel/preset-react": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", + "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.23.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0" } }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "dev": true, + "@babel/runtime": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", + "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.23.0" + "regenerator-runtime": "^0.12.0" } }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.23.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" } }, - "babel-plugin-transform-function-bind": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", - "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", "dev": true, "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.23.0" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.2.3", + "@babel/types": "^7.2.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, - "babel-plugin-transform-inline-environment-variables": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.1.1.tgz", - "integrity": "sha1-JXzNj/aUHFU4T6YGB8lxBbsSVmQ=", - "dev": true - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz", - "integrity": "sha1-h11ryb52HFiirj/u5dxIldjH+SE=", + "@babel/types": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.0.tgz", + "integrity": "sha512-QkFPw68QqWU1/RVPyBe8SO7lXbPfjtqAxRYQKpFpaB8yMq7X2qAqfwK5LKoQufEkSmO5NQ70O6Kc3Afk03RwXw==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.23.0" + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" } }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "dev": true }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.24.1", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" } }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" - } + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "dev": true }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.23.0" - } + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "dev": true }, - "babel-plugin-transform-regenerator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", - "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", - "dev": true, - "requires": { - "regenerator-transform": "0.9.11" - } + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "dev": true }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "@webassemblyjs/wast-printer": "1.7.11" } }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - } + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" } }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.24.1", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.24.1" + "@xtuc/ieee754": "^1.2.0" } }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "@xtuc/long": "4.2.1" } }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" } }, - "babel-preset-stage-0": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", - "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", "dev": true, "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", "dev": true, "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" } }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.23.0" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" } }, - "babel-register": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", - "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", "dev": true, "requires": { - "babel-core": "6.25.0", - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.15" - }, - "dependencies": { - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - } + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" } }, - "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", + "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "ajv": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", + "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "babel-template": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "lodash": "4.17.4" + "color-convert": "^1.9.0" } }, - "babel-traverse": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "debug": "2.2.0", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "babel-types": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "babel-core": "6.25.0", - "object-assign": "4.1.1" + "sprintf-js": "~1.0.2" } }, - "babylon": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", - "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, - "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true }, - "basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "bcrypt": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-1.0.2.tgz", - "integrity": "sha1-0F/F0iMXPg4o7DgcDwDMJf+vJzY=", + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { - "bindings": "1.2.1", - "nan": "2.5.0", - "node-pre-gyp": "0.6.32" + "safer-buffer": "~2.1.0" } }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, "requires": { - "tweetnacl": "0.14.5" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" - }, - "bin-build": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", - "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", - "optional": true, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "download": "4.4.3", - "exec-series": "1.0.3", - "rimraf": "2.5.4", - "tempfile": "1.1.1", - "url-regex": "3.2.0" + "util": "0.10.3" }, "dependencies": { - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "optional": true, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" + "inherits": "2.0.1" } - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "optional": true } } }, - "bin-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", - "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", - "optional": true, - "requires": { - "executable": "1.1.0" - } - }, - "bin-version": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", - "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", - "optional": true, - "requires": { - "find-versions": "1.2.1" - } + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, - "bin-version-check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", - "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", - "optional": true, - "requires": { - "bin-version": "1.0.4", - "minimist": "1.2.0", - "semver": "4.3.6", - "semver-truncate": "1.1.2" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "optional": true - } - } + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, - "bin-wrapper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", - "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", - "optional": true, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz", + "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==", + "dev": true, "requires": { - "bin-check": "2.0.0", - "bin-version-check": "2.1.0", - "download": "4.4.3", - "each-async": "1.1.1", - "lazy-req": "1.1.0", - "os-filter-obj": "1.0.3" + "browserslist": "^4.4.1", + "caniuse-lite": "^1.0.30000929", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.13", + "postcss-value-parser": "^3.3.1" } }, - "binary-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", - "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "babel-loader": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", + "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "dev": true, "requires": { - "readable-stream": "2.3.3" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" } }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "babel-plugin-transform-inline-environment-variables": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.3.tgz", + "integrity": "sha1-o7CYgzU76LXiM24/8e+KXZP5xIk=", + "dev": true + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "inherits": "2.0.3" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } } }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "bn.js": { - "version": "4.11.7", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz", - "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==", - "dev": true - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "requires": { - "bytes": "2.4.0", - "content-type": "1.0.2", - "debug": "2.6.7", - "depd": "1.1.1", - "http-errors": "1.6.1", - "iconv-lite": "0.4.15", - "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.15" + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { - "ms": "2.0.0" + "is-descriptor": "^1.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "tweetnacl": "^0.14.3" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, - "browser-pack": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "defined": "1.0.0", - "through2": "2.0.3", - "umd": "3.0.1" + "inherits": "~2.0.0" } }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "browserify": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", - "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "assert": "1.4.1", - "browser-pack": "6.0.2", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.1.4", - "buffer": "5.0.6", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "1.0.0", - "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.1.2", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.3", - "resolve": "1.3.3", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "subarg": "1.0.0", - "syntax-error": "1.3.0", - "through2": "2.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "is-extendable": "^0.1.0" } } } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, "browserify-aes": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", - "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", - "inherits": "2.0.3" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.0.6", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.0" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -1823,8 +1655,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.7", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1833,96 +1665,51 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.7", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~1.0.5" } }, "browserslist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.2.2.tgz", - "integrity": "sha512-MejxGMNIeIqzgaMKVYfFTWHinrwZOnWMXteN9VlHinTd13/0aDmXY9uyRqNsCTnVxqRmrjQFcXI7cy0q9K1IYg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", + "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000704", - "electron-to-chromium": "1.3.16" + "caniuse-lite": "^1.0.30000929", + "electron-to-chromium": "^1.3.103", + "node-releases": "^1.1.3" } }, "buffer": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", - "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "buffer-to-vinyl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", - "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", - "requires": { - "file-type": "3.9.0", - "readable-stream": "2.3.3", - "uuid": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "buffer-writer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", - "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "buffer-xor": { "version": "1.0.3", @@ -1930,19 +1717,11 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "bufferstreams": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.1.tgz", - "integrity": "sha1-AWE3MGCsWYjv+ZBYcxEU9uGV1R4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", @@ -1950,202 +1729,172 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" - }, - "cached-path-relative": { + "cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", - "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "callsites": "0.2.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "no-case": "2.3.1", - "upper-case": "1.1.3" + "caller-callsite": "^2.0.0" } }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, "can-use-dom": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", - "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=", - "dev": true + "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } }, "caniuse-lite": { - "version": "1.0.30000704", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000704.tgz", - "integrity": "sha1-rbbqARNFFWY2gtuTq6spHUwClGs=", + "version": "1.0.30000929", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000929.tgz", + "integrity": "sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==", "dev": true }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "caw": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", - "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", - "requires": { - "get-proxy": "1.1.0", - "is-obj": "1.0.1", - "object-assign": "3.0.0", - "tunnel-agent": "0.4.3" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - } - } + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" } }, "cipher-base": { @@ -2154,158 +1903,114 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", - "dev": true - }, - "clap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz", - "integrity": "sha1-WckP4+E3EEdG/xlGmiemNP9oyFc=", - "optional": true, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { - "chalk": "1.1.3" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=", - "dev": true + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "clean-css": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.7.tgz", - "integrity": "sha1-ua6k+FZ5iJzz6ui0A0nsTr390DI=", + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, "requires": { - "source-map": "0.5.6" + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" } }, - "cli-color": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", - "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "ansi-regex": "2.1.1", - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-iterator": "2.0.1", - "memoizee": "0.4.5", - "timers-ext": "0.1.2" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" } }, - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, - "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" - }, - "cloneable-readable": { + "collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - } - }, - "cls-bluebird": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.0.1.tgz", - "integrity": "sha1-wlmkgK4CwOUGE0MHuxPbMERu4uc=", - "requires": { - "is-bluebird": "1.0.2", - "shimmer": "1.1.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "optional": true, - "requires": { - "q": "1.5.0" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-2.0.0.tgz", - "integrity": "sha1-4MmXLR6WmFcASxAeqlXOq1lh1n0=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", + "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", + "dev": true, "requires": { - "color-convert": "1.9.0", - "color-string": "1.5.2" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -2313,187 +2018,68 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "color-string": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", - "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "optional": true - }, - "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.6" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - } - } + "dev": true }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": "1.0.1" - } + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true }, - "compressible": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", - "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", - "requires": { - "mime-db": "1.27.0" - } + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, - "compression": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", - "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", - "requires": { - "accepts": "1.3.3", - "bytes": "2.5.0", - "compressible": "2.0.10", - "debug": "2.6.8", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.1" - }, - "dependencies": { - "bytes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", - "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=" - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "requires": { - "ini": "1.3.4", - "proto-list": "1.2.4" - } - }, - "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "os-tmpdir": "1.0.2", - "osenv": "0.1.4", - "uuid": "2.0.3", - "write-file-atomic": "1.3.4", - "xdg-basedir": "2.0.0" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } - } - }, - "connect": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", - "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { - "debug": "2.6.7", - "finalhandler": "1.0.3", - "parseurl": "1.3.1", - "utils-merge": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "requires": { - "ms": "2.0.0" - } - }, - "finalhandler": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", - "requires": { - "debug": "2.6.7", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2502,19 +2088,14 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", - "optional": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -2522,4190 +2103,1968 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-security-policy-builder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-1.1.0.tgz", - "integrity": "sha1-2R8bB2I2wRmFDH3umSS/VeBXcrM=", + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, "requires": { - "dashify": "0.2.2" + "safe-buffer": "~5.1.1" } }, - "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", + "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==" }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", - "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "cosmiconfig": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "dev": true, "requires": { - "object-assign": "4.1.1", - "vary": "1.1.1" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.7", - "elliptic": "6.4.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "requires": { - "capture-stack-trace": "1.0.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "create-react-class": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.0.tgz", - "integrity": "sha1-q0SEl8JlZuHilBPogyB9V8/nvtQ=", - "dev": true, + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", "requires": { - "fbjs": "0.8.12", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, - "cross-env": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.0.4.tgz", - "integrity": "sha1-r5P1zlQcqd5JJQuYgQQRLjHCJWM=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "is-windows": "1.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.2.14" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.12", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" + "postcss": "^7.0.1", + "timsort": "^0.3.0" } }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "optional": true, + "css-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.0.tgz", + "integrity": "sha512-MoOu+CStsGrSt5K2OeZ89q3Snf+IkxRfAIt9aAKg4piioTrhtP1iEFPu+OVn3Ohz24FO6L+rw9UJxBILiSBw5Q==", + "dev": true, "requires": { - "clap": "1.2.0", - "source-map": "0.5.6" + "icss-utils": "^4.0.0", + "loader-utils": "^1.2.1", + "lodash": "^4.17.11", + "postcss": "^7.0.6", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^2.0.3", + "postcss-modules-scope": "^2.0.0", + "postcss-modules-values": "^2.0.0", + "postcss-value-parser": "^3.3.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "dev": true, "requires": { - "array-find-index": "1.0.2" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "es5-ext": "0.10.24" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "dev": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" } }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true }, - "dashify": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", - "integrity": "sha1-agdBWgHJH69KMuONnfunH2HLIP4=" + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", "dev": true }, - "dateformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", - "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=" + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "cssnano": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", + "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "dev": true, "requires": { - "ms": "0.7.1" + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.6", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "cssnano-preset-default": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", + "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.0", + "postcss-colormin": "^4.0.2", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.1", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.10", + "postcss-merge-rules": "^4.0.2", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.1", + "postcss-minify-params": "^4.0.1", + "postcss-minify-selectors": "^4.0.1", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.1", + "postcss-normalize-positions": "^4.0.1", + "postcss-normalize-repeat-style": "^4.0.1", + "postcss-normalize-string": "^4.0.1", + "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.1", + "postcss-ordered-values": "^4.1.1", + "postcss-reduce-initial": "^4.0.2", + "postcss-reduce-transforms": "^4.0.1", + "postcss-svgo": "^4.0.1", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true }, - "decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", - "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", - "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "decompress-tar": "3.1.0", - "decompress-tarbz2": "3.1.0", - "decompress-targz": "3.1.0", - "decompress-unzip": "3.4.0", - "stream-combiner2": "1.1.1", - "vinyl-assign": "1.2.1", - "vinyl-fs": "2.4.4" - } + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, "requires": { - "mimic-response": "1.0.0" + "postcss": "^7.0.0" } }, - "decompress-tar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", - "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", - "requires": { - "is-tar": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true }, - "decompress-tarbz2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", - "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", - "requires": { - "is-bzip2": "1.0.0", - "object-assign": "2.1.1", - "seek-bzip": "1.0.5", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" } } } }, - "decompress-targz": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", - "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", - "requires": { - "is-gzip": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" } }, - "decompress-unzip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", - "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { - "is-zip": "1.0.0", - "read-all-stream": "3.1.0", - "stat-mode": "0.2.2", - "strip-dirs": "1.1.1", - "through2": "2.0.3", - "vinyl": "1.2.0", - "yauzl": "2.8.0" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } + "assert-plus": "^1.0.0" } }, - "deep-diff": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", - "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=", + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "deep-diff": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", + "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "clone": "1.0.2" + "object-keys": "^1.0.12" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.1.1", - "pify": "3.0.0", - "rimraf": "2.5.4" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.3" - } - }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dom-serializer": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "fs-exists-sync": "0.1.0" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } } }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { - "repeating": "2.0.1" + "dom-serializer": "0", + "domelementtype": "1" } }, - "detective": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", - "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "acorn": "4.0.13", - "defined": "1.0.0" + "is-obj": "^1.0.0" } }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "duplexify": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "dev": true, "requires": { - "readable-stream": "1.1.14", - "streamsearch": "0.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "bn.js": "4.11.7", - "miller-rabin": "4.0.0", - "randombytes": "2.0.5" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "dns-prefetch-control": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", - "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" + "electron-to-chromium": { + "version": "1.3.103", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz", + "integrity": "sha512-tObPqGmY9X8MUM8i3MEimYmbnLLf05/QV5gPlkR8MQ3Uj8G8B2govE1U4cQcBYtv3ymck9Y8cIOu4waoiykMZQ==", + "dev": true }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "dont-sniff-mimetype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", - "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } }, - "dottie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.0.tgz", - "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" - }, - "download": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", - "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", - "requires": { - "caw": "1.2.0", - "concat-stream": "1.6.0", - "each-async": "1.1.1", - "filenamify": "1.2.1", - "got": "5.7.1", - "gulp-decompress": "1.2.0", - "gulp-rename": "1.2.2", - "is-url": "1.2.2", - "object-assign": "4.1.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl": "1.2.0", - "vinyl-fs": "2.4.4", - "ware": "1.3.0" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "requires": { - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", - "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", - "requires": { - "end-of-stream": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", - "requires": { - "once": "1.3.3" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "requires": { - "wrappy": "1.0.2" - } - } - } - }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "requires": { - "onetime": "1.1.0", - "set-immediate-shim": "1.0.1" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", - "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", - "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.1" - } - }, - "editorconfig": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.2.tgz", - "integrity": "sha1-jleSbZ7mmrbLmZ8CfCFxRnrM6zU=", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "bluebird": "3.5.0", - "commander": "2.11.0", - "lru-cache": "3.2.0", - "sigmund": "1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "requires": { - "pseudomap": "1.0.2" - } - } + "prr": "~1.0.1" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.16", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz", - "integrity": "sha1-0OAmc1dUdwkBrjAaIWZMukXZL30=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "bn.js": "4.11.7", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "is-arrayish": "^0.2.1" } }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "dev": true, "requires": { - "iconv-lite": "0.4.15" - } - }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "requires": { - "once": "1.4.0" - } - }, - "env-cmd": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-5.1.0.tgz", - "integrity": "sha1-AjbbOTw/AzAFIE/NCpLuQHI6nJ4=", - "requires": { - "cross-spawn": "5.1.0" + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, - "envify": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-4.1.0.tgz", - "integrity": "sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==", + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "esprima": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "es5-ext": { - "version": "0.10.24", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", - "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "es6-error": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.0.2.tgz", - "integrity": "sha1-7sXHJurO9Rt/a3PCDbbhsTsGnJg=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-symbol": "3.1.1" + "estraverse": "^4.1.0" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50=" }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.4.1.tgz", - "integrity": "sha1-mc1+r8/8ov+Zpcj18qR01jZLS9M=", - "dev": true, - "requires": { - "ajv": "5.2.2", - "babel-code-frame": "6.22.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "2.6.8", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.0", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.3", - "imurmurhash": "0.1.4", - "inquirer": "3.2.1", - "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "4.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.3.0", - "strip-json-comments": "2.0.1", - "table": "4.0.1", - "text-table": "0.2.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", - "dev": true - }, - "ajv": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", - "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "acorn": "5.1.1", - "acorn-jsx": "3.0.1" + "is-descriptor": "^0.1.0" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "is-extendable": "^0.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, - "eslint-import-resolver-node": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", - "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "debug": "2.6.8", - "resolve": "1.3.3" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "homedir-polyfill": "^1.0.1" } }, - "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "debug": "2.6.8", - "pkg-dir": "1.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "ms": "2.0.0" + "is-plain-object": "^2.0.4" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, - "eslint-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", - "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", - "dev": true - }, - "eslint-plugin-import": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz", - "integrity": "sha512-HGYmpU9f/zJaQiKNQOVfHUh2oLWW3STBrCgH0sHTX1xtsxYlH1zjLh8FlQGEIdZSdTbUMaV36WaZ6ImXkenGxQ==", - "dev": true, - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.1", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "locate-path": "2.0.0" + "is-descriptor": "^1.0.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "is-extendable": "^0.1.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "pify": "2.3.0" + "kind-of": "^6.0.0" } }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "kind-of": "^6.0.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, - "eslint-plugin-react": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz", - "integrity": "sha1-J3cKzzn1/UnNCvQIPOWBBOs5DUw=", - "dev": true, - "requires": { - "doctrine": "2.0.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1" - } + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, - "espree": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", - "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=", - "dev": true, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { - "acorn": "5.1.1", - "acorn-jsx": "3.0.1" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" }, "dependencies": { - "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", - "dev": true + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" } } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", - "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "through": "2.3.8" + "is-extendable": "^0.1.0" } } } }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "evp_bytestokey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "find-cache-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", + "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "create-hash": "1.1.3" - } - }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "optional": true, - "requires": { - "execa": "0.7.0", - "p-finally": "1.0.0", - "pify": "3.0.0", - "rimraf": "2.5.4", - "tempfile": "2.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "optional": true - } - } - }, - "exec-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", - "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", - "optional": true, - "requires": { - "async-each-series": "1.1.0", - "object-assign": "4.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "executable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", - "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", - "optional": true, - "requires": { - "meow": "3.7.0" - } - }, - "exenv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.0.tgz", - "integrity": "sha1-ODXxJ6vwdb/ggtCu1EhAV8eOPIk=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "0.1.1" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { - "fill-range": "2.2.3" + "locate-path": "^3.0.0" } }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "os-homedir": "1.0.2" - } - }, - "expect-ct": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.0.tgz", - "integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ=" - }, - "express": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz", - "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=", - "requires": { - "accepts": "1.3.3", - "array-flatten": "1.1.1", - "content-disposition": "0.5.2", - "content-type": "1.0.2", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.8", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.0", - "finalhandler": "1.0.4", - "fresh": "0.5.0", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.5", - "qs": "6.5.0", - "range-parser": "1.2.0", - "send": "0.15.4", - "serve-static": "1.12.4", - "setprototypeof": "1.0.3", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.0", - "vary": "1.1.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { - "ms": "2.0.0" + "is-extglob": "^2.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", - "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" } } }, - "express-validation": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/express-validation/-/express-validation-1.0.2.tgz", - "integrity": "sha1-fVid07JXxVs+AEZltsacsSzCsUI=", - "requires": { - "lodash": "4.17.4" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "external-editor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", - "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "iconv-lite": "0.4.18", - "jschardet": "1.5.1", - "tmp": "0.0.31" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", - "dev": true - } - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - } + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, - "extsprintf": { + "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" + "for-in": "^1.0.1" } }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "fbjs": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", - "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.14" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { - "pend": "1.2.0" + "map-cache": "^0.2.2" } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "filename-reserved-regex": { + "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=" - }, - "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", - "requires": { - "filename-reserved-regex": "1.0.0", - "strip-outer": "1.0.0", - "trim-repeated": "1.0.0" - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", - "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", - "requires": { - "debug": "2.6.8", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", - "optional": true, - "requires": { - "array-uniq": "1.0.3", - "get-stdin": "4.0.1", - "meow": "3.7.0", - "semver-regex": "1.0.0" - } - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "dev": true, + "optional": true, "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "ansi-regex": { + "version": "2.1.1", + "bundled": true, "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.2.0", - "parse-filepath": "1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.1", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - }, - "dependencies": { - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, "dev": true, + "optional": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.5.4" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, "dev": true, + "optional": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "fork-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", - "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "forwarded": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", - "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" - }, - "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" - }, - "fresh": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "front-matter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.0.tgz", - "integrity": "sha1-C9/0LLrSs1wHrHCFgReJdZ+YWMA=", - "dev": true, - "requires": { - "js-yaml": "3.7.0" - } - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" - } - }, - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.5.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true }, - "aproba": { + "chownr": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "bundled": true, "dev": true, "optional": true }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "code-point-at": { + "version": "1.1.0", + "bundled": true, "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } + "optional": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "concat-map": { + "version": "0.0.1", + "bundled": true, "dev": true, "optional": true }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "console-control-strings": { + "version": "1.1.0", + "bundled": true, "dev": true, "optional": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "core-util-is": { + "version": "1.0.2", + "bundled": true, "dev": true, "optional": true }, - "aws-sign2": { + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "bundled": true, "dev": true, "optional": true }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "delegates": { + "version": "1.0.0", + "bundled": true, "dev": true, "optional": true }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "fs-minipass": { + "version": "1.2.5", + "bundled": true, "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "minipass": "^2.2.1" } }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "fs.realpath": { + "version": "1.0.0", + "bundled": true, "dev": true, - "requires": { - "inherits": "2.0.3" - } + "optional": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "gauge": { + "version": "2.7.4", + "bundled": true, "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "glob": { + "version": "7.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "has-unicode": { + "version": "2.0.1", + "bundled": true, "dev": true, "optional": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "iconv-lite": { + "version": "0.4.24", + "bundled": true, "dev": true, "optional": true, "requires": { - "boom": "2.10.1" + "safer-buffer": ">= 2.1.2 < 3" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "ignore-walk": { + "version": "3.0.1", + "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } + "minimatch": "^3.0.4" } }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "inflight": { + "version": "1.0.6", + "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "inherits": { + "version": "2.0.3", + "bundled": true, "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "ini": { + "version": "1.3.5", + "bundled": true, "dev": true, "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "number-is-nan": "^1.0.0" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "isarray": { + "version": "1.0.0", + "bundled": true, "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "minimatch": { + "version": "3.0.4", + "bundled": true, "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "brace-expansion": "^1.1.7" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "minimist": { + "version": "0.0.8", + "bundled": true, "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } + "optional": true }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "minipass": { + "version": "2.3.5", + "bundled": true, "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "minizlib": { + "version": "1.2.1", + "bundled": true, "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "minipass": "^2.2.1" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "mkdirp": { + "version": "0.5.1", + "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "minimist": "0.0.8" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "ms": { + "version": "2.0.0", + "bundled": true, "dev": true, "optional": true }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "needle": { + "version": "2.2.4", + "bundled": true, "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "nopt": { + "version": "4.0.1", + "bundled": true, "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "npm-bundled": { + "version": "1.0.5", + "bundled": true, "dev": true, "optional": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "npm-packlist": { + "version": "1.2.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "number-is-nan": "1.0.1" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "npmlog": { + "version": "4.1.2", + "bundled": true, "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "number-is-nan": { + "version": "1.0.1", + "bundled": true, "dev": true, "optional": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "object-assign": { + "version": "4.1.1", + "bundled": true, "dev": true, "optional": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "once": { + "version": "1.4.0", + "bundled": true, "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "wrappy": "1" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "os-homedir": { + "version": "1.0.2", + "bundled": true, "dev": true, "optional": true }, "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.5.4" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "1.1.2", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "generic-pool": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.1.7.tgz", - "integrity": "sha1-2sIrLHp6BOQXMvfY0tJaMDyI9mI=" - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-proxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", - "requires": { - "rc": "1.1.7" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "gif-stream": { - "version": "git+https://github.com/adzialocha/gif-stream.git#f1abe18042b5d8a24d74a7e7bc07a47c50a9d413", - "dev": true - }, - "gifsicle": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", - "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "0.5.2" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.2.14" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "requires": { - "sparkles": "1.0.0" - } - }, - "gonzales-pe": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz", - "integrity": "sha1-F8e+Z61sr/Ynej44esc26YPSgOw=", - "dev": true, - "requires": { - "minimist": "1.1.3" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", - "dev": true - } - } - }, - "google-maps-infobox": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-1.1.15.tgz", - "integrity": "sha1-IqKKl89yos2Ek+73VccfwaKZUXA=", - "dev": true - }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", - "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" - }, - "dependencies": { - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "readable-stream": "2.3.3" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.0.3", - "liftoff": "2.3.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, "dev": true, + "optional": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } } }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "readable-stream": { + "version": "2.3.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "rimraf": { + "version": "2.6.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "natives": "1.1.0" + "glob": "^7.1.3" } }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "safer-buffer": { + "version": "2.1.2", + "bundled": true, "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } + "optional": true }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "version": "1.1.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "safe-buffer": "~5.1.0" } }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "strip-ansi": { + "version": "3.0.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "ansi-regex": "^2.0.0" } }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "tar": { + "version": "4.4.8", + "bundled": true, "dev": true, + "optional": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" } }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "string-width": "^1.0.2 || 2" } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true } } }, - "gulp-autoprefixer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-4.0.0.tgz", - "integrity": "sha1-4AqMVxuF0GUWrCY0G+kN/Z/B6rA=", + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "autoprefixer": "7.1.2", - "gulp-util": "3.0.8", - "postcss": "6.0.8", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, - "gulp-clean-css": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-3.7.0.tgz", - "integrity": "sha1-VLM1JtyJmTCUn7N7TKz4UcXV2Ts=", - "dev": true, - "requires": { - "clean-css": "4.1.7", - "gulp-util": "3.0.8", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "gulp-compile-handlebars": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/gulp-compile-handlebars/-/gulp-compile-handlebars-0.6.1.tgz", - "integrity": "sha1-nMHZy5URBd+uUwko0qkEoU10xdM=", + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "handlebars": "4.0.10", - "through2": "0.6.5" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "number-is-nan": "^1.0.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "ansi-regex": "^2.0.0" } } } }, - "gulp-decompress": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", - "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", - "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "gulp-util": "3.0.8", - "readable-stream": "2.3.3" - } - }, - "gulp-eslint": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-4.0.0.tgz", - "integrity": "sha512-+qsePo04v1O3JshpNvww9+bOgZEJ6Cc2/w3mEktfKz0NL0zsh1SWzjyIL2FIM2zzy6IYQYv+j8REZORF8dKX4g==", + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "eslint": "4.4.1", - "gulp-util": "3.0.8" + "globule": "^1.0.0" } }, - "gulp-help": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/gulp-help/-/gulp-help-1.6.1.tgz", - "integrity": "sha1-Jh2xhuGDl/7z9qLCLpwxW/qIrgw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "object-assign": "3.0.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, - "gulp-htmlmin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-3.0.0.tgz", - "integrity": "sha1-GeqAAtEjHWsfGKEtIPKmand3D7M=", - "dev": true, - "requires": { - "bufferstreams": "1.1.1", - "gulp-util": "3.0.8", - "html-minifier": "3.5.3", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "tryit": "1.0.3" - } + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true }, - "gulp-if": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz", - "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "gulp-match": "1.0.3", - "ternary-stream": "2.0.1", - "through2": "2.0.3" + "pump": "^3.0.0" } }, - "gulp-imagemin": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/gulp-imagemin/-/gulp-imagemin-3.3.0.tgz", - "integrity": "sha1-xVdkwmBZPoWVYJ5mpAEmkR7yImQ=", - "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8", - "imagemin": "5.3.1", - "imagemin-gifsicle": "5.2.0", - "imagemin-jpegtran": "5.0.2", - "imagemin-optipng": "5.2.1", - "imagemin-svgo": "5.2.2", - "plur": "2.1.2", - "pretty-bytes": "4.0.2", - "through2-concurrent": "1.1.1" - } - }, - "gulp-match": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz", - "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=", - "dev": true, - "requires": { - "minimatch": "3.0.4" - } + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, - "gulp-notify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-3.0.0.tgz", - "integrity": "sha1-oEuK+azb5OY8hFZ4zgw9MGlMWaM=", + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "lodash.template": "4.4.0", - "node-notifier": "5.1.2", - "node.extend": "1.1.6", - "through2": "2.0.3" - }, - "dependencies": { - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0" - } - } + "assert-plus": "^1.0.0" } }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=" + "gif-stream": { + "version": "git+https://github.com/adzialocha/gif-stream.git#f1abe18042b5d8a24d74a7e7bc07a47c50a9d413", + "from": "git+https://github.com/adzialocha/gif-stream.git#0.2.0" }, - "gulp-rev": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/gulp-rev/-/gulp-rev-8.0.0.tgz", - "integrity": "sha1-AvFi/vmsKOPgPI8w2w54s0gzq9I=", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "gulp-util": "3.0.8", - "modify-filename": "1.1.0", - "rev-hash": "2.0.0", - "rev-path": "1.0.0", - "sort-keys": "2.0.0", - "through2": "2.0.3", - "vinyl-file": "3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "gulp-sass": { + "glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz", - "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "lodash.clonedeep": "4.5.0", - "node-sass": "4.5.3", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" - } - }, - "gulp-sass-lint": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/gulp-sass-lint/-/gulp-sass-lint-1.3.2.tgz", - "integrity": "sha1-ZCCUxf6bkZaHLzOg0fdcz1HLg2E=", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "sass-lint": "1.10.2", - "through2": "2.0.3" - } - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" + "is-extglob": "^2.1.0" } } } }, - "gulp-tap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gulp-tap/-/gulp-tap-1.0.1.tgz", - "integrity": "sha1-5nESThJZtM6iGe0cqXt/WFwzRpA=", - "dev": true, - "requires": { - "through2": "2.0.3" - } - }, - "gulp-uglify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.0.tgz", - "integrity": "sha1-DfAzHXKg0wLj434QlIXd3zPG0co=", + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash": "4.17.4", - "make-error-cause": "1.2.2", - "through2": "2.0.3", - "uglify-js": "3.0.26", - "vinyl-sourcemaps-apply": "0.2.1" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "uglify-js": { - "version": "3.0.26", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.26.tgz", - "integrity": "sha512-+D/BjzuvT1oRMSkH0fuF3M/BCvDxDywmZasd1UTPPHsdsHZqJEAZSvrojgFlS7lrM3ZZWq5h7Bb5i96X1TbOJw==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.5.6" - } - } + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.0.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } + "global-modules-path": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.1.tgz", + "integrity": "sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==", + "dev": true }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, "requires": { - "glogg": "1.0.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "globals": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", + "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "dev": true + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, + "google-maps-infobox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", + "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.0" + "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "requires": { - "sparkles": "1.0.0" - } - }, - "has-symbol-support-x": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.0.tgz", - "integrity": "sha512-F1NtLDtW9NyUrS3faUcI1yVFHCTXyzPb1jfrZBQi5NHxFPlXxZnFLFGzfA2DsdmgCxv2MZ0+bfcgC4EZTmk4SQ==" - }, - "has-to-string-tag-x": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.0.tgz", - "integrity": "sha512-R3OdOP9j6AH5hS1yXeu9wAS+iKSZQx/CC6aMdN6WiaqPlBoA2S+47MtoMsZgKr2m0eAJ+73WWGX0RaFFE5XWKA==", - "requires": { - "has-symbol-support-x": "1.4.0" - } + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "inherits": "2.0.3" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "helmet": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.8.1.tgz", - "integrity": "sha512-HzcpQ74kE1gNFvTd8fI/Nz2N0b0Aa/38dSiSVt/ijkwjc50tUp5siXTE9lTBibQ4JlRzp/35Qf+j2bZgHYwg1g==", - "requires": { - "connect": "3.6.2", - "dns-prefetch-control": "0.1.0", - "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.0", - "frameguard": "3.0.0", - "helmet-csp": "2.5.1", - "hide-powered-by": "1.0.0", - "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", - "nocache": "2.0.0", - "referrer-policy": "1.1.0", - "x-xss-protection": "1.0.0" - } - }, - "helmet-csp": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.5.1.tgz", - "integrity": "sha512-PLLch8wVcVF2+ViTtSGHIvXqQVjcwGRtBwrNPggC+j28J7eSoPHxbJBr9SvLgh9V3HZa0C1zZFZ6gYVLIrPD0Q==", + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { - "camelize": "1.0.0", - "content-security-policy-builder": "1.1.0", - "dasherize": "2.0.0", - "lodash.reduce": "4.6.0", - "platform": "1.3.4" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "hide-powered-by": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", - "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true }, "history": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/history/-/history-4.6.3.tgz", - "integrity": "sha1-bXI6hxLFgda+836MJvSu3G64aWc=", - "dev": true, + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", "requires": { - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "resolve-pathname": "2.1.0", - "value-equal": "0.2.1", - "warning": "3.0.0" + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" } }, "hmac-drbg": { @@ -6714,30 +4073,17 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz", + "integrity": "sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==", "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "react-is": "^16.3.2" } }, "homedir-polyfill": { @@ -6746,103 +4092,44 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true }, - "hsts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", - "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true }, "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "optional": true - }, - "html-minifier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.3.tgz", - "integrity": "sha512-iKRzQQDuTCsq0Ultbi/mfJJnR0D3AdZKTq966Gsp92xkmAPCV4Xi08qhJ0Dl3ZAWemSgJ7qZK+UsZc0gFqK6wg==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.7", - "commander": "2.11.0", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.0.26" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "uglify-js": { - "version": "3.0.26", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.26.tgz", - "integrity": "sha512-+D/BjzuvT1oRMSkH0fuF3M/BCvDxDywmZasd1UTPPHsdsHZqJEAZSvrojgFlS7lrM3ZZWq5h7Bb5i96X1TbOJw==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.5.6" - } - } - } - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, - "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "requires": { - "depd": "1.1.0", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" - } - } - }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, - "http-status": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.0.1.tgz", - "integrity": "sha1-3EMAGov8UKyH1IWokvdXiWS8lKI=" - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -6850,366 +4137,192 @@ "dev": true }, "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" - }, - "ienoopen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" - }, - "ignore": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", - "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "imagemin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", - "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "file-type": "4.4.0", - "globby": "6.1.0", - "make-dir": "1.0.0", - "p-pipe": "1.1.0", - "pify": "2.3.0", - "replace-ext": "1.0.0" - }, - "dependencies": { - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - } + "safer-buffer": ">= 2.1.2 < 3" } }, - "imagemin-gifsicle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz", - "integrity": "sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ==", - "optional": true, - "requires": { - "exec-buffer": "3.2.0", - "gifsicle": "3.0.4", - "is-gif": "1.0.0" - } + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true }, - "imagemin-jpegtran": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz", - "integrity": "sha1-5ogiY7j3kW/duABkDPddLpcNKtY=", - "optional": true, + "icss-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.0.0.tgz", + "integrity": "sha512-bA/xGiwWM17qjllIs9X/y0EjsB7e0AV08F3OL8UPsoNkNRibIuu8f1eKTnQ8QO1DteKKTxTUAn+IEWUToIwGOA==", + "dev": true, "requires": { - "exec-buffer": "3.2.0", - "is-jpg": "1.0.0", - "jpegtran-bin": "3.2.0" + "postcss": "^7.0.5" } }, - "imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=", - "optional": true, - "requires": { - "exec-buffer": "3.2.0", - "is-png": "1.1.0", - "optipng-bin": "3.1.4" - } + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true }, - "imagemin-svgo": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-5.2.2.tgz", - "integrity": "sha1-UBaZ9XiXMKV5IrhzbqFcU/e1WDg=", - "optional": true, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "immutability-helper": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.9.0.tgz", + "integrity": "sha512-2LYtDuGugMLyoFV0qGvblnq39E2VVQ9m4dDktlRLVBBVV1LnUMK0rlqkbtlUjfT1UJO876OobtPlNZTEbOOYVQ==", "requires": { - "is-svg": "2.1.0", - "svgo": "0.7.2" + "invariant": "^2.2.0" } }, - "immutability-helper": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.3.0.tgz", - "integrity": "sha1-6Jd0HB2ilUGoYeoWvb+QkmXi61U=", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "invariant": "2.2.2" + "import-from": "^2.1.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { + "import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, "requires": { - "repeating": "2.0.1" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "infinity-agent": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", - "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=", - "dev": true - }, - "inflection": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", - "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "resolve-from": "^3.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "source-map": "0.5.6" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "inquirer": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz", - "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==", - "dev": true, - "requires": { - "ansi-escapes": "2.0.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.1.0", - "external-editor": "2.0.4", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, - "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "1.1.5", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - } - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" } }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "optional": true + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, - "ipaddr.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true }, - "irregular-plurals": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.3.0.tgz", - "integrity": "sha512-njf5A+Mxb3kojuHd1DzISjjIl+XhyzovXEOyPPSzdQozq/Lf2tN27mOrAAsxEPZxpn6I4MGzs1oo9TxXxPFpaA==" + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } }, - "is": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", - "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { - "is-relative": "0.1.3" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-binary-path": { "version": "1.0.1", @@ -7217,234 +4330,185 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.9.0" + "binary-extensions": "^1.0.0" } }, - "is-bluebird": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", - "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" - }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, - "is-bzip2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", - "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=" + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { - "is-primitive": "2.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-gif": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", - "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", - "optional": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=" - }, - "is-jpg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", - "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", - "optional": true - }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "is-extglob": "^2.1.1" } }, - "is-natural-number": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", - "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=" - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "isobject": "^3.0.1" } }, - "is-png": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", - "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", - "optional": true - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=" + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "tryit": "1.0.3" + "has": "^1.0.1" } }, - "is-retry-allowed": { + "is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true }, "is-stream": { "version": "1.1.0", @@ -7452,580 +4516,270 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "optional": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, - "is-tar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", - "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "has-symbols": "^1.0.0" } }, - "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=" + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=" - }, - "is-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", - "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, "requires": { - "node-fetch": "1.7.1", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.0", - "is-object": "1.0.1" - } - }, - "items": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", - "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "joi": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", - "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", - "requires": { - "hoek": "4.2.0", - "isemail": "2.2.1", - "items": "2.1.1", - "topo": "2.0.2" - }, - "dependencies": { - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - } - } - }, - "jpegtran-bin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", - "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, - "js-beautify": { - "version": "1.6.14", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.14.tgz", - "integrity": "sha1-07j3Mi0CuSd9WL0jgmTDJ+WARM0=", - "dev": true, - "requires": { - "config-chain": "1.1.11", - "editorconfig": "0.13.2", - "mkdirp": "0.5.1", - "nopt": "3.0.6" - } + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", + "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jschardet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", - "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", "dev": true }, "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsonwebtoken": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.2.tgz", - "integrity": "sha1-VxuQPAfodcD8WSA9GseGZ9gOCc0=", - "requires": { - "joi": "6.10.1", - "jws": "3.1.4", - "lodash.once": "4.1.1", - "ms": "2.0.0", - "xtend": "4.0.1" - }, - "dependencies": { - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "requires": { - "hoek": "2.16.3", - "isemail": "1.2.0", - "moment": "2.18.1", - "topo": "1.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "requires": { - "hoek": "2.16.3" - } - } + "minimist": "^1.2.0" } }, "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", - "extsprintf": "1.0.2", + "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, - "jwa": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", - "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", - "requires": { - "base64url": "2.0.0", - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.1" - } - }, - "jws": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", - "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", - "requires": { - "base64url": "2.0.0", - "jwa": "1.1.5", - "safe-buffer": "5.1.1" + "verror": "1.10.0" } }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=", - "dev": true + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" }, "keymirror": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz", - "integrity": "sha1-kYiJ6hP40KQufFVyUO7nE63JXDU=", - "dev": true + "integrity": "sha1-kYiJ6hP40KQufFVyUO7nE63JXDU=" }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "latest-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", - "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", - "dev": true, - "requires": { - "package-json": "1.2.0" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dev": true, - "optional": true - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "optional": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "requires": { - "readable-stream": "2.3.3" + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" } }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "astw": "2.2.0" + "invert-kv": "^2.0.0" } }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "3.0.1", - "findup-sync": "0.4.3", - "fined": "1.1.0", - "flagged-respawn": "0.3.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.mapvalues": "4.6.0", - "rechoir": "0.6.2", - "resolve": "1.3.3" - } + "lightercollective": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lightercollective/-/lightercollective-0.1.0.tgz", + "integrity": "sha512-J9tg5uraYoQKaWbmrzDDexbG6hHnMcWS1qLYgJSWE+mpA3U5OCSeMUhb+K55otgZJ34oFdR0ECvdIb3xuO5JOQ==", + "dev": true }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "load-script": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", - "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" }, - "lodash-es": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=", + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" - }, - "lodash._basevalues": { + "locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" + "lodash-es": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.11.tgz", + "integrity": "sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==" }, "lodash.assign": { "version": "4.2.0", @@ -8033,257 +4787,95 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", - "dev": true - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "dev": true, - "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" - }, - "dependencies": { - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" - } - } - } - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, "lodash.isempty": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.mergewith": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", - "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "dev": true }, - "lodash.once": { + "lodash.tail": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", - "optional": true, - "requires": { - "figures": "1.7.0", - "squeak": "1.3.0" - } + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", - "optional": true, - "requires": { - "get-stdin": "4.0.1", - "indent-string": "2.1.0", - "longest": "1.0.1", - "meow": "3.7.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "es5-ext": "0.10.24" + "yallist": "^3.0.2" } }, "make-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^3.0.0" } }, - "make-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", - "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "make-error": "1.3.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -8295,207 +4887,164 @@ "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "marked": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz", - "integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw==" + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marker-clusterer-plus": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", + "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=" + }, + "markerwithlabel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", + "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } }, - "marker-clusterer-plus": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", - "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=", + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" } }, - "memoizee": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.5.tgz", - "integrity": "sha1-G8PqHkvgVt1HXVIZede+PV5bIcg=", + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-weak-map": "2.0.2", - "event-emitter": "0.3.5", - "is-promise": "2.1.0", - "lru-queue": "0.1.0", - "next-tick": "1.0.0", - "timers-ext": "0.1.2" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "requires": { - "readable-stream": "2.3.3" - } - }, - "method-override": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.9.tgz", - "integrity": "sha1-vRUfLONM8Bp2ykAKuVwBKxAtj3E=", - "requires": { - "debug": "2.6.8", - "methods": "1.1.2", - "parseurl": "1.3.1", - "vary": "1.1.1" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.7", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" - }, "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true }, "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.37.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" + "mini-css-extract-plugin": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", + "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -8508,439 +5057,368 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, - "minipass": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, "requires": { - "yallist": "3.0.2" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "minizlib": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.0.3.tgz", - "integrity": "sha1-1cGr93vhVGGZUuJTM27Mq5sqMvU=", + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, "requires": { - "minipass": "2.2.1" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" - } - }, - "modify-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", - "dev": true - }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.5.0", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.3.3", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" }, "dependencies": { - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - } - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-timezone": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", - "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", + "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", "requires": { - "moment": "2.18.1" + "moment": ">= 2.9.0" } }, - "morgan": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", - "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=", + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "requires": { - "basic-auth": "1.1.0", - "debug": "2.6.8", - "depd": "1.1.1", - "on-finished": "2.3.0", - "on-headers": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "multer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", - "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", - "requires": { - "append-field": "0.1.0", - "busboy": "0.2.14", - "concat-stream": "1.6.0", - "mkdirp": "0.5.1", - "object-assign": "3.0.0", - "on-finished": "2.3.0", - "type-is": "1.6.15", - "xtend": "4.0.1" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" - } - } - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nan": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.5.0.tgz", - "integrity": "sha1-qo8eNFMdgH6eJ3VbI0tKbsDBUqg=" - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nested-error-stacks": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", - "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "inherits": "2.0.3" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, - "no-case": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", - "integrity": "sha1-euuhxzpSGEJlVUt9wDuvcg34AIE=", - "dev": true, - "requires": { - "lower-case": "1.1.4" - } - }, - "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node-fetch": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", - "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", - "dev": true, + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.4", - "request": "2.81.0", - "rimraf": "2.5.4", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.2.14" - } - }, - "node-notifier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.1.2.tgz", - "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, "requires": { - "growly": "1.3.0", - "semver": "5.3.0", - "shellwords": "0.1.0", - "which": "1.2.14" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } } }, - "node-pre-gyp": { - "version": "0.6.32", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz", - "integrity": "sha1-/EUrN25zGbPSVfXzSFPvb9j+H9U=", + "node-releases": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", + "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "dev": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "rc": "1.1.7", - "request": "2.81.0", - "rimraf": "2.5.4", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.3.0" + "semver": "^5.3.0" } }, "node-sass": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", - "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.0", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.5.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.81.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0" + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.2.14" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "globule": "1.2.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true } } }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" - }, - "node.extend": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", - "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", - "dev": true, - "requires": { - "is": "3.2.1" - } - }, - "nodemailer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.0.1.tgz", - "integrity": "sha1-uVhksH+s7oKH6CMu/9bx1W7HWrI=" - }, - "nodemon": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz", - "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=", - "dev": true, - "requires": { - "chokidar": "1.7.0", - "debug": "2.2.0", - "es6-promise": "3.3.1", - "ignore-by-default": "1.0.1", - "lodash.defaults": "3.1.2", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "touch": "1.0.0", - "undefsafe": "0.0.3", - "update-notifier": "0.5.0" - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, "requires": { - "abbrev": "1.1.0" + "abbrev": "1" } }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { - "remove-trailing-separator": "1.0.2" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -8949,45 +5427,45 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "normalize.css": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-7.0.0.tgz", - "integrity": "sha1-q/sd2CRwZ04DIrU86xqvQSk45L8=", - "dev": true - }, - "npm-conf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.2.tgz", - "integrity": "sha512-dotwbpwVzfNB/2EF3A2wjK5tEMLggKfuA/8TG6WvBB1Zrv+JsvF7E8ei9B/HGq211st/GwXFbREcNJvJ1eySUQ==", - "requires": { - "config-chain": "1.1.11", - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -8999,186 +5477,122 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.0.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "for-in": "1.0.2" + "is-descriptor": "^0.1.0" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true }, - "object.pick": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", - "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "2.1.0" + "isobject": "^3.0.0" } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, "requires": { - "ee-first": "1.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { - "wrappy": "1.0.2" + "isobject": "^3.0.1" } }, - "onetime": { + "object.values": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "optipng-bin": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", - "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", - "optional": true, - "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "wrappy": "1" } }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "optimize-css-assets-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.0" - }, - "dependencies": { - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "1.3.3" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - } - } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" + "cssnano": "^4.1.0", + "last-call-webpack-plugin": "^3.0.0" } }, "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-filter-obj": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", - "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", - "optional": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -9186,238 +5600,113 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "lcid": "1.0.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, - "p-limit": { + "p-is-promise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "p-limit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", - "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", - "dev": true - }, - "p-pipe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.1.0.tgz", - "integrity": "sha1-Lp3HzFfOZ9LOLbNIygPyhzGFQHU=" - }, - "p-timeout": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.0.tgz", - "integrity": "sha1-mCD5lDTFgXhotPNICe5SkWYNW2w=", - "requires": { - "p-finally": "1.0.0" + "p-try": "^2.0.0" } }, - "package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", - "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "got": "3.3.1", - "registry-url": "3.1.0" - }, - "dependencies": { - "got": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", - "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", - "dev": true, - "requires": { - "duplexify": "3.5.0", - "infinity-agent": "2.0.3", - "is-redirect": "1.0.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "nested-error-stacks": "1.0.2", - "object-assign": "3.0.0", - "prepend-http": "1.0.4", - "read-all-stream": "3.1.0", - "timed-out": "2.0.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", - "dev": true - } + "p-limit": "^2.0.0" } }, - "packet-reader": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", - "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", + "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", "dev": true }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "2.3.1" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "path-platform": "0.11.15" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.6", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", - "pbkdf2": "3.0.12" - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", + "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", "dev": true, "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" - }, - "dependencies": { - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - } + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse-passwd": { @@ -9426,43 +5715,11 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" - }, - "passport": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.3.2.tgz", - "integrity": "sha1-ndAJ+RXo/glbASSgG4+C2gdRAQI=", - "requires": { - "passport-strategy": "1.0.0", - "pause": "0.0.1" - } - }, - "passport-jwt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-2.2.1.tgz", - "integrity": "sha1-DgBMlAcTGdZz2dm8/RV0qGgBFSc=", - "requires": { - "jsonwebtoken": "7.4.2", - "passport-strategy": "1.0.0" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" - }, - "path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", - "dev": true, - "requires": { - "process": "0.11.10", - "util": "0.10.3" - } + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-browserify": { "version": "0.0.0", @@ -9473,1696 +5730,1524 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "0.1.2" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "paypal-rest-sdk": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/paypal-rest-sdk/-/paypal-rest-sdk-1.7.1.tgz", - "integrity": "sha1-HXOIXMd1w4+5sWXQYKbGITj0AL0=", - "requires": { - "buffer-crc32": "0.2.13", - "semver": "5.3.0", - "uuid": "2.0.3" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - } - } - }, - "pbkdf2": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", - "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", - "dev": true, + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "pg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.1.0.tgz", - "integrity": "sha1-naPwnTmDUhUhwdg2m22aEwbP6f4=", - "requires": { - "buffer-writer": "1.0.1", - "packet-reader": "0.3.1", - "pg-connection-string": "0.1.3", - "pg-pool": "2.0.1", - "pg-types": "1.12.0", - "pgpass": "1.0.2", - "semver": "4.3.2" + "isarray": "0.0.1" }, "dependencies": { - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" } } }, - "pg-connection-string": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", - "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" - }, - "pg-hstore": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.2.tgz", - "integrity": "sha1-9+8FPnubiSrphq8vfL6GQy388k8=", - "requires": { - "underscore": "1.8.3" - } - }, - "pg-pool": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.1.tgz", - "integrity": "sha1-ixJUHfJxtX9wIMUKP1VmRx+Cx34=" - }, - "pg-types": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.0.tgz", - "integrity": "sha1-itO3uJfj/UY+Yt4kGtX8ZAtKZvA=", + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, "requires": { - "ap": "0.2.0", - "postgres-array": "1.0.2", - "postgres-bytea": "1.0.0", - "postgres-date": "1.0.3", - "postgres-interval": "1.1.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "pgpass": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", - "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, "requires": { - "split": "1.0.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "1.1.2" - } - }, - "platform": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.4.tgz", - "integrity": "sha1-bw+xftqqSPIUQrOpdcBjEw8cPr0=" - }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "requires": { - "irregular-plurals": "1.3.0" + "find-up": "^3.0.0" } }, - "pluralize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", - "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "postcss": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz", - "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.13.tgz", + "integrity": "sha512-h8SY6kQTd1wISHWjz+E6cswdhMuyBZRb16pSTv3W4zYZ3/YbyWeJdNUeOXB5IdZqE1U76OUEjjjqsC3z2f3hVg==", "dev": true, "requires": { - "chalk": "2.0.1", - "source-map": "0.5.6", - "supports-color": "4.2.1" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" }, "dependencies": { - "ansi-styles": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.1.0.tgz", - "integrity": "sha1-CcIC1ckX7CMYjKpcnLkXnNlUd1A=", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "chalk": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz", - "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==", - "dev": true, - "requires": { - "ansi-styles": "3.1.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", - "dev": true - }, - "postgres-array": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", - "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" - }, - "postgres-date": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", - "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" - }, - "postgres-interval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", - "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, "requires": { - "xtend": "4.0.1" + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, - "pretty-bytes": { + "postcss-colormin": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", + "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", "dev": true, "requires": { - "asap": "2.0.6" + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "prop-types": { - "version": "15.5.10", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "requires": { - "fbjs": "0.8.12", - "loose-envify": "1.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" - }, - "proxy-addr": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "postcss-discard-comments": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", + "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "dev": true, "requires": { - "forwarded": "0.1.0", - "ipaddr.js": "1.4.0" + "postcss": "^7.0.0" } }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "requires": { - "event-stream": "3.3.4" + "postcss": "^7.0.0" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "requires": { - "bn.js": "4.11.7", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "postcss": "^7.0.0" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "postcss": "^7.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "random-animal-name-generator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/random-animal-name-generator/-/random-animal-name-generator-0.1.0.tgz", - "integrity": "sha512-7uPg026gW0XNxw1qBED4eGtAOcnvv9T4fD59X9BlhlauHdt42CDss760jAOOvjvcAlPqT6j3d4gNHiMjJ3XSeg==" - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { + "cosmiconfig": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" } } } }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "postcss-merge-longhand": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", + "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "dev": true, "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" } }, - "rc": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz", - "integrity": "sha1-xepWS7B6/5/TpbMukGwdOmWUD+o=", + "postcss-merge-rules": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", + "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } } } }, - "react": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/react/-/react-15.6.1.tgz", - "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=", + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "dev": true, "requires": { - "create-react-class": "15.6.0", - "fbjs": "0.8.12", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.5.10" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "react-display-name": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.0.tgz", - "integrity": "sha1-Dh9whuRaMtB3ZN817TL/FvEll5A=", - "dev": true - }, - "react-dom": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz", - "integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA=", + "postcss-minify-gradients": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", + "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", "dev": true, "requires": { - "fbjs": "0.8.12", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.5.10" + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "react-dom-factories": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-dom-factories/-/react-dom-factories-1.0.0.tgz", - "integrity": "sha1-9DwF5QUbME8zJRYY1byFmynka20=", - "dev": true - }, - "react-google-maps": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-7.2.0.tgz", - "integrity": "sha512-R2/2EptrGtubCf1HyVowdBgb7JVZBWtRqMgYfVUudoGjgU7sM93fCXPCSU45CDXWCqo4JcCbYkuOBefx3jugGA==", + "postcss-minify-params": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", + "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "can-use-dom": "0.1.0", - "create-react-class": "15.6.0", - "google-maps-infobox": "1.1.15", - "invariant": "2.2.2", - "lodash": "4.17.4", - "marker-clusterer-plus": "2.1.4", - "prop-types": "15.5.10", - "react-display-name": "0.2.0", - "react-prop-types-element-of-type": "2.2.0", - "scriptjs": "2.5.8", - "warning": "3.0.0" + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" } }, - "react-modal": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-2.2.2.tgz", - "integrity": "sha512-tdgyEyfbyfzDUj40XtWldAQe7e+yhJDUtVSlsQ9AQCGifzWck6v1XTtIVGViVftOsEA3cBWCZCjF3rq6FPJzMg==", + "postcss-minify-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", + "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", "dev": true, "requires": { - "exenv": "1.2.0", - "prop-types": "15.5.10", - "react-dom-factories": "1.0.0" + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "prop-types": { - "version": "15.5.10", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "fbjs": "0.8.12", - "loose-envify": "1.3.1" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, - "react-prop-types-element-of-type": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/react-prop-types-element-of-type/-/react-prop-types-element-of-type-2.2.0.tgz", - "integrity": "sha1-vMMy05A8IlnPaMKKgcSmY/q6Waw=", - "dev": true - }, - "react-redux": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.5.tgz", - "integrity": "sha1-+OjHsjlCJXblLWt9sGQ5RpvphGo=", + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, "requires": { - "create-react-class": "15.6.0", - "hoist-non-react-statics": "1.2.0", - "invariant": "2.2.2", - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "loose-envify": "1.3.1", - "prop-types": "15.5.10" + "postcss": "^7.0.5" } }, - "react-router": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.1.2.tgz", - "integrity": "sha512-VyM87OP+GkijVkkOXJw39A9fKtFelLoZYYDxtELhpZefjYatxI2SUxZcImo/9Tv52rR9UnNJBPSBpVRQMdvi8A==", + "postcss-modules-local-by-default": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.4.tgz", + "integrity": "sha512-WvuSaTKXUqYJbnT7R3YrsNrHv/C5vRfr5VglS4bFOk0MYT4CLBfc/xgExA+x2RftlYgiBDvWmVs191Xv8S8gZQ==", "dev": true, "requires": { - "history": "4.6.3", - "hoist-non-react-statics": "1.2.0", - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.5.10", - "warning": "3.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } + "css-selector-tokenizer": "^0.7.0", + "postcss": "^7.0.6", + "postcss-value-parser": "^3.3.1" } }, - "react-router-dom": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.1.2.tgz", - "integrity": "sha512-CU6pFlpfvIj/xi36rZAbUiN0x39241q+d5bAfJJLtlEqlM62F3zgyv5aERH9zesmKqyDBBp2kd85rkq9Mo/iNQ==", + "postcss-modules-scope": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.0.1.tgz", + "integrity": "sha512-7+6k9c3/AuZ5c596LJx9n923A/j3nF3ormewYBF1RrIQvjvjXe1xE8V8A1KFyFwXbvnshT6FBZFX0k/F1igneg==", "dev": true, "requires": { - "history": "4.6.3", - "loose-envify": "1.3.1", - "prop-types": "15.5.10", - "react-router": "4.1.2" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^7.0.6" } }, - "react-router-redux": { - "version": "5.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-5.0.0-alpha.6.tgz", - "integrity": "sha1-dBhmPC7NPFG+hW/PKPPR3uzBpXY=", + "postcss-modules-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz", + "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==", "dev": true, "requires": { - "history": "4.6.3", - "prop-types": "15.5.10", - "react-router": "4.1.2" + "icss-replace-symbols": "^1.1.0", + "postcss": "^7.0.6" } }, - "react-scroll": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.5.4.tgz", - "integrity": "sha512-dK6560l7Js0JoVV6hdoTQmMnpE2Nkv5gJZgZlBuu2tGTnhgqR62OQ8GE2zNG0NyKB5YREK1hpeVqHDixad+pYw==", + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "requires": { - "object-assign": "4.1.1", - "prop-types": "15.5.10" + "postcss": "^7.0.0" } }, - "react-slider": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-0.8.0.tgz", - "integrity": "sha1-IdsEjt8ovfQh2wUolbrmHR66nn4=", - "dev": true - }, - "react-youtube": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/react-youtube/-/react-youtube-7.4.0.tgz", - "integrity": "sha1-00bDDsd+7GGHHowHhM7yyyxptj0=", + "postcss-normalize-display-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", + "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", "dev": true, "requires": { - "lodash.isequal": "4.5.0", - "prop-types": "15.5.10", - "youtube-player": "4.2.3" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "postcss-normalize-positions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", + "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", "dev": true, "requires": { - "readable-stream": "2.3.3" + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "postcss-normalize-repeat-style": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", + "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "postcss-normalize-string": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", + "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "postcss-normalize-timing-functions": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", + "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - }, - "dependencies": { - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - } + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "postcss-normalize-whitespace": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", + "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", "dev": true, "requires": { - "resolve": "1.3.3" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "redefine": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/redefine/-/redefine-0.2.1.tgz", - "integrity": "sha1-6J7npvJNGf/2JZBWkzLcYDgKiaM=", - "dev": true - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "postcss-ordered-values": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", + "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "postcss-reduce-initial": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", + "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", "dev": true, "requires": { - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "loose-envify": "1.3.1", - "symbol-observable": "1.0.4" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" } }, - "redux-auth-wrapper": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/redux-auth-wrapper/-/redux-auth-wrapper-2.0.1.tgz", - "integrity": "sha1-wJ6itebg464KIjmzkeMQ0yjKY5Q=", + "postcss-reduce-transforms": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", + "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", "dev": true, "requires": { - "hoist-non-react-statics": "1.2.0", - "invariant": "2.2.2", - "lodash.isempty": "4.4.0", - "prop-types": "15.5.8", - "query-string": "4.3.4" - }, - "dependencies": { - "prop-types": { - "version": "15.5.8", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz", - "integrity": "sha1-a3suFBCDvjjIWVqlH8VXdccZk5Q=", - "dev": true, - "requires": { - "fbjs": "0.8.12" - } - } + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, - "redux-form": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-7.0.3.tgz", - "integrity": "sha512-9yjU9XIlihXUrUZidKuYiDkZUAqqFluzWIqXKzNvvnbtUwEYVssv5+dxjlTzgSJWTs6RBG2QiQdP5/VR6USFuA==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dev": true, "requires": { - "deep-equal": "1.0.1", - "es6-error": "4.0.2", - "hoist-non-react-statics": "2.2.1", - "invariant": "2.2.2", - "is-promise": "2.1.0", - "lodash": "4.17.4", - "lodash-es": "4.17.4", - "prop-types": "15.5.10" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" }, "dependencies": { - "hoist-non-react-statics": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.2.1.tgz", - "integrity": "sha1-p+QcdgEh0Kv8eiM5szHSmiY4nlI=", + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true } } }, - "redux-logger": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", - "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "postcss-svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", + "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", "dev": true, "requires": { - "deep-diff": "0.3.8" + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" } }, - "redux-thunk": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz", - "integrity": "sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU=", + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, - "referrer-policy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", - "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true }, - "regenerate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "regenerator-transform": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", - "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", - "dev": true, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "private": "0.1.7" + "asap": "~2.0.3" } }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "regenerate": "1.3.2", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "rc": "1.1.7" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "jsesc": "0.5.0" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } } } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "remove-trailing-separator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=" - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "safe-buffer": "^5.1.0" } }, - "resolve": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, + "react": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", + "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.12.0" } }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "react-dom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", + "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.12.0" + } }, - "resolve-pathname": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.1.0.tgz", - "integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ=", - "dev": true + "react-google-maps": { + "version": "9.4.5", + "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", + "integrity": "sha512-8z5nX9DxIcBCXuEiurmRT1VXVwnzx0C6+3Es6lxB2/OyY2SLax2/LcDu6Aldxnl3HegefTL7NJzGeaKAJ61pOA==", + "requires": { + "babel-runtime": "^6.11.6", + "can-use-dom": "^0.1.0", + "google-maps-infobox": "^2.0.0", + "invariant": "^2.2.1", + "lodash": "^4.16.2", + "marker-clusterer-plus": "^2.1.4", + "markerwithlabel": "^2.0.1", + "prop-types": "^15.5.8", + "recompose": "^0.26.0", + "scriptjs": "^2.5.8", + "warning": "^3.0.0" + } + }, + "react-is": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", + "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, + "react-modal": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.8.1.tgz", + "integrity": "sha512-aLKeZM9pgXpIKVwopRHMuvqKWiBajkqisDA8UzocdCF6S4fyKVfLWmZR5G1Q0ODBxxxxf2XIwiCP8G/11GJAuw==", + "requires": { + "exenv": "^1.2.0", + "prop-types": "^15.5.10", + "react-lifecycles-compat": "^3.0.0", + "warning": "^3.0.0" + } + }, + "react-redux": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.0.tgz", + "integrity": "sha512-EmbC3uLl60pw2VqSSkj6HpZ6jTk12RMrwXMBdYtM6niq0MdEaRq9KYCwpJflkOZj349BLGQm1MI/JO1W96kLWQ==", + "requires": { + "@babel/runtime": "^7.2.0", + "hoist-non-react-statics": "^3.2.1", + "invariant": "^2.2.4", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.3" + } + }, + "react-router": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", + "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "history": "^4.7.2", + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.1", + "warning": "^4.0.1" }, "dependencies": { - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "warning": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", + "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", "requires": { - "mimic-fn": "1.1.0" + "loose-envify": "^1.0.0" } } } }, - "retry-as-promised": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", - "integrity": "sha1-sEY9f9PPWy/tZFAKtui4pJxbjmw=", + "react-router-dom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", "requires": { - "bluebird": "3.5.0", - "cross-env": "3.2.4", - "debug": "2.2.0" + "history": "^4.7.2", + "invariant": "^2.2.4", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.1", + "react-router": "^4.3.1", + "warning": "^4.0.1" }, "dependencies": { - "cross-env": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-3.2.4.tgz", - "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=", + "warning": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", + "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", "requires": { - "cross-spawn": "5.1.0", - "is-windows": "1.0.1" + "loose-envify": "^1.0.0" } } } }, - "rev-hash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-2.0.0.tgz", - "integrity": "sha1-dyCiNu0MJY3z5kvsA+wEiwW5JMQ=", - "dev": true + "react-router-redux": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz", + "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" }, - "rev-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rev-path/-/rev-path-1.0.0.tgz", - "integrity": "sha1-1My0NqwzcMRgcXXOiOr8XGXF1lM=", + "react-scroll": { + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.7.10.tgz", + "integrity": "sha512-7K1caXF19PQ/jck+QRCdRMytqWei1ktv7jtcsgMap2s55pGOUc/a5phr4loajZRFRx3qKj9Tz12KDtELp91xMg==", + "requires": { + "lodash.throttle": "^4.1.1", + "prop-types": "^15.5.8" + } + }, + "react-slider": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/react-slider/-/react-slider-0.11.2.tgz", + "integrity": "sha512-y49ZwJJ7OcPdihgt71xYI8GRdAzpFuSLQR8b+cKotutxqf8MAEPEtqvWKlg+3ZQRe5PMN6oWbIb7wEYDF8XhNQ==" + }, + "react-youtube": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/react-youtube/-/react-youtube-7.9.0.tgz", + "integrity": "sha512-2+nBF4qP8nStYEILIO1/SylKOCnnJUxuZm+qCeWA0eeZxnWZIIixfAeAqbzblwx5L1n/26ACocy3epm9Glox8w==", + "requires": { + "fast-deep-equal": "^2.0.1", + "prop-types": "^15.5.3", + "youtube-player": "^5.5.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "modify-filename": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, - "optional": true, "requires": { - "align-text": "0.1.4" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "redux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-auth-wrapper": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/redux-auth-wrapper/-/redux-auth-wrapper-2.0.3.tgz", + "integrity": "sha1-SVwRIyt9sRXm0VINJlQcDAOXyu4=", + "requires": { + "hoist-non-react-statics": "2.5.0", + "invariant": "2.2.2", + "lodash.isempty": "4.4.0", + "prop-types": "^15.5.0", + "query-string": "4.3.4" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "^1.0.0" + } + } } }, - "rimraf": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", - "requires": { - "glob": "7.1.2" + "redux-form": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-8.1.0.tgz", + "integrity": "sha512-d2+0OaJpSq3kwkbPtFlG3W/HENWLxX8NqqTHSOnfgIrID/9faH/rxejLa1X3HChilCTm71zWe/g9zaLPCMCofQ==", + "requires": { + "@babel/runtime": "^7.2.0", + "es6-error": "^4.1.1", + "hoist-non-react-statics": "^3.2.1", + "invariant": "^2.2.4", + "is-promise": "^2.1.0", + "lodash": "^4.17.11", + "lodash-es": "^4.17.11", + "prop-types": "^15.6.1", + "react-is": "^16.7.0", + "react-lifecycles-compat": "^3.0.4" } }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, + "redux-logger": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", + "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "deep-diff": "^0.3.5" } }, - "run-async": { + "redux-thunk": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", "dev": true, "requires": { - "is-promise": "2.1.0" + "regenerate": "^1.4.0" } }, - "run-sequence": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.1.0.tgz", - "integrity": "sha1-FJ2gElFvIdz3nbbcmaKpVgNjGyE=", + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + }, + "regenerator-transform": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", + "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", "dev": true, "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8" + "private": "^0.1.6" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "rx-lite": "4.0.8" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "regexp-tree": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.0.tgz", + "integrity": "sha512-rHQv+tzu+0l3KS/ERabas1yK49ahNVxuH40WcPg53CzP5p8TgmmyBgHELLyJcvjhTD0e5ahSY6C76LbEVtr7cg==", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "cli-table3": "^0.5.0", + "colors": "^1.1.2", + "yargs": "^10.0.3" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } - } - } - }, - "sass-lint": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.10.2.tgz", - "integrity": "sha1-glvWsNp53dNqQv+uW21ErEkiUCs=", - "dev": true, - "requires": { - "commander": "2.8.1", - "eslint": "2.13.1", - "front-matter": "2.1.0", - "fs-extra": "1.0.0", - "glob": "7.1.2", - "globule": "1.2.0", - "gonzales-pe": "3.4.7", - "js-yaml": "3.7.0", - "lodash.capitalize": "4.2.1", - "lodash.kebabcase": "4.1.1", - "merge": "1.2.0", - "path-is-absolute": "1.0.1", - "util": "0.10.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "debug": "2.2.0", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.4.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.3", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.7.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "dev": true, - "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" - } - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" + "locate-path": "^2.0.0" } }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.1.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "invert-kv": "^1.0.0" } }, - "is-fullwidth-code-point": { + "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "once": "1.4.0" + "p-try": "^1.0.0" } }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "os-homedir": "1.0.2" + "camelcase": "^4.1.0" } } } }, - "save-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/save-dev/-/save-dev-2.0.0.tgz", - "integrity": "sha1-T4wGcD1io/dlcVliNwBbEdVt9Q4=" + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true }, - "scriptjs": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.8.tgz", - "integrity": "sha1-0MQ5VcLmutM7bk7fe1O4llqnyl8=", + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "js-base64": "2.1.9", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "is-finite": "^1.0.0" } }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, "requires": { - "commander": "2.8.1" + "path-parse": "^1.0.6" } }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "semver": "5.3.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, - "semver-regex": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "optional": true + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "optional": true, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { - "semver": "5.3.0" - } - }, - "send": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", - "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=", - "requires": { - "debug": "2.6.8", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.0", - "fresh": "0.5.0", - "http-errors": "1.6.2", - "mime": "1.3.4", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "glob": "^7.1.3" } }, - "sequelize": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.4.2.tgz", - "integrity": "sha1-lSkuCnUuJYbskqDnI2K3bk/Ljq4=", - "requires": { - "bluebird": "3.5.0", - "cls-bluebird": "2.0.1", - "debug": "2.6.8", - "depd": "1.1.1", - "dottie": "2.0.0", - "env-cmd": "5.1.0", - "generic-pool": "3.1.7", - "inflection": "1.10.0", - "lodash": "4.17.4", - "moment": "2.18.1", - "moment-timezone": "0.5.13", - "retry-as-promised": "2.2.0", - "semver": "5.3.0", - "terraformer-wkt-parser": "1.1.2", - "toposort-class": "1.0.1", - "uuid": "3.1.0", - "validator": "6.3.0", - "wkx": "0.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" } }, - "sequelize-cli": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-2.8.0.tgz", - "integrity": "sha1-QwTM5g5JkWlgP4ON7bq0IcmEnnQ=", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "cli-color": "1.2.0", - "findup-sync": "1.0.0", - "fs-extra": "4.0.1", - "gulp": "3.9.1", - "gulp-help": "1.6.1", - "js-beautify": "1.6.14", - "lodash": "4.17.4", - "moment": "2.18.1", - "resolve": "1.3.3", - "umzug": "1.12.0", - "yargs": "8.0.2" + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, "cliui": { @@ -11171,583 +7256,554 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "findup-sync": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz", - "integrity": "sha1-b35LV7buOkA3tEFOrt6j9Y9x4Ow=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fs-extra": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", - "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, - "is-extglob": { + "invert-kv": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "number-is-nan": "^1.0.0" } }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "invert-kv": "^1.0.0" } }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "lcid": "^1.0.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^3.0.0" } } } }, - "sequelize-slugify": { - "version": "git+https://github.com/gleuch/sequelize-slugify.git#d651c56f981945f84805f891270a3f75102692d5", + "sass-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "dev": true, "requires": { - "bluebird": "3.5.0", - "lodash": "4.17.4", - "slug": "0.9.1" + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0", + "semver": "^5.5.0" } }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "serve-static": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz", - "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=", + "scheduler": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", + "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.1", - "send": "0.15.4" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - }, - "sha.js": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "inherits": "2.0.3" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, - "sharp": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.18.2.tgz", - "integrity": "sha1-G+Deu2GQukBe+l7jMJhb/kI8Pn8=", + "scriptjs": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", + "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, "requires": { - "caw": "2.0.1", - "color": "2.0.0", - "got": "7.1.0", - "nan": "2.6.2", - "semver": "5.3.0", - "tar": "3.1.5" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "requires": { - "get-proxy": "2.1.0", - "isurl": "1.0.0", - "tunnel-agent": "0.6.0", - "url-to-options": "1.0.1" - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "requires": { - "npm-conf": "1.1.2" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.0", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" - }, - "tar": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-3.1.5.tgz", - "integrity": "sha512-TKJKz1fqBOZBaIQ/MGRKU0EnTGmKMLy4ReTRgP10AgtfOWBbj9PBg4MgY80GFpqGbs2EzcIctW5gbwbP4woDYg==", + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, "requires": { - "minipass": "2.2.1", - "minizlib": "1.0.3", - "mkdirp": "0.5.1", - "yallist": "3.0.2" + "amdefine": ">=0.0.4" } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "serialize-javascript": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.8" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "is-extendable": "^0.1.0" } } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "dev": true - }, - "shellwords": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.0.tgz", - "integrity": "sha1-Zq/Ue2oSky2Qccv9mKUueFzQuhQ=", - "dev": true - }, - "shimmer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", - "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sister": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.1.tgz", + "integrity": "sha512-aG41gNRHRRxPq52MpX4vtm9tapnr6ENmHUx8LMAJWCOplEMwXzh/dp5WIo52Wl8Zlc/VUyHLJ2snX0ck+Nma9g==" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { - "is-arrayish": "0.3.1" + "kind-of": "^3.2.0" }, "dependencies": { - "is-arrayish": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz", - "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0=" + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "sister": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.0.tgz", - "integrity": "sha1-iOtXBHyyg9oeBwsafK6CEvO8sts=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "slug": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/slug/-/slug-0.9.1.tgz", - "integrity": "sha1-rwj2CKfBFRa2F3iqgA3OhMUYz9o=", - "requires": { - "unicode": "9.0.1" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - }, "source-map-support": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", - "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "source-map": "0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=" + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { - "through": "2.3.8" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", - "optional": true, + "sshpk": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", + "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "dev": true, "requires": { - "chalk": "1.1.3", - "console-stream": "0.1.1", - "lpad-align": "1.1.2" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } } } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=" - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - }, "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, "stream-browserify": { @@ -11756,503 +7812,252 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "duplexer": "0.1.1" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" - }, - "dependencies": { - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "2.3.3" - } - } + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true, - "requires": { - "strip-ansi": "3.0.1" - } + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-bom-buf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz", - "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=", "dev": true, "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" - } - }, - "strip-dirs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", - "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", - "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "is-absolute": "0.1.7", - "is-natural-number": "2.1.1", - "minimist": "1.2.0", - "sum-up": "1.0.3" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } + "is-utf8": "^0.2.0" } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "sum-up": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", - "requires": { - "chalk": "1.1.3" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "optional": true, - "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - } - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=", - "dev": true - }, - "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { - "acorn": "4.0.13" + "get-stdin": "^4.0.1" } }, - "table": { + "stylehacks": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", - "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", + "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.3.0.tgz", - "integrity": "sha1-MJMYFkGPVa/E0hd1r91nIM7kXa4=", - "requires": { - "debug": "2.2.0", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.3.3", - "readable-stream": "2.1.5", - "rimraf": "2.5.4", - "tar": "2.2.1", - "uid-number": "0.0.6" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "requires": { - "wrappy": "1.0.2" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } - }, - "readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, - "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", - "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "optional": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "optional": true, - "requires": { - "temp-dir": "1.0.0", - "uuid": "3.1.0" - } - }, - "ternary-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz", - "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "duplexify": "3.5.0", - "fork-stream": "0.0.4", - "merge-stream": "1.0.1", - "through2": "2.0.3" - } - }, - "terraformer": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", - "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", - "requires": { - "@types/geojson": "1.0.2" + "has-flag": "^3.0.0" } }, - "terraformer-wkt-parser": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", - "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", - "requires": { - "terraformer": "1.0.8" + "svgo": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", + "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", + "dev": true, + "requires": { + "coa": "~2.0.1", + "colors": "~1.1.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "~0.1.0", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.0", + "js-yaml": "^3.12.0", + "mkdirp": "~0.5.1", + "object.values": "^1.0.4", + "sax": "~1.2.4", + "stable": "~0.1.6", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, - "through2-concurrent": { + "tapable": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2-concurrent/-/through2-concurrent-1.1.1.tgz", - "integrity": "sha1-EctOpMnjG8puTB5tukjRxyjDUks=", - "requires": { - "through2": "2.0.3" - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - } + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "dev": true }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" - }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "terser": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", + "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", "dev": true, "requires": { - "process": "0.11.10" + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "timers-ext": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", - "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", + "terser-webpack-plugin": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz", + "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", "dev": true, "requires": { - "es5-ext": "0.10.24", - "next-tick": "1.0.0" + "cacache": "^11.0.2", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "terser": "^3.8.1", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, "requires": { - "extend-shallow": "2.0.1" + "setimmediate": "^1.0.4" } }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -12260,71 +8065,76 @@ "dev": true }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { - "hoek": "4.2.0" + "kind-of": "^3.0.2" }, "dependencies": { - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } }, - "touch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", - "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "nopt": "1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1.1.0" - } - } + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } } }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "requires": { - "escape-string-regexp": "1.0.5" - } + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true }, "trim-right": { "version": "1.0.1", @@ -12332,10 +8142,19 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "tryit": { + "true-case-path": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, "tty-browserify": { @@ -12348,801 +8167,580 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.15" - } + "dev": true }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "ua-parser-js": { - "version": "0.7.14", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.14.tgz", - "integrity": "sha1-EQ1T+kw/MmwSEpK76skE0uAzh8o=", - "dev": true + "version": "0.7.19", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", + "integrity": "sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" - }, - "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", - "dev": true - }, - "umzug": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/umzug/-/umzug-1.12.0.tgz", - "integrity": "sha1-p5yR8oYu7jEwxsNH8rkK1opm6Lg=", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "lodash": "4.17.4", - "moment": "2.18.1", - "redefine": "0.2.1", - "resolve": "1.3.3" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "unicode": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/unicode/-/unicode-9.0.1.tgz", - "integrity": "sha1-EEcGJyxkZMV0gBvhsIb3JFzyUVg=" - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" - }, - "update-notifier": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", - "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "configstore": "1.4.0", - "is-npm": "1.0.0", - "latest-version": "1.0.1", - "repeating": "1.1.3", - "semver-diff": "2.1.0", - "string-length": "1.0.1" - }, - "dependencies": { - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - } - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "optional": true, - "requires": { - "ip-regex": "1.0.3" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "inherits": "2.0.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - }, - "v8flags": { + "uglifyjs-webpack-plugin": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "validator": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-6.3.0.tgz", - "integrity": "sha1-R84j7Y1Ord+p1LjvAHG2zxB418g=" - }, - "value-equal": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.2.1.tgz", - "integrity": "sha1-wiCjBDYfzmmU277ao8fhobiVhx0=", - "dev": true - }, - "vary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "requires": { - "extsprintf": "1.0.2" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-assign": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", - "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", - "requires": { - "object-assign": "4.1.1", - "readable-stream": "2.3.3" - } - }, - "vinyl-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz", - "integrity": "sha1-ygZ+oIQx1QdyKx3lCD9gJhbrwjQ=", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.1.1.tgz", + "integrity": "sha512-TQEcyMNkObX/H+FfcKjiDgs5RcXX8vW2UUUrDTOfQgg3lrafztfeM5WAwXo+AzqozJK6NP9w98xNpG/dutzSsg==", "dev": true, "requires": { - "bl": "0.9.5", - "through2": "0.6.5" + "cacache": "^11.2.0", + "find-cache-dir": "^2.0.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-js": "^3.0.0", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "1.0.34" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } } } }, - "vinyl-file": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz", - "integrity": "sha1-sQTZ5ECf+jJfqt1SBkLQo7SIs2U=", + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "strip-bom-buf": "1.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "2.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "first-chunk-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "strip-bom-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" + "is-extendable": "^0.1.0" } }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.0.2", - "replace-ext": "1.0.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "requires": { - "duplexify": "3.5.0", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" } }, - "vinyl-source-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "through2": "0.6.5", - "vinyl": "0.4.6" + "imurmurhash": "^0.1.4" + } + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } } } }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "source-map": "0.5.6" + "punycode": "^2.1.0" } }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { - "indexof": "0.0.1" + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } } }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, "requires": { - "wrap-fn": "0.1.5" + "inherits": "2.0.3" } }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, - "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "optional": true + "v8-compile-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "dev": true }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { - "isexe": "2.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { - "string-width": "1.0.2" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, - "optional": true - }, - "winston": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", - "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", - "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "wkx": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.1.tgz", - "integrity": "sha1-L8FxtenLVcYlb+9L3h8hvkE77+4=", "requires": { - "@types/node": "6.0.85" + "indexof": "0.0.1" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "loose-envify": "^1.0.0" } }, - "wrap-fn": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", - "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "webpack": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz", + "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + } + }, + "webpack-cli": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.1.tgz", + "integrity": "sha512-jeJveHwz/vwpJ3B8bxEL5a/rVKIpRNJDsKggfKnxuYeohNDW4Y/wB9N/XHJA093qZyS0r6mYL+/crLsIol4WKA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "findup-sync": "^2.0.0", + "global-modules": "^1.0.0", + "global-modules-path": "^2.3.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "lightercollective": "^0.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.4" + } + }, + "webpack-sources": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, "requires": { - "co": "3.1.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "mkdirp": "0.5.1" + "isexe": "^2.0.0" } }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "string-width": "^1.0.2 || 2" } }, - "x-xss-protection": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.0.0.tgz", - "integrity": "sha1-iYr7k4abJGYc+cUvnujbjtB2Tdk=" - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "os-homedir": "1.0.2" + "errno": "~0.1.7" } }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, - "xml2js": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { - "sax": "1.2.4", - "xmlbuilder": "4.2.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, - "xmlbuilder": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "requires": { - "lodash": "4.17.4" - } + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true }, "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, - "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - } + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yauzl": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz", - "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "youtube-player": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-4.2.3.tgz", - "integrity": "sha1-ACSLewErKuBhd8d9qNiTptAcqSw=", - "dev": true, + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", "requires": { - "babel-runtime": "6.23.0", - "load-script": "1.0.0", - "lodash": "4.17.4", - "sister": "3.0.0" + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" } } } diff --git a/package.json b/package.json index 69db138d..d953c28f 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,7 @@ { "name": "hoffnung3000", "version": "1.0.1", - "description": "Platform for decentralized, self-curated festivals", - "homepage": "https://hoffnung3000.de", + "description": "Platform for anonymous, decentralized and self-curated festivals", "main": "server/index.js", "private": true, "contributors": [ @@ -10,122 +9,66 @@ ], "license": "UNLICENSED", "engines": { - "node": "~8.1.4", - "npm": "~5.3.0" + "node": "~10.12.0", + "npm": "~6.6.0" }, "scripts": { - "build": "cross-env NODE_ENV=production gulp build", - "db:migrate": "./node_modules/.bin/sequelize db:migrate", - "db:migrate:create": "./node_modules/.bin/sequelize migration:create", - "db:migrate:undo": "./node_modules/.bin/sequelize db:migrate:undo", - "db:seed": "./node_modules/.bin/sequelize db:seed:all", - "db:seed:create": "./node_modules/.bin/sequelize seed:create", - "lint": "gulp lint", - "lint:js": "gulp lint:js", - "lint:scss": "gulp lint:scss", - "postinstall": "gulp build", - "serve": "nodemon --watch server --watch common --exec NODE_ENV=development babel-node server/index.js", - "start": "babel-node server/index.js", - "watch": "cross-env NODE_ENV=development gulp watch" + "build": "npm run clear && webpack --mode production --progress", + "clear": "rimraf ./public", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git://github.com/adzialocha/hoffnung3000.git" }, "devDependencies": { - "babel-cli": "6.24.1", - "babel-core": "6.25.0", - "babel-eslint": "^7.2.3", - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-transform-inline-environment-variables": "0.1.1", - "babel-preset-es2015": "6.24.1", - "babel-preset-react": "6.24.1", - "babel-preset-stage-0": "6.24.1", - "babel-register": "6.24.1", - "babelify": "7.3.0", - "browserify": "14.4.0", - "classnames": "2.2.5", - "cross-env": "^5.0.4", - "del": "3.0.0", - "envify": "4.1.0", - "eslint": "^4.4.1", - "eslint-plugin-babel": "^4.1.2", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-react": "7.1.0", - "gif-stream": "git+https://github.com/adzialocha/gif-stream.git#0.2.0", - "gulp": "3.9.1", - "gulp-autoprefixer": "4.0.0", - "gulp-clean-css": "3.7.0", - "gulp-compile-handlebars": "0.6.1", - "gulp-eslint": "4.0.0", - "gulp-htmlmin": "3.0.0", - "gulp-if": "2.0.2", - "gulp-notify": "3.0.0", - "gulp-rename": "1.2.2", - "gulp-rev": "^8.0.0", - "gulp-sass": "3.1.0", - "gulp-sass-lint": "1.3.2", - "gulp-tap": "1.0.1", - "gulp-uglify": "3.0.0", - "history": "4.6.3", - "immutability-helper": "2.3.0", - "isomorphic-fetch": "2.2.1", - "jwt-decode": "2.2.0", - "keymirror": "0.1.1", - "node-sass": "^4.5.3", - "nodemon": "1.11.0", - "normalize.css": "7.0.0", - "path": "0.12.7", - "prop-types": "^15.5.10", - "react": "^15.6.1", - "react-dom": "^15.6.1", - "react-google-maps": "7.2.0", - "react-modal": "2.2.2", - "react-redux": "^5.0.5", - "react-router": "4.1.2", - "react-router-dom": "4.1.2", - "react-router-redux": "5.0.0-alpha.6", - "react-scroll": "1.5.4", - "react-slider": "0.8.0", - "react-youtube": "7.4.0", - "redux": "^3.7.2", - "redux-auth-wrapper": "2.0.1", - "redux-form": "7.0.3", - "redux-logger": "^3.0.6", - "redux-thunk": "2.2.0", - "run-sequence": "^2.1.0", - "sequelize-cli": "^2.8.0", - "vinyl-buffer": "1.0.0", - "vinyl-source-stream": "1.1.0" + "@babel/core": "^7.2.2", + "@babel/plugin-proposal-class-properties": "^7.3.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "@babel/polyfill": "^7.2.5", + "@babel/preset-env": "^7.3.1", + "@babel/preset-react": "^7.0.0", + "autoprefixer": "^9.4.6", + "babel-loader": "^8.0.5", + "babel-plugin-transform-inline-environment-variables": "^0.4.3", + "css-loader": "^2.1.0", + "cssnano": "^4.1.8", + "mini-css-extract-plugin": "^0.5.0", + "node-sass": "^4.11.0", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "postcss-loader": "^3.0.0", + "rimraf": "^2.6.3", + "sass-loader": "^7.1.0", + "uglifyjs-webpack-plugin": "^2.1.1", + "webpack": "^4.29.0", + "webpack-cli": "^3.2.1" }, "dependencies": { - "aws-sdk": "^2.94.0", - "bcrypt": "1.0.2", - "body-parser": "^1.17.2", - "compression": "1.7.0", - "cookie-parser": "1.4.3", - "cors": "2.8.4", - "dotenv": "4.0.0", - "express": "^4.15.4", - "express-validation": "1.0.2", - "gulp-imagemin": "3.3.0", - "helmet": "^3.8.1", - "http-status": "1.0.1", - "joi": "10.6.0", - "jsonwebtoken": "^7.4.2", - "marked": "^0.3.9", - "method-override": "^2.3.9", - "mime": "^1.3.6", - "moment-timezone": "^0.5.13", - "morgan": "^1.8.2", - "multer": "^1.3.0", - "nodemailer": "4.0.1", - "passport": "0.3.2", - "passport-jwt": "2.2.1", - "paypal-rest-sdk": "1.7.1", - "pg": "^7.1.0", - "pg-hstore": "2.3.2", - "random-animal-name-generator": "0.1.0", - "save-dev": "2.0.0", - "sequelize": "^4.4.2", - "sequelize-slugify": "https://github.com/gleuch/sequelize-slugify#master", - "sharp": "^0.18.2", - "winston": "2.3.1" + "classnames": "^2.2.6", + "create-react-class": "^15.6.3", + "gif-stream": "git+https://github.com/adzialocha/gif-stream.git#0.2.0", + "immutability-helper": "^2.9.0", + "isomorphic-fetch": "^2.2.1", + "jwt-decode": "^2.2.0", + "keymirror": "^0.1.1", + "moment-timezone": "^0.5.23", + "normalize.css": "^8.0.1", + "react": "^16.7.0", + "react-dom": "^16.7.0", + "react-google-maps": "^9.4.5", + "react-modal": "^3.8.1", + "react-redux": "^6.0.0", + "react-router": "^4.3.1", + "react-router-dom": "^4.3.1", + "react-router-redux": "^4.0.8", + "react-scroll": "^1.7.10", + "react-slider": "^0.11.2", + "react-youtube": "^7.9.0", + "redux": "^4.0.1", + "redux-auth-wrapper": "^2.0.3", + "redux-form": "^8.1.0", + "redux-logger": "^3.0.6", + "redux-thunk": "^2.3.0" } } diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..cbf21328 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,92 @@ +const path = require('path') + +const MiniCssExtractPlugin = require('mini-css-extract-plugin') +const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin') +const UglifyJsPlugin = require('uglifyjs-webpack-plugin') + +const APP_FILE_NAME = 'app' +const VENDORS_FILE_NAME = 'lib' + +const PATH_SRC = './app' +const PATH_DIST = './public' + +const NODE_MODULES_NAME = 'node_modules' + +function getPath(filePath) { + return path.resolve(__dirname, filePath) +} + +module.exports = (env, options) => { + const isDevelopment = (options.mode === 'development') + const exclude = new RegExp(NODE_MODULES_NAME); + + return { + entry: { + [APP_FILE_NAME]: getPath(`${PATH_SRC}/scripts/index.js`), + }, + output: { + filename: '[name]-[hash].js', + path: getPath(PATH_DIST), + }, + resolve: { + modules: [NODE_MODULES_NAME], + }, + module: { + rules: [ + { + test: /\.js$/, + exclude, + use: { + loader: 'babel-loader', + }, + }, + { + test: /\.scss$/, + exclude: /node_modules/, + use: [ + { + loader: MiniCssExtractPlugin.loader, + }, + { + loader: 'css-loader', + }, + { + loader: 'postcss-loader', + }, + { + loader: 'sass-loader', + options: { + indentedSyntax: false, + sourceMap: isDevelopment, + }, + }, + ], + }, + ], + }, + optimization: { + minimizer: [ + new UglifyJsPlugin({ + cache: true, + parallel: true, + sourceMap: isDevelopment, + }), + new OptimizeCssAssetsPlugin(), + ], + splitChunks: { + cacheGroups: { + commons: { + test: new RegExp(NODE_MODULES_NAME), + chunks: 'all', + name: VENDORS_FILE_NAME, + }, + }, + }, + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: '[name]-[hash].css', + }), + ], + } +} From 1f8cc8722d5a1a9ec3f65d9a120fb18481514949 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 22 Jan 2019 19:37:03 +0100 Subject: [PATCH 02/77] Render index server-side for easier customization of the app --- .babelrc | 3 +- .gitignore | 7 +- app/index.html | 31 - app/manifest.json | 29 - package-lock.json | 1773 +++++++++++++++++- package.json | 28 +- server/helpers/logger.js | 14 + server/index.js | 119 +- server/index.pug | 24 + webpack.config.js => webpack.config.babel.js | 18 +- 10 files changed, 1871 insertions(+), 175 deletions(-) delete mode 100644 app/index.html delete mode 100644 app/manifest.json create mode 100644 server/helpers/logger.js create mode 100644 server/index.pug rename webpack.config.js => webpack.config.babel.js (76%) diff --git a/.babelrc b/.babelrc index fc4a1169..fed45897 100644 --- a/.babelrc +++ b/.babelrc @@ -10,7 +10,6 @@ ], "plugins": [ "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-object-rest-spread", - "transform-inline-environment-variables" + "@babel/plugin-proposal-object-rest-spread" ] } diff --git a/.gitignore b/.gitignore index b15f21c4..9b5cecb2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,5 @@ node_modules # local .env -public - -# development -.tmp -npm-debug.log +static +webpack-assets.json diff --git a/app/index.html b/app/index.html deleted file mode 100644 index aa5e1e49..00000000 --- a/app/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - {{ env 'CONFIG_TITLE' }} - - - - - - - - -
- - - - diff --git a/app/manifest.json b/app/manifest.json deleted file mode 100644 index e627c55b..00000000 --- a/app/manifest.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "lang": "en", - "dir": "ltr", - "name": "HOFFNUNG 3000", - "description": "Platform for decentralized, self-curated festivals", - "short_name": "HOFFNUNG", - "start_url": "/", - "display": "standalone", - "theme_color": "#fff", - "background_color": "#fff", - "icons": [ - { - "src": "/images/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/images/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "related_applications": [ - { - "platform": "web", - "url": "https://hoffnung3000.de" - } - ] -} diff --git a/package-lock.json b/package-lock.json index 398b3902..f419c3a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,24 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/cli": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.3.tgz", + "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==", + "dev": true, + "requires": { + "chokidar": "^2.0.3", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "output-file-sync": "^2.0.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, "@babel/code-frame": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", @@ -319,6 +337,19 @@ "js-tokens": "^4.0.0" } }, + "@babel/node": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.2.2.tgz", + "integrity": "sha512-jPqgTycE26uFsuWpLika9Ohz9dmLQHWjOnMNxBOjYb1HXO+eLKxEr5FfKSXH/tBvFwwaw+pzke3gagnurGOfCA==", + "dev": true, + "requires": { + "@babel/polyfill": "^7.0.0", + "@babel/register": "^7.0.0", + "commander": "^2.8.1", + "lodash": "^4.17.10", + "v8flags": "^3.1.1" + } + }, "@babel/parser": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.1.tgz", @@ -917,6 +948,86 @@ "@babel/plugin-transform-react-jsx-source": "^7.0.0" } }, + "@babel/register": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", + "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", + "dev": true, + "requires": { + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" + }, + "dependencies": { + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, "@babel/runtime": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", @@ -981,6 +1092,19 @@ "to-fast-properties": "^2.0.0" } }, + "@types/babel-types": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", + "integrity": "sha512-WiZhq3SVJHFRgRYLXvpf65XnV6ipVHhnNaNvE8yCimejrGglkg38kEj0JcizqwSHxmPSjcTlig/6JouxLGEhGw==" + }, + "@types/babylon": { + "version": "6.16.4", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.4.tgz", + "integrity": "sha512-8dZMcGPno3g7pJ/d0AyJERo+lXh9i1JhDuCUs+4lNIN9eUe5Yh6UCLrpgSEi05Ve2JMLauL2aozdvKwNL0px1Q==", + "requires": { + "@types/babel-types": "*" + } + }, "@types/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", @@ -1177,6 +1301,15 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, "acorn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", @@ -1189,6 +1322,21 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "^4.0.4" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, "ajv": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", @@ -1213,6 +1361,26 @@ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", "dev": true }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -1225,6 +1393,15 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -1299,6 +1476,11 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1362,12 +1544,33 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assets-webpack-plugin": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.9.7.tgz", + "integrity": "sha512-yxo4MlSb++B88qQFE27Wf56ykGaDHZeKcSbrstSFOOwOxv33gWXtM49+yfYPSErlXPAMT5lVy3YPIhWlIFjYQw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "escape-string-regexp": "^1.0.3", + "lodash.assign": "^4.2.0", + "lodash.merge": "^4.6.1", + "mkdirp": "^0.5.1" + } + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "requires": { + "lodash": "^4.17.10" + } + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -1430,12 +1633,6 @@ "util.promisify": "^1.0.0" } }, - "babel-plugin-transform-inline-environment-variables": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-0.4.3.tgz", - "integrity": "sha1-o7CYgzU76LXiM24/8e+KXZP5xIk=", - "dev": true - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -1452,6 +1649,29 @@ } } }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1519,6 +1739,14 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1561,12 +1789,62 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1729,6 +2007,11 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, "cacache": { "version": "11.3.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", @@ -1816,6 +2099,11 @@ } } }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, "can-use-dom": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", @@ -1839,12 +2127,27 @@ "integrity": "sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==", "dev": true }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1861,6 +2164,14 @@ "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "^1.0.3" + } + }, "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", @@ -1897,6 +2208,12 @@ "tslib": "^1.9.0" } }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -1935,6 +2252,27 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, "cli-table3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", @@ -2010,7 +2348,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2018,25 +2355,48 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "colorspace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz", + "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + }, + "dependencies": { + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + } + } + }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -2064,6 +2424,28 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "compressible": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", + "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "requires": { + "mime-db": ">= 1.36.0 < 2" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2082,6 +2464,20 @@ "typedarray": "^0.0.6" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -2097,12 +2493,38 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, + "constantinople": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", + "requires": { + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" + } + }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-security-policy-builder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", + "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -2112,6 +2534,25 @@ "safe-buffer": "~5.1.1" } }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -2140,8 +2581,16 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } }, "cosmiconfig": { "version": "5.0.7", @@ -2165,6 +2614,15 @@ "elliptic": "^6.0.0" } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -2202,6 +2660,16 @@ "object-assign": "^4.1.1" } }, + "cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + } + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -2234,6 +2702,12 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -2466,6 +2940,11 @@ "assert-plus": "^1.0.0" } }, + "dasherize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", + "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2483,8 +2962,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -2497,6 +2975,12 @@ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -2559,6 +3043,11 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -2569,12 +3058,27 @@ "minimalistic-assert": "^1.0.0" } }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -2586,6 +3090,16 @@ "randombytes": "^2.0.0" } }, + "dns-prefetch-control": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", + "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", @@ -2626,6 +3140,11 @@ "domelementtype": "1" } }, + "dont-sniff-mimetype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", + "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -2635,6 +3154,17 @@ "is-obj": "^1.0.0" } }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", @@ -2657,6 +3187,11 @@ "safer-buffer": "^2.1.0" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, "electron-to-chromium": { "version": "1.3.103", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.103.tgz", @@ -2684,6 +3219,19 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, "encoding": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", @@ -2718,6 +3266,11 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -2766,6 +3319,11 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2806,8 +3364,12 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "events": { "version": "3.0.0", @@ -2889,6 +3451,55 @@ "homedir-polyfill": "^1.0.1" } }, + "expect-ct": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", + "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2998,6 +3609,11 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", + "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" + }, "fastparse": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", @@ -3025,6 +3641,16 @@ } } }, + "feature-policy": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", + "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, "figgy-pudding": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", @@ -3054,6 +3680,20 @@ } } }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, "find-cache-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", @@ -3139,6 +3779,11 @@ "mime-types": "^2.1.12" } }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3148,6 +3793,16 @@ "map-cache": "^0.2.2" } }, + "frameguard": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", + "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -3158,6 +3813,12 @@ "readable-stream": "^2.0.0" } }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -3739,8 +4400,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gauge": { "version": "2.7.4", @@ -3879,6 +4539,15 @@ } } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -3931,6 +4600,33 @@ "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", @@ -3957,7 +4653,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -4049,12 +4744,54 @@ "minimalistic-assert": "^1.0.1" } }, + "helmet": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.0.tgz", + "integrity": "sha512-j9JjtAnWJj09lqe/PEICrhuDaX30TeokXJ9tW6ZPhVH0+LMoihDeJ58CdWeTGzM66p6EiIODmgAaWfdeIWI4Gg==", + "requires": { + "dns-prefetch-control": "0.1.0", + "dont-sniff-mimetype": "1.0.0", + "expect-ct": "0.1.1", + "feature-policy": "0.2.0", + "frameguard": "3.0.0", + "helmet-crossdomain": "0.3.0", + "helmet-csp": "2.7.1", + "hide-powered-by": "1.0.0", + "hpkp": "2.0.0", + "hsts": "2.1.0", + "ienoopen": "1.0.0", + "nocache": "2.0.0", + "referrer-policy": "1.1.0", + "x-xss-protection": "1.1.0" + } + }, + "helmet-crossdomain": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz", + "integrity": "sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==" + }, + "helmet-csp": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz", + "integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==", + "requires": { + "camelize": "1.0.0", + "content-security-policy-builder": "2.0.0", + "dasherize": "2.0.0", + "platform": "1.3.5" + } + }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "hide-powered-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", + "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" + }, "history": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", @@ -4086,6 +4823,12 @@ "react-is": "^16.3.2" } }, + "home-or-tmp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", + "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=", + "dev": true + }, "homedir-polyfill": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", @@ -4101,6 +4844,11 @@ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "hpkp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", + "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" + }, "hsl-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", @@ -4113,12 +4861,28 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, + "hsts": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", + "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + }, "html-comment-regex": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4165,12 +4929,23 @@ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, + "ienoopen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", + "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" + }, "iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, "immutability-helper": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.9.0.tgz", @@ -4207,6 +4982,12 @@ "resolve-from": "^3.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -4263,8 +5044,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", @@ -4292,6 +5072,11 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -4336,8 +5121,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "1.0.0", @@ -4354,6 +5138,15 @@ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -4419,6 +5212,22 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "requires": { + "acorn": "~4.0.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -4455,6 +5264,22 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -4481,6 +5306,21 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4495,11 +5335,16 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } @@ -4510,6 +5355,12 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4554,8 +5405,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -4596,6 +5446,11 @@ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4668,6 +5523,15 @@ "verror": "1.10.0" } }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", @@ -4684,6 +5548,14 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, "last-call-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", @@ -4694,6 +5566,20 @@ "webpack-sources": "^1.1.0" } }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -4810,6 +5696,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, "lodash.mergewith": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", @@ -4833,6 +5725,35 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4851,6 +5772,12 @@ "signal-exit": "^3.0.0" } }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4899,6 +5826,11 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.0.tgz", + "integrity": "sha512-HduzIW2xApSXKXJSpCipSxKyvMbwRRa/TwMbepmlZziKdH8548WSoDP4SxzulEKjlo8BE39l+2fwJZuRKOln6g==" + }, "marker-clusterer-plus": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", @@ -4926,6 +5858,11 @@ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", "dev": true }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, "mem": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", @@ -4965,6 +5902,37 @@ "trim-newlines": "^1.0.0" } }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "requires": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4996,17 +5964,20 @@ "brorand": "^1.0.1" } }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, "mime-db": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" }, "mime-types": { "version": "2.1.21", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, "requires": { "mime-db": "~1.37.0" } @@ -5155,6 +6126,18 @@ "moment": ">= 2.9.0" } }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -5199,6 +6182,11 @@ "to-regex": "^3.0.1" } }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, "neo-async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", @@ -5211,6 +6199,11 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "nocache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", + "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -5287,6 +6280,12 @@ } } }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, "node-releases": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", @@ -5391,6 +6390,41 @@ } } }, + "nodemon": { + "version": "1.18.9", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.9.tgz", + "integrity": "sha512-oj/eEVTEI47pzYAjGkpcNw0xYwTl4XSTUQv2NPQI6PpN3b75PhpuYk3Vb3U80xHCyM2Jm+1j68ULHXl4OR3Afw==", + "dev": true, + "requires": { + "chokidar": "^2.0.4", + "debug": "^3.1.0", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.6", + "semver": "^5.5.0", + "supports-color": "^5.2.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -5568,6 +6602,19 @@ "has": "^1.0.3" } }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5577,6 +6624,11 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, "optimize-css-assets-webpack-plugin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", @@ -5626,6 +6678,17 @@ "os-tmpdir": "^1.0.0" } }, + "output-file-sync": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", + "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "is-plain-obj": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -5668,6 +6731,18 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "pako": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", @@ -5715,6 +6790,11 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -5745,6 +6825,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -5754,8 +6840,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "1.7.0", @@ -5831,6 +6916,15 @@ "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", + "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -5840,6 +6934,11 @@ "find-up": "^3.0.0" } }, + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6316,6 +7415,12 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -6331,8 +7436,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "promise": { "version": "7.3.1", @@ -6357,6 +7461,15 @@ "object-assign": "^4.1.1" } }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -6375,6 +7488,12 @@ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, + "pstree.remy": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.6.tgz", + "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -6389,6 +7508,158 @@ "safe-buffer": "^5.1.2" } }, + "pug": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", + "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", + "requires": { + "pug-code-gen": "^2.0.1", + "pug-filters": "^3.1.0", + "pug-lexer": "^4.0.0", + "pug-linker": "^3.0.5", + "pug-load": "^2.0.11", + "pug-parser": "^5.0.0", + "pug-runtime": "^2.0.4", + "pug-strip-comments": "^1.0.3" + } + }, + "pug-attrs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", + "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", + "requires": { + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.4" + } + }, + "pug-code-gen": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", + "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", + "requires": { + "constantinople": "^3.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.3", + "pug-error": "^1.3.2", + "pug-runtime": "^2.0.4", + "void-elements": "^2.0.1", + "with": "^5.0.0" + } + }, + "pug-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", + "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" + }, + "pug-filters": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", + "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", + "requires": { + "clean-css": "^4.1.11", + "constantinople": "^3.0.1", + "jstransformer": "1.0.0", + "pug-error": "^1.3.2", + "pug-walk": "^1.1.7", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "pug-lexer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", + "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", + "requires": { + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.2" + } + }, + "pug-linker": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", + "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", + "requires": { + "pug-error": "^1.3.2", + "pug-walk": "^1.1.7" + } + }, + "pug-load": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", + "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", + "requires": { + "object-assign": "^4.1.0", + "pug-walk": "^1.1.7" + } + }, + "pug-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", + "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", + "requires": { + "pug-error": "^1.3.2", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", + "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" + }, + "pug-strip-comments": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", + "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", + "requires": { + "pug-error": "^1.3.2" + } + }, + "pug-walk": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", + "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -6437,8 +7708,7 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "4.3.4", @@ -6480,6 +7750,44 @@ "safe-buffer": "^5.1.0" } }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "react": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", @@ -6681,7 +7989,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6797,6 +8104,11 @@ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" }, + "referrer-policy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", + "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -7027,6 +8339,25 @@ "regjsparser": "^0.1.4" } }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", @@ -7057,8 +8388,7 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "repeating": { "version": "2.0.1", @@ -7119,7 +8449,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -7178,6 +8507,14 @@ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -7209,8 +8546,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -7429,12 +8765,52 @@ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7469,6 +8845,11 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -7523,7 +8904,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, "requires": { "is-arrayish": "^0.3.1" }, @@ -7531,8 +8911,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, @@ -7541,6 +8920,12 @@ "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.1.tgz", "integrity": "sha512-aG41gNRHRRxPq52MpX4vtm9tapnr6ENmHUx8LMAJWCOplEMwXzh/dp5WIo52Wl8Zlc/VUyHLJ2snX0ck+Nma9g==" }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -7657,8 +9042,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", @@ -7776,6 +9160,11 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -7797,6 +9186,11 @@ } } }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, "stdout-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", @@ -7864,7 +9258,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -7902,6 +9295,12 @@ "get-stdin": "^4.0.1" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "stylehacks": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", @@ -7979,6 +9378,65 @@ "inherits": "2" } }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, "terser": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", @@ -8033,6 +9491,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -8043,6 +9506,12 @@ "xtend": "~4.0.1" } }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -8112,6 +9581,31 @@ "repeat-string": "^1.6.1" } }, + "token-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -8142,6 +9636,11 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", @@ -8178,6 +9677,15 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -8207,6 +9715,12 @@ } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, "uglifyjs-webpack-plugin": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.1.1.tgz", @@ -8242,6 +9756,15 @@ } } }, + "undefsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -8335,6 +9858,20 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", @@ -8381,12 +9918,36 @@ } } }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -8420,6 +9981,15 @@ } } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -8438,8 +10008,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -8451,6 +10020,11 @@ "object.getownpropertydescriptors": "^2.0.3" } }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -8463,6 +10037,15 @@ "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", "dev": true }, + "v8flags": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", + "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -8478,6 +10061,11 @@ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, "vendors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", @@ -8504,6 +10092,11 @@ "indexof": "0.0.1" } }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", @@ -8623,6 +10216,66 @@ "string-width": "^1.0.2 || 2" } }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "winston": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz", + "integrity": "sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==", + "requires": { + "async": "^2.6.0", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^1.9.1", + "one-time": "0.0.4", + "readable-stream": "^2.3.6", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.2.0" + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, + "with": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "requires": { + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, "worker-farm": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", @@ -8685,6 +10338,28 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "x-xss-protection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", + "integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==" + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index d953c28f..b70b6f02 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,12 @@ "npm": "~6.6.0" }, "scripts": { - "build": "npm run clear && webpack --mode production --progress", - "clear": "rimraf ./public", + "assets:build": "npm run assets:clear && webpack --mode production --progress", + "assets:clear": "rimraf ./static", + "assets:watch": "npm run assets:clear && webpack --mode development --watch --progress", + "postinstall": "npm run assets:build", + "serve": "nodemon --watch server --watch common --exec cross-env NODE_ENV=development babel-node server/index.js", + "start": "cross-env NODE_ENV=production babel-node server/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -22,20 +26,24 @@ "url": "git://github.com/adzialocha/hoffnung3000.git" }, "devDependencies": { + "@babel/cli": "^7.2.3", "@babel/core": "^7.2.2", + "@babel/node": "^7.2.2", "@babel/plugin-proposal-class-properties": "^7.3.0", "@babel/plugin-proposal-object-rest-spread": "^7.3.1", "@babel/plugin-transform-react-jsx": "^7.3.0", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.1", "@babel/preset-react": "^7.0.0", + "assets-webpack-plugin": "^3.9.7", "autoprefixer": "^9.4.6", "babel-loader": "^8.0.5", - "babel-plugin-transform-inline-environment-variables": "^0.4.3", + "cross-env": "^5.2.0", "css-loader": "^2.1.0", "cssnano": "^4.1.8", "mini-css-extract-plugin": "^0.5.0", "node-sass": "^4.11.0", + "nodemon": "^1.18.9", "optimize-css-assets-webpack-plugin": "^5.0.1", "postcss-loader": "^3.0.0", "rimraf": "^2.6.3", @@ -45,15 +53,26 @@ "webpack-cli": "^3.2.1" }, "dependencies": { + "body-parser": "^1.18.3", "classnames": "^2.2.6", + "compression": "^1.7.3", + "cookie-parser": "^1.4.3", + "cors": "^2.8.5", "create-react-class": "^15.6.3", + "dotenv": "^6.2.0", + "express": "^4.16.4", "gif-stream": "git+https://github.com/adzialocha/gif-stream.git#0.2.0", + "helmet": "^3.15.0", "immutability-helper": "^2.9.0", "isomorphic-fetch": "^2.2.1", "jwt-decode": "^2.2.0", "keymirror": "^0.1.1", + "marked": "^0.6.0", + "method-override": "^3.0.0", "moment-timezone": "^0.5.23", + "morgan": "^1.9.1", "normalize.css": "^8.0.1", + "pug": "^2.0.3", "react": "^16.7.0", "react-dom": "^16.7.0", "react-google-maps": "^9.4.5", @@ -69,6 +88,7 @@ "redux-auth-wrapper": "^2.0.3", "redux-form": "^8.1.0", "redux-logger": "^3.0.6", - "redux-thunk": "^2.3.0" + "redux-thunk": "^2.3.0", + "winston": "^3.1.0" } } diff --git a/server/helpers/logger.js b/server/helpers/logger.js new file mode 100644 index 00000000..e2fac5ae --- /dev/null +++ b/server/helpers/logger.js @@ -0,0 +1,14 @@ +import winston from 'winston' + +const { format } = winston; + +export default winston.createLogger({ + format: format.combine( + format.colorize(), + format.splat(), + format.simple() + ), + transports: [ + new winston.transports.Console(), + ], +}) diff --git a/server/index.js b/server/index.js index 05a61a7e..b4c6ed63 100644 --- a/server/index.js +++ b/server/index.js @@ -1,44 +1,57 @@ import bodyParser from 'body-parser' -import compress from 'compression' +import compression from 'compression' import cookieParser from 'cookie-parser' import cors from 'cors' import dotenv from 'dotenv' import express from 'express' import fs from 'fs' import helmet from 'helmet' -import logger from 'morgan' import marked from 'marked' import methodOverride from 'method-override' -import moment from 'moment-timezone' +import morgan from 'morgan' import path from 'path' import winston from 'winston' -import config from '../common/config' +import logger from './helpers/logger' + +const ASSETS_FOLDER_NAME = 'static' +const ASSETS_MANIFESTO_FILE = 'webpack-assets.json' +const ASSETS_MAX_AGE = 31557600000 const DEFAULT_PORT = 3000 -const ASSETS_MAX_AGE = 0 //31557600000 -// load environment variables +function getPath(filePath) { + return path.resolve(__dirname, '..', filePath) +} + +// Load environment variables when in development const envVariables = dotenv.config({ - path: path.join(__dirname, '..', '.env'), + path: getPath('.env'), }) if (envVariables.error && process.env.NODE_ENV === 'development') { - winston.error('".env" file does not exist, please configure the app first') + logger.error('".env" file does not exist, please configure the app first') process.exit(1) } -// check for public assets folder -const publicDirPath = process.env.NODE_ENV === 'development' ? '.tmp' : 'public' -if (!fs.existsSync(path.join(__dirname, '..', publicDirPath))) { - winston.error( - 'Public folder "%s" does not exist, please bundle assets first', - publicDirPath - ) +// Read build manifesto for asset file paths +const assetsPath = getPath(ASSETS_MANIFESTO_FILE) + +if (!fs.existsSync(assetsPath)) { + logger.error(`"${ASSETS_MANIFESTO_FILE}" was not found, please bundle assets first`) + process.exit(1) +} + +const assets = require(assetsPath) +assets.basePath = ASSETS_FOLDER_NAME + +// Check for public assets folder +if (!fs.existsSync(getPath(ASSETS_FOLDER_NAME))) { + logger.error(`Assets folder "${ASSETS_FOLDER_NAME}" does not exist, please bundle assets first`) process.exit(1) } -// markdown settings +// Markdown settings marked.setOptions({ breaks: true, gfm: true, @@ -47,44 +60,48 @@ marked.setOptions({ tables: false, }) -// moment settings -moment.tz.setDefault(config.timezone) - -// check database connection -const db = require('./database') -db.sequelize.authenticate() - .then(() => { - winston.info('Database connection has been established successfully') - }) - .catch((err) => { - winston.error('Unable to connect to the database: %s', err) - process.exit(1) - }) - -// initialize express instance +// Moment settings +// @TODO Check if we really want to keep using moment-js here +// moment.tz.setDefault(config.timezone) + +// Check database connection +// @TODO Revisit database handling +// const db = require('./database') +// db.sequelize.authenticate() +// .then(() => { +// logger.info('Database connection has been established successfully') +// }) +// .catch((err) => { +// logger.error('Unable to connect to the database: %s', err) +// process.exit(1) +// }) + +// Initialize express instance const app = express() app.set('port', process.env.PORT || DEFAULT_PORT) +app.set('x-powered-by', false) +app.set('view engine', 'pug') +app.set('views', __dirname) if (process.env.NODE_ENV === 'development') { - app.use(logger('tiny')) + app.use(morgan('dev')) } -// parse body params and attach them to req.body +// Enable compression and parsing requests +app.use(compression()) app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) - app.use(cookieParser()) -app.use(compress()) app.use(methodOverride()) -// secure apps by setting various HTTP headers +// Secure application by setting various HTTP headers app.use(helmet()) -// enable CORS - Cross Origin Resource Sharing +// Setup CORS - Cross Origin Resource Sharing app.use(cors()) -// enforce https on production -if (process.env.NODE_ENV !== 'development') { +// Enforce https on production +if (process.env.NODE_ENV === 'production') { app.use((req, res, next) => { if (req.headers['x-forwarded-proto'] !== 'https') { return res.redirect(['https://', req.get('Host'), req.url].join('')) @@ -93,12 +110,13 @@ if (process.env.NODE_ENV !== 'development') { }) } -// mount all API routes -app.use('/api', require('./routes')) +// Mount all API routes +// @TODO +// app.use('/api', require('./routes')) -// static file hosting -app.use('/static', express.static( - path.join(__dirname, '..', publicDirPath), { +// Static assets hosting +app.use(`/${ASSETS_FOLDER_NAME}`, express.static( + getPath(ASSETS_FOLDER_NAME), { index: false, redirect: false, maxAge: ASSETS_MAX_AGE, @@ -106,17 +124,22 @@ app.use('/static', express.static( )) app.use((req, res, next) => { + // Check if request url contains any extension if (path.extname(req.url)) { next() return } - res.sendFile(path.join(__dirname, '..', publicDirPath, 'index.html')) + + // .. otherwise serve the webapp + res.render('index', { + assets, + }) }) -// start server +// Start server app.listen(app.get('port'), () => { - winston.info( - 'App is running at http://localhost:%d in %s mode', + logger.info( + 'Server is listening at port %d in %s mode', app.get('port'), app.get('env') ) diff --git a/server/index.pug b/server/index.pug new file mode 100644 index 00000000..c38260e2 --- /dev/null +++ b/server/index.pug @@ -0,0 +1,24 @@ +mixin asset(name, type = 'js') + - var assetPath = `/${assets.basePath}/${assets[name][type]}` + if type == 'js' + script(type='text/javascript' src=assetPath) + else + link(rel='stylesheet' href=assetPath) + +doctype html +html + head + meta(charset='utf-8') + meta(http-equiv='X-UA-Compatible' content='IE=edge') + meta(name='viewport' content='width=device-widthinitial-scale=1maximum-scale=1user-scalable=0') + // meta(property='og:title' content="{{ env 'CONFIG_TITLE' }}") + // meta(property='og:description' content="{{ env 'CONFIG_DESCRIPTION' }}") + // meta(property='og:url' content="{{ env 'CONFIG_URL' }}") + // meta(name='description' content="{{ env 'CONFIG_DESCRIPTION' }}") + // title {{ env 'CONFIG_TITLE'; }} + // link(rel='icon' type='image/png' href='/static/images/favicon.png') + +asset('app', 'css') + body + #app + +asset('app') + +asset('lib') diff --git a/webpack.config.js b/webpack.config.babel.js similarity index 76% rename from webpack.config.js rename to webpack.config.babel.js index cbf21328..ff4ceb26 100644 --- a/webpack.config.js +++ b/webpack.config.babel.js @@ -1,14 +1,15 @@ -const path = require('path') +import path from 'path' -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const UglifyJsPlugin = require('uglifyjs-webpack-plugin') +import AssetsPlugin from 'assets-webpack-plugin' +import MiniCssExtractPlugin from 'mini-css-extract-plugin' +import OptimizeCssAssetsPlugin from 'optimize-css-assets-webpack-plugin' +import UglifyJsPlugin from 'uglifyjs-webpack-plugin' const APP_FILE_NAME = 'app' const VENDORS_FILE_NAME = 'lib' const PATH_SRC = './app' -const PATH_DIST = './public' +const PATH_DIST = './static' const NODE_MODULES_NAME = 'node_modules' @@ -18,6 +19,7 @@ function getPath(filePath) { module.exports = (env, options) => { const isDevelopment = (options.mode === 'development') + const filename = isDevelopment ? '[name]' : '[name]-[contenthash:4]' const exclude = new RegExp(NODE_MODULES_NAME); return { @@ -25,7 +27,7 @@ module.exports = (env, options) => { [APP_FILE_NAME]: getPath(`${PATH_SRC}/scripts/index.js`), }, output: { - filename: '[name]-[hash].js', + filename: `${filename}.js`, path: getPath(PATH_DIST), }, resolve: { @@ -83,9 +85,11 @@ module.exports = (env, options) => { }, }, }, + devtool: isDevelopment ? 'cheap-module-source-map' : undefined, plugins: [ + new AssetsPlugin(), new MiniCssExtractPlugin({ - filename: '[name]-[hash].css', + filename: `${filename}.css`, }), ], } From f9bb966ee83b9e71321a2f807350f7dbbff83113 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 12:46:25 +0100 Subject: [PATCH 03/77] Correct name for browserslist config --- .browserlistrc => .browserslistrc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .browserlistrc => .browserslistrc (100%) diff --git a/.browserlistrc b/.browserslistrc similarity index 100% rename from .browserlistrc rename to .browserslistrc From c866b59b277d26a3497aa95117b974de94634ea2 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 15:02:24 +0100 Subject: [PATCH 04/77] Minor changes in database setup --- package-lock.json | 241 ++++++++++++++++++++++++++++++++++++-- package.json | 2 + server/database/config.js | 22 ---- server/database/index.js | 16 +-- server/index.js | 33 +++--- webpack.config.babel.js | 2 +- 6 files changed, 261 insertions(+), 55 deletions(-) delete mode 100644 server/database/config.js diff --git a/package-lock.json b/package-lock.json index f419c3a1..61d95fc9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1105,6 +1105,16 @@ "@types/babel-types": "*" } }, + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" + }, + "@types/node": { + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" + }, "@types/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", @@ -1780,8 +1790,7 @@ "bluebird": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" }, "bn.js": { "version": "4.11.8", @@ -1989,6 +1998,11 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -2307,6 +2321,15 @@ "shallow-clone": "^1.0.0" } }, + "cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "requires": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -3159,6 +3182,11 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, + "dottie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.1.tgz", + "integrity": "sha512-ch5OQgvGDK2u8pSZeSYAQaV/lczImd7pMJ7BcEPXmnFVjy4yJIzP6CsODJUTH8mg1tyH1Z2abOiuJO3DjZ/GBw==" + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -4464,6 +4492,11 @@ "globule": "^1.0.0" } }, + "generic-pool": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", + "integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w==" + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -5031,6 +5064,11 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5118,6 +5156,11 @@ "binary-extensions": "^1.0.0" } }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6743,6 +6786,11 @@ "semver": "^5.1.0" } }, + "packet-reader": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", + "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + }, "pako": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", @@ -6895,6 +6943,62 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "pg": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.8.0.tgz", + "integrity": "sha512-yS3C9YD+ft0H7G47uU0eKajgTieggCXdA+Fxhm5G+wionY6kPBa8BEVDwPLMxQvkRkv3/LXiFEqjZm9gfxdW+g==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "0.3.1", + "pg-connection-string": "0.1.3", + "pg-pool": "^2.0.4", + "pg-types": "~2.0.0", + "pgpass": "1.x", + "semver": "4.3.2" + }, + "dependencies": { + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + } + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g==" + }, + "pg-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.0.tgz", + "integrity": "sha512-THUD7gQll5tys+5eQ8Rvs7DjHiIC3bLqixk3gMN9Hu8UrCBAOjf35FoI39rTGGc3lM2HU/R+Knpxvd11mCwOMA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -7415,6 +7519,29 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", + "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" + }, + "postgres-interval": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz", + "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==", + "requires": { + "xtend": "^4.0.0" + } + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -8495,6 +8622,15 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry-as-promised": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", + "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "requires": { + "bluebird": "^3.4.6", + "debug": "^2.6.9" + } + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -8762,8 +8898,7 @@ "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, "semver-diff": { "version": "2.1.0", @@ -8794,6 +8929,45 @@ "statuses": "~1.4.0" } }, + "sequelize": { + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.42.0.tgz", + "integrity": "sha512-qxAYnX4rcv7PbNtEidb56REpxNJCdbN0qyk1jb3+e6sE7OrmS0nYMU+MFVbNTJtZfSpOEEL1TX0TkMw+wzZBxg==", + "requires": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^3.1.0", + "depd": "^1.1.0", + "dottie": "^2.0.0", + "generic-pool": "^3.4.0", + "inflection": "1.12.0", + "lodash": "^4.17.1", + "moment": "^2.20.0", + "moment-timezone": "^0.5.14", + "retry-as-promised": "^2.3.2", + "semver": "^5.5.0", + "terraformer-wkt-parser": "^1.1.2", + "toposort-class": "^1.0.1", + "uuid": "^3.2.1", + "validator": "^10.4.0", + "wkx": "^0.4.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", @@ -8894,6 +9068,11 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -9113,6 +9292,14 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -9437,6 +9624,23 @@ } } }, + "terraformer": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz", + "integrity": "sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==", + "requires": { + "@types/geojson": "^1.0.0" + } + }, + "terraformer-wkt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz", + "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", + "requires": { + "@types/geojson": "^1.0.0", + "terraformer": "~1.0.5" + } + }, "terser": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", @@ -9496,6 +9700,11 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -9586,6 +9795,11 @@ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -10028,8 +10242,7 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { "version": "2.0.2", @@ -10056,6 +10269,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + }, "value-equal": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", @@ -10271,6 +10489,14 @@ } } }, + "wkx": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.6.tgz", + "integrity": "sha512-LHxXlzRCYQXA9ZHgs8r7Gafh0gVOE8o3QmudM1PIkOdkXXjW7Thcl+gb2P2dRuKgW8cqkitCRZkkjtmWzpHi7A==", + "requires": { + "@types/node": "*" + } + }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -10363,8 +10589,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "4.0.0", diff --git a/package.json b/package.json index b70b6f02..7d29baf0 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "moment-timezone": "^0.5.23", "morgan": "^1.9.1", "normalize.css": "^8.0.1", + "pg": "^7.8.0", "pug": "^2.0.3", "react": "^16.7.0", "react-dom": "^16.7.0", @@ -89,6 +90,7 @@ "redux-form": "^8.1.0", "redux-logger": "^3.0.6", "redux-thunk": "^2.3.0", + "sequelize": "^4.42.0", "winston": "^3.1.0" } } diff --git a/server/database/config.js b/server/database/config.js deleted file mode 100644 index 867dcea2..00000000 --- a/server/database/config.js +++ /dev/null @@ -1,22 +0,0 @@ -const dotenv = require('dotenv') -const path = require('path') - -dotenv.config({ path: path.join(__dirname, '..', '..', '.env') }) - -const url = process.env.DATABASE_URL -const dialect = process.env.DATABASE_DIALECT || 'postgres' - -module.exports = { - development: { - url, - dialect, - }, - staging: { - url, - dialect, - }, - production: { - url, - dialect, - }, -} diff --git a/server/database/index.js b/server/database/index.js index f09885af..ffae8c4f 100644 --- a/server/database/index.js +++ b/server/database/index.js @@ -1,18 +1,18 @@ import Sequelize from 'sequelize' -import winston from 'winston' -const config = require('./config.js')[process.env.NODE_ENV] -const { url, dialect } = config -const sequelize = new Sequelize(url, { - logging: (msg) => { +import logger from '../helpers/logger' + +const sequelize = new Sequelize(process.env.DATABASE_URL, { + logging: msg => { if (process.env.NODE_ENV !== 'production') { - winston.info(msg) + logger.info(msg) } }, - dialect, + dialect: process.env.DATABASE_DIALECT, + operatorsAliases: false, }) -export default { +export { Sequelize, sequelize, } diff --git a/server/index.js b/server/index.js index b4c6ed63..8993cf8d 100644 --- a/server/index.js +++ b/server/index.js @@ -10,6 +10,7 @@ import marked from 'marked' import methodOverride from 'method-override' import morgan from 'morgan' import path from 'path' +import sequelize from 'sequelize' import winston from 'winston' import logger from './helpers/logger' @@ -24,22 +25,25 @@ function getPath(filePath) { return path.resolve(__dirname, '..', filePath) } +function errorAndExit(message) { + logger.error(message) + process.exit(1) +} + // Load environment variables when in development const envVariables = dotenv.config({ path: getPath('.env'), }) if (envVariables.error && process.env.NODE_ENV === 'development') { - logger.error('".env" file does not exist, please configure the app first') - process.exit(1) + errorAndExit('".env" file does not exist, please configure the app first') } // Read build manifesto for asset file paths const assetsPath = getPath(ASSETS_MANIFESTO_FILE) if (!fs.existsSync(assetsPath)) { - logger.error(`"${ASSETS_MANIFESTO_FILE}" was not found, please bundle assets first`) - process.exit(1) + errorAndExit(`"${ASSETS_MANIFESTO_FILE}" was not found, please bundle assets first`) } const assets = require(assetsPath) @@ -47,8 +51,7 @@ assets.basePath = ASSETS_FOLDER_NAME // Check for public assets folder if (!fs.existsSync(getPath(ASSETS_FOLDER_NAME))) { - logger.error(`Assets folder "${ASSETS_FOLDER_NAME}" does not exist, please bundle assets first`) - process.exit(1) + errorAndExit(`Assets folder "${ASSETS_FOLDER_NAME}" does not exist, please bundle assets first`) } // Markdown settings @@ -65,16 +68,14 @@ marked.setOptions({ // moment.tz.setDefault(config.timezone) // Check database connection -// @TODO Revisit database handling -// const db = require('./database') -// db.sequelize.authenticate() -// .then(() => { -// logger.info('Database connection has been established successfully') -// }) -// .catch((err) => { -// logger.error('Unable to connect to the database: %s', err) -// process.exit(1) -// }) +const db = require('./database') +db.sequelize.authenticate() + .then(() => { + logger.info('Database connection has been established successfully') + }) + .catch(err => { + errorAndExit(`Unable to connect to database: ${err}`) + }) // Initialize express instance const app = express() diff --git a/webpack.config.babel.js b/webpack.config.babel.js index ff4ceb26..803d0460 100644 --- a/webpack.config.babel.js +++ b/webpack.config.babel.js @@ -44,7 +44,7 @@ module.exports = (env, options) => { }, { test: /\.scss$/, - exclude: /node_modules/, + exclude, use: [ { loader: MiniCssExtractPlugin.loader, From 76bd44b2a8a9d55150d67f1d8ec3cc7be79c96b6 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 15:33:43 +0100 Subject: [PATCH 05/77] Update eslint, use stylelint for scss --- .eslintrc | 308 +------ .sass-lint.yml | 279 ------ .stylelintrc | 265 ++++++ package-lock.json | 1798 ++++++++++++++++++++++++++++++++++++++- package.json | 10 + webpack.config.babel.js | 6 + 6 files changed, 2075 insertions(+), 591 deletions(-) delete mode 100644 .sass-lint.yml create mode 100644 .stylelintrc diff --git a/.eslintrc b/.eslintrc index 74355cdd..d7153881 100644 --- a/.eslintrc +++ b/.eslintrc @@ -3,312 +3,22 @@ "browser": true, "node": true }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], "parser": "babel-eslint", "parserOptions": { "ecmaFeatures": { - "arrowFunctions": true, - "blockBindings": true, - "classes": true, - "defaultParams": true, - "destructuring": true, - "forOf": true, - "generators": false, - "jsx": true, - "modules": true, - "objectLiteralComputedProperties": true, - "objectLiteralDuplicateProperties": false, - "objectLiteralShorthandMethods": true, - "objectLiteralShorthandProperties": true, - "spread": true, - "superInFunctions": true, - "templateStrings": true + "jsx": true } }, "plugins": [ "react" ], - "rules": { - "block-scoped-var": 2, - "brace-style": [ - 2, - "1tbs", - { - "allowSingleLine": true - } - ], - "camelcase": [ - 2, - { - "properties": "never" - } - ], - "comma-dangle": [ - 2, - "always-multiline" - ], - "comma-spacing": [ - 2, - { - "after": true, - "before": false - } - ], - "comma-style": [ - 2, - "last" - ], - "consistent-return": 2, - "curly": [ - 2, - "multi-line" - ], - "default-case": 2, - "dot-notation": [ - 2, - { - "allowKeywords": true - } - ], - "eol-last": 2, - "eqeqeq": 2, - "func-names": 1, - "guard-for-in": 2, - "indent": [ - 2, - 2 - ], - "jsx-quotes": [ - 2, - "prefer-double" - ], - "key-spacing": [ - 2, - { - "afterColon": true, - "beforeColon": false - } - ], - "keyword-spacing": 2, - "new-cap": [ - 2, - { - "newIsCap": true - } - ], - "no-alert": 1, - "no-caller": 2, - "no-cond-assign": [ - 2, - "always" - ], - "no-console": 1, - "no-constant-condition": 1, - "no-debugger": 1, - "no-dupe-keys": 2, - "no-duplicate-case": 2, - "no-else-return": 2, - "no-empty": 2, - "no-eq-null": 2, - "no-eval": 2, - "no-ex-assign": 2, - "no-extend-native": 2, - "no-extra-bind": 2, - "no-extra-boolean-cast": 0, - "no-extra-parens": [ - 2, - "functions" - ], - "no-extra-semi": 2, - "no-fallthrough": 2, - "no-floating-decimal": 2, - "no-func-assign": 2, - "no-implied-eval": 2, - "no-inner-declarations": 2, - "no-invalid-regexp": 2, - "no-irregular-whitespace": 2, - "no-lone-blocks": 2, - "no-loop-func": 2, - "no-multi-str": 2, - "no-multiple-empty-lines": [ - 2, - { - "max": 1 - } - ], - "no-native-reassign": 2, - "no-nested-ternary": 2, - "no-new": 2, - "no-new-func": 2, - "no-new-object": 2, - "no-new-wrappers": 2, - "no-obj-calls": 2, - "no-octal": 2, - "no-octal-escape": 2, - "no-param-reassign": 2, - "no-proto": 2, - "no-redeclare": 2, - "no-return-assign": 2, - "no-script-url": 2, - "no-self-compare": 2, - "no-sequences": 2, - "no-shadow": 1, - "no-shadow-restricted-names": 2, - "no-spaced-func": 2, - "no-sparse-arrays": 2, - "no-throw-literal": 2, - "no-trailing-spaces": 2, - "no-underscore-dangle": 0, - "no-unreachable": 2, - "no-unused-vars": [ - 2, - { - "args": "after-used", - "vars": "local" - } - ], - "no-use-before-define": 2, - "no-var": 2, - "no-with": 2, - "object-curly-spacing": [ - 2, - "always" - ], - "one-var": [ - 2, - "never" - ], - "padded-blocks": [ - 2, - "never" - ], - "prefer-const": 2, - "quote-props": [ - 2, - "consistent-as-needed" - ], - "quotes": [ - 2, - "single", - "avoid-escape" - ], - "radix": 2, - "react/display-name": 0, - "react/jsx-boolean-value": [ - 2, - "always" - ], - "react/jsx-curly-spacing": [ - 2, - "never", - { - "spacing": { - "objectLiterals": "always" - } - } - ], - "react/jsx-indent": [ - 2, - 2 - ], - "react/jsx-key": 2, - "react/jsx-no-bind": [ - 2, - { - "ignoreRefs": true - } - ], - "react/jsx-no-duplicate-props": 2, - "react/jsx-no-undef": 2, - "react/jsx-sort-prop-types": 0, - "react/jsx-sort-props": [ - 2, - { - "callbacksLast": true - } - ], - "react/jsx-tag-spacing": [ - 2, - { - "closingSlash": "never", - "beforeSelfClosing": "always", - "afterOpening": "never" - } - ], - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "react/jsx-wrap-multilines": 2, - "react/no-did-mount-set-state": 2, - "react/no-did-update-set-state": 2, - "react/no-multi-comp": 2, - "react/no-unknown-property": 2, - "react/no-unused-prop-types": 1, - "react/prop-types": 2, - "react/react-in-jsx-scope": 2, - "react/require-default-props": 2, - "react/self-closing-comp": 2, - "react/sort-comp": [ - 2, - { - "order": [ - "displayName", - "chrome", - "propTypes", - "contextTypes", - "childContextTypes", - "mixins", - "statics", - "fetchData", - "defaultProps", - "getDefaultProps", - "state", - "getInitialState", - "getChildContext", - "componentWillMount", - "componentDidMount", - "componentWillReceiveProps", - "shouldComponentUpdate", - "componentWillUpdate", - "componentDidUpdate", - "componentWillUnmount", - "/^on.+$/", - "/^get.+$/", - "/^render.+$/", - "render" - ] - } - ], - "semi": [ - 2, - "never" - ], - "semi-spacing": [ - 2, - { - "after": true, - "before": false - } - ], - "space-before-blocks": 2, - "space-before-function-paren": [ - 2, - "never" - ], - "space-infix-ops": 2, - "space-unary-ops": 2, - "spaced-comment": [ - 2, - "always" - ], - "strict": [ - 2, - "never" - ], - "use-isnan": 2, - "vars-on-top": 2, - "wrap-iife": [ - 2, - "any" - ], - "yoda": 2 + "settings": { + "react": { + "version": "detect" + } } } diff --git a/.sass-lint.yml b/.sass-lint.yml deleted file mode 100644 index 97b677e6..00000000 --- a/.sass-lint.yml +++ /dev/null @@ -1,279 +0,0 @@ -files: - include: assets/styles/**/*.scss -options: - formatter: stylish - merge-default-rules: false -rules: - bem-depth: - - 1 - - max-depth: 1 - border-zero: - - 1 - - convention: zero - brace-style: - - 1 - - allow-single-line: true - class-name-format: - - 1 - - convention: hyphenatedbem - clean-import-paths: - - 1 - - filename-extension: false - leading-underscore: false - empty-line-between-blocks: - - 1 - - ignore-single-line-rulesets: true - extends-before-declarations: 1 - extends-before-mixins: 1 - final-newline: - - 1 - - include: true - force-attribute-nesting: 1 - force-element-nesting: 1 - force-pseudo-nesting: 1 - function-name-format: - - 1 - - allow-leading-underscore: true - convention: hyphenatedlowercase - hex-length: - - 1 - - style: long - hex-notation: - - 1 - - style: lowercase - id-name-format: - - 1 - - convention: hyphenatedbem - indentation: - - 1 - - size: 2 - leading-zero: - - 1 - - include: false - mixin-name-format: - - 1 - - allow-leading-underscore: true - convention: hyphenatedlowercase - mixins-before-declarations: 1 - nesting-depth: - - 1 - - max-depth: 3 - no-color-keywords: 1 - no-color-literals: 1 - no-css-comments: 1 - no-debug: 1 - no-duplicate-properties: 1 - no-empty-rulesets: 1 - no-extends: 0 - no-ids: 1 - no-important: 1 - no-invalid-hex: 1 - no-mergeable-selectors: 1 - no-misspelled-properties: - - 1 - - extra-properties: [] - no-qualifying-elements: - - 1 - - allow-element-with-attribute: false - allow-element-with-class: false - allow-element-with-id: false - no-trailing-zero: 1 - no-transition-all: 0 - no-url-protocols: 1 - no-vendor-prefixes: - - 1 - - additional-identifiers: [] - excluded-identifiers: [] - placeholder-in-extend: 1 - placeholder-name-format: - - 1 - - convention: hyphenatedbem - property-sort-order: - - 1 - - ignore-custom-properties: false - order: - - position - - top - - right - - bottom - - left - - z-index - - display - - visibility - - overflow - - overflow-x - - overflow-y - - float - - clear - - '' - - table-layout - - border-collapse - - empty-cells - - box-sizing - - '' - - width - - min-width - - max-width - - height - - min-height - - max-height - - '' - - margin - - margin-top - - margin-right - - margin-bottom - - margin-left - - '' - - padding - - padding-top - - padding-right - - padding-bottom - - padding-left - - '' - - border - - border-width - - border-style - - border-color - - border-radius - - border-top - - border-top-width - - border-top-style - - border-top-color - - border-right - - border-right-width - - border-right-style - - border-right-color - - border-bottom - - border-bottom-width - - border-bottom-style - - border-bottom-color - - border-left - - border-left-width - - border-left-style - - border-left-color - - border-top-left-radius - - border-top-right-radius - - border-bottom-right-radius - - border-bottom-left-radius - - '' - - white-space - - content - - '' - - color - - '' - - background - - background-color - - background-image - - background-repeat - - background-attachment - - background-position - - background-size - - opacity - - '' - - font - - font-weight - - font-style - - font-variant - - font-size - - font-family - - letter-spacing - - line-height - - '' - - list-style - - list-style-type - - list-style-position - - list-style-image - - '' - - outline - - outline-width - - outline-style - - outline-color - - '' - - text-align - - text-decoration - - text-indent - - text-transform - - text-shadow - - '' - - animation - - transform - - transition - - '' - - box-shadow - property-units: - - 1 - - global: - - ch - - em - - ex - - rem - - cm - - in - - mm - - pc - - pt - - px - - q - - vh - - vmax - - vmin - - vw - - deg - - grad - - rad - - turn - - ms - - s - - Hz - - kHz - - dpcm - - dpi - - dppx - - '%' - per-property: {} - quotes: - - 1 - - style: double - shorthand-values: - - 1 - - allowed-shorthands: - - 1 - - 2 - - 3 - - 4 - single-line-per-selector: 1 - space-after-bang: - - 1 - - include: false - space-after-colon: - - 1 - - include: true - space-after-comma: - - 1 - - include: true - space-before-bang: - - 1 - - include: true - space-before-brace: - - 1 - - include: true - space-before-colon: 1 - space-between-parens: - - 1 - - include: false - trailing-semicolon: 1 - url-quotes: 1 - variable-for-property: - - 1 - - properties: - - color - - font-family - - font-size - - font-style - - font-variant - - font-weight - variable-name-format: - - 1 - - allow-leading-underscore: true - convention: hyphenatedlowercase - zero-unit: 1 diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 00000000..4d9ac162 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,265 @@ +{ + "extends": "stylelint-config-standard", + "plugins": [ + "stylelint-order" + ], + "rules": { + "at-rule-no-unknown": [ + true, + { + "ignoreAtRules": [ + "extend", + "at-root", + "debug", + "warn", + "error", + "if", + "else", + "for", + "each", + "while", + "mixin", + "include", + "content", + "return", + "function" + ] + } + ], + "declaration-empty-line-before": null, + "number-leading-zero": "never", + "string-quotes": "double", + "no-descending-specificity": null, + "order/order": [ + "at-rules", + "less-mixins", + "custom-properties", + "declarations", + "rules" + ], + "order/properties-order": [ + { + "emptyLineBefore": "always", + "properties": [ + "position" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "top", + "right", + "bottom", + "left" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "z-index" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "display", + "visibility" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "overflow", + "overflow-x", + "overflow-y" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "float", + "clear" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "table-layout", + "border-collapse", + "empty-cells", + "box-sizing" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "width", + "min-width", + "max-width", + "height", + "min-height" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "border", + "border-width", + "border-style", + "border-color", + "border-radius", + "border-top", + "border-top-width", + "border-top-style", + "border-top-color", + "border-right", + "border-right-width", + "border-right-style", + "border-right-color", + "border-bottom", + "border-bottom-width", + "border-bottom-style", + "border-bottom-color", + "border-left", + "border-left-width", + "border-left-style", + "border-left-color", + "border-top-left-radius", + "border-top-right-radius", + "border-bottom-right-radius", + "border-bottom-left-radius" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "white-space", + "content" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "color" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "background", + "background-color", + "background-image", + "background-repeat", + "background-attachment", + "background-position", + "background-size" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "opacity" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "font", + "font-weight", + "font-style", + "font-variant", + "font-size", + "font-family" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "letter-spacing", + "line-height" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "list-style", + "list-style-type", + "list-style-position", + "list-style-image" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "outline", + "outline-width", + "outline-style", + "outline-color" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "text-align", + "text-decoration", + "text-indent", + "text-transform", + "text-shadow" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "animation", + "transform", + "transition" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "box-shadow" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "align-content", + "align-items", + "align-self", + "flex", + "flex-basis", + "flex-direction", + "flex-flow", + "flex-grow", + "flex-shrink", + "flex-wrap", + "justify-content", + "order" + ] + }, + { + "emptyLineBefore": "always", + "properties": [ + "cursor", + "pointer-events" + ] + } + ] + } +} diff --git a/package-lock.json b/package-lock.json index 61d95fc9..cc23ca2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1092,6 +1092,22 @@ "to-fast-properties": "^2.0.0" } }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, "@types/babel-types": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", @@ -1121,6 +1137,33 @@ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", "dev": true }, + "@types/unist": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.2.tgz", + "integrity": "sha512-iHI60IbyfQilNubmxsq4zqSjdynlmc2Q/QvH9kjzg9+CCYVVzq1O6tc7VBzSygIwnmOt07w80IG6HDQvjv3Liw==", + "dev": true + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", + "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/unist": "*" + } + }, "@webassemblyjs/ast": { "version": "1.7.11", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", @@ -1347,6 +1390,12 @@ } } }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, "ajv": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", @@ -1412,6 +1461,12 @@ "string-width": "^2.0.0" } }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -1491,12 +1546,43 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1573,6 +1659,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", @@ -1631,6 +1723,32 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, + "babel-eslint": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", + "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + } + } + }, "babel-loader": { "version": "8.0.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", @@ -1682,6 +1800,12 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "bail": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", + "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -2065,6 +2189,12 @@ "unset-value": "^1.0.0" } }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -2153,6 +2283,12 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "ccount": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", + "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", + "dev": true + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -2178,6 +2314,24 @@ "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" }, + "character-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", + "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", + "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", + "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", + "dev": true + }, "character-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", @@ -2186,6 +2340,18 @@ "is-regex": "^1.0.3" } }, + "character-reference-invalid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", + "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", @@ -2238,6 +2404,12 @@ "safe-buffer": "^5.0.1" } }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2287,6 +2459,15 @@ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, "cli-table3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", @@ -2298,6 +2479,12 @@ "string-width": "^2.1.1" } }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -2321,6 +2508,16 @@ "shallow-clone": "^1.0.0" } }, + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "dev": true, + "requires": { + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" + } + }, "cls-bluebird": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", @@ -2347,6 +2544,12 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collapse-white-space": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", + "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2987,6 +3190,16 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -3004,6 +3217,12 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -3113,11 +3332,40 @@ "randombytes": "^2.0.0" } }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, "dns-prefetch-control": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -3153,6 +3401,15 @@ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -3241,6 +3498,12 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -3358,6 +3621,112 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", + "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "import-fresh": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", + "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "eslint-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", + "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-plugin-react": { + "version": "7.12.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", + "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "object.fromentries": "^2.0.0", + "prop-types": "^15.6.2", + "resolve": "^1.9.0" + } + }, "eslint-scope": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", @@ -3368,12 +3737,44 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -3430,6 +3831,15 @@ "strip-eof": "^1.0.0" } }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, "exenv": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", @@ -3555,6 +3965,17 @@ } } }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -3631,12 +4052,32 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, + "fast-glob": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", + "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "fast-safe-stringify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", @@ -3685,6 +4126,25 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3765,6 +4225,24 @@ } } }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "dev": true + }, "flush-write-stream": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", @@ -4430,6 +4908,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -4572,6 +5056,12 @@ } } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -4617,17 +5107,63 @@ "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", "dev": true }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "globby": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.0.0.tgz", + "integrity": "sha512-q0qiO/p1w/yJ0hk8V9x1UXlgsXUxlGd0AHUOXZVXBO6aznDtpx7M8D1kBrCAItoPm+4l8r6ATXV1JpjY2SBQOw==", "dev": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, + "array-union": "^1.0.2", + "dir-glob": "^2.2.1", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "gonzales-pe": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz", + "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==", + "dev": true, + "requires": { + "minimist": "1.1.x" + }, + "dependencies": { + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "dev": true + } + } + }, "google-maps-infobox": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", @@ -4905,6 +5441,39 @@ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "htmlparser2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -4973,6 +5542,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -5090,6 +5665,44 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", @@ -5141,6 +5754,28 @@ } } }, + "is-alphabetical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", + "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", + "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5230,6 +5865,12 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, + "is-decimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", + "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", + "dev": true + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -5307,6 +5948,12 @@ "is-extglob": "^2.1.1" } }, + "is-hexadecimal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", + "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", + "dev": true + }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", @@ -5392,6 +6039,12 @@ "has": "^1.0.1" } }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", @@ -5409,6 +6062,12 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", + "dev": true + }, "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", @@ -5439,12 +6098,24 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-whitespace-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", + "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-word-character": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", + "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5539,6 +6210,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -5575,6 +6252,15 @@ "promise": "^7.0.1" } }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "^3.0.3" + } + }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", @@ -5591,6 +6277,12 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "known-css-properties": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz", + "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==", + "dev": true + }, "kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", @@ -5632,6 +6324,22 @@ "invert-kv": "^2.0.0" } }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, "lightercollective": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lightercollective/-/lightercollective-0.1.0.tgz", @@ -5673,6 +6381,57 @@ "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -5768,6 +6527,15 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, "logform": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", @@ -5797,6 +6565,12 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, + "longest-streak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", + "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "dev": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5869,6 +6643,18 @@ "object-visit": "^1.0.0" } }, + "markdown-escapes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", + "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", + "dev": true + }, + "markdown-table": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz", + "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==", + "dev": true + }, "marked": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.0.tgz", @@ -5884,6 +6670,12 @@ "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" }, + "mathml-tag-names": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz", + "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -5895,6 +6687,15 @@ "safe-buffer": "^5.1.2" } }, + "mdast-util-compact": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz", + "integrity": "sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, "mdn-data": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", @@ -5950,6 +6751,12 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, "method-override": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", @@ -6082,6 +6889,16 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -6200,6 +7017,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", @@ -6225,6 +7048,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -6504,6 +7333,12 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, "normalize-url": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", @@ -6599,6 +7434,12 @@ } } }, + "object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true + }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", @@ -6614,6 +7455,18 @@ "isobject": "^3.0.0" } }, + "object.fromentries": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", + "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.11.0", + "function-bind": "^1.1.1", + "has": "^1.0.1" + } + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -6672,6 +7525,15 @@ "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "optimize-css-assets-webpack-plugin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", @@ -6682,6 +7544,28 @@ "last-call-webpack-plugin": "^3.0.0" } }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -6808,6 +7692,23 @@ "readable-stream": "^2.1.5" } }, + "parent-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", + "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", + "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", @@ -6822,6 +7723,20 @@ "safe-buffer": "^5.1.1" } }, + "parse-entities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", + "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -7043,6 +7958,12 @@ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -7148,6 +8069,33 @@ "postcss": "^7.0.0" } }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-jsx": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.0.tgz", + "integrity": "sha512-/lWOSXSX5jlITCKFkuYU2WLFdrncZmjSVyNpHAunEgirZXLwI8RjU556e3Uz4mv0WVHnJA9d3JWb36lK9Yx99g==", + "dev": true, + "requires": { + "@babel/core": ">=7.1.0" + } + }, + "postcss-less": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.1.tgz", + "integrity": "sha512-yVa0hb03p7xj914Z4qDDA/PGwXYvCEfjJizWVYQvnEQr8SgJ098qejCvbCGk1dDYQpQEGKkvYHQCo66DwTocjg==", + "dev": true, + "requires": { + "postcss": "^7.0.3" + } + }, "postcss-load-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", @@ -7197,10 +8145,26 @@ } } }, - "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "postcss-markdown": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", + "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", + "dev": true, + "requires": { + "remark": "^10.0.1", + "unist-util-find-all-after": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", + "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", "dev": true, "requires": { "css-color-names": "0.0.4", @@ -7471,6 +8435,52 @@ "postcss-value-parser": "^3.0.0" } }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", + "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-sass": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.3.5.tgz", + "integrity": "sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==", + "dev": true, + "requires": { + "gonzales-pe": "^4.2.3", + "postcss": "^7.0.1" + } + }, + "postcss-scss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.0.0.tgz", + "integrity": "sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, "postcss-selector-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", @@ -7490,6 +8500,16 @@ } } }, + "postcss-sorting": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-4.0.1.tgz", + "integrity": "sha512-YNRq7ChWFsLsns78zutLBWp6kvfZr/3YYf9q54P/fBpIHhf8gwbKvr5XHAt2l69SS08lfGtB8gG8m/62gsuTgw==", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "postcss": "^7.0.0" + } + }, "postcss-svgo": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", @@ -7502,6 +8522,12 @@ "svgo": "^1.0.0" } }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, "postcss-unique-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", @@ -7542,6 +8568,12 @@ "xtend": "^4.0.0" } }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", @@ -7565,6 +8597,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -7858,6 +8896,12 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", @@ -8455,6 +9499,12 @@ } } }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", @@ -8500,6 +9550,62 @@ "jsesc": "~0.5.0" } }, + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "dev": true, + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -8526,6 +9632,12 @@ "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -8616,6 +9728,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8670,6 +9792,15 @@ "inherits": "^2.0.1" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -8679,6 +9810,15 @@ "aproba": "^1.1.1" } }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -9105,6 +10245,17 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -9292,6 +10443,12 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -9352,6 +10509,12 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "state-toggle": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", + "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", + "dev": true + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9449,6 +10612,18 @@ "safe-buffer": "~5.1.0" } }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -9488,6 +10663,12 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, "stylehacks": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", @@ -9512,6 +10693,413 @@ } } }, + "stylelint": { + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-9.10.1.tgz", + "integrity": "sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==", + "dev": true, + "requires": { + "autoprefixer": "^9.0.0", + "balanced-match": "^1.0.0", + "chalk": "^2.4.1", + "cosmiconfig": "^5.0.0", + "debug": "^4.0.0", + "execall": "^1.0.0", + "file-entry-cache": "^4.0.0", + "get-stdin": "^6.0.0", + "global-modules": "^2.0.0", + "globby": "^9.0.0", + "globjoin": "^0.1.4", + "html-tags": "^2.0.0", + "ignore": "^5.0.4", + "import-lazy": "^3.1.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.11.0", + "leven": "^2.1.0", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "mathml-tag-names": "^2.0.1", + "meow": "^5.0.0", + "micromatch": "^3.1.10", + "normalize-selector": "^0.2.0", + "pify": "^4.0.0", + "postcss": "^7.0.13", + "postcss-html": "^0.36.0", + "postcss-jsx": "^0.36.0", + "postcss-less": "^3.1.0", + "postcss-markdown": "^0.36.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.0", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.0", + "postcss-sass": "^0.3.5", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^3.1.0", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^3.3.0", + "resolve-from": "^4.0.0", + "signal-exit": "^3.0.2", + "slash": "^2.0.0", + "specificity": "^0.4.1", + "string-width": "^3.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "file-entry-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-4.0.0.tgz", + "integrity": "sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "ignore": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", + "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", + "dev": true + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "redent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", + "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "string-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", + "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "stylelint-config-recommended": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz", + "integrity": "sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA==", + "dev": true + }, + "stylelint-config-standard": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz", + "integrity": "sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^2.1.0" + } + }, + "stylelint-order": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-2.0.0.tgz", + "integrity": "sha512-rGmvP5zSCxvmBYP8DgzmdMhMMM+degsQCXrzYDmqPmeyU2bWmQTt2mH157Svj0WwHQn1LG9aQHdvKZfpfg2t4A==", + "dev": true, + "requires": { + "lodash": "^4.17.10", + "postcss": "^7.0.2", + "postcss-sorting": "^4.0.1" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -9521,6 +11109,12 @@ "has-flag": "^3.0.0" } }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, "svgo": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", @@ -9548,6 +11142,18 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, + "table": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", + "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", + "dev": true, + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" + } + }, "tapable": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", @@ -9700,6 +11306,12 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -9736,6 +11348,15 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -9838,6 +11459,12 @@ } } }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -9850,11 +11477,23 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "trim-trailing-lines": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", + "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", + "dev": true + }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "trough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", + "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", + "dev": true + }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", @@ -9891,6 +11530,15 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -9979,6 +11627,16 @@ "debug": "^2.2.0" } }, + "unherit": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", + "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "xtend": "^4.0.1" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -10007,6 +11665,22 @@ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", "dev": true }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -10081,6 +11755,54 @@ "crypto-random-string": "^1.0.0" } }, + "unist-util-find-all-after": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz", + "integrity": "sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==", + "dev": true, + "requires": { + "unist-util-is": "^2.0.0" + } + }, + "unist-util-is": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", + "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", + "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", + "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", + "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", + "dev": true, + "requires": { + "unist-util-is": "^2.1.2" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -10301,6 +12023,41 @@ "extsprintf": "^1.2.0" } }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "dev": true, + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } + } + }, + "vfile-location": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", + "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -10564,6 +12321,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", @@ -10575,6 +12341,12 @@ "signal-exit": "^3.0.2" } }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, "x-xss-protection": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", diff --git a/package.json b/package.json index 7d29baf0..abf83e27 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,9 @@ "assets:build": "npm run assets:clear && webpack --mode production --progress", "assets:clear": "rimraf ./static", "assets:watch": "npm run assets:clear && webpack --mode development --watch --progress", + "lint": "npm run lint:js && npm run lint:scss", + "lint:js": "eslint --ignore-path .gitignore ./", + "lint:scss": "stylelint ./app/styles", "postinstall": "npm run assets:build", "serve": "nodemon --watch server --watch common --exec cross-env NODE_ENV=development babel-node server/index.js", "start": "cross-env NODE_ENV=production babel-node server/index.js", @@ -37,10 +40,14 @@ "@babel/preset-react": "^7.0.0", "assets-webpack-plugin": "^3.9.7", "autoprefixer": "^9.4.6", + "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", "cross-env": "^5.2.0", "css-loader": "^2.1.0", "cssnano": "^4.1.8", + "eslint": "^5.12.1", + "eslint-loader": "^2.1.1", + "eslint-plugin-react": "^7.12.4", "mini-css-extract-plugin": "^0.5.0", "node-sass": "^4.11.0", "nodemon": "^1.18.9", @@ -48,6 +55,9 @@ "postcss-loader": "^3.0.0", "rimraf": "^2.6.3", "sass-loader": "^7.1.0", + "stylelint": "^9.10.1", + "stylelint-config-standard": "^18.2.0", + "stylelint-order": "^2.0.0", "uglifyjs-webpack-plugin": "^2.1.1", "webpack": "^4.29.0", "webpack-cli": "^3.2.1" diff --git a/webpack.config.babel.js b/webpack.config.babel.js index 803d0460..0a70e434 100644 --- a/webpack.config.babel.js +++ b/webpack.config.babel.js @@ -35,6 +35,12 @@ module.exports = (env, options) => { }, module: { rules: [ + { + test: /\.js$/, + exclude, + enforce: 'pre', + loader: 'eslint-loader', + }, { test: /\.js$/, exclude, From 45ba8c2246e33034c7ad0f5066609a444d0daeb0 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 16:30:05 +0100 Subject: [PATCH 06/77] Adjust eslint settings --- .eslintrc | 316 +++++++++++++++++- app/scripts/actions/auth.js | 2 +- app/scripts/actions/flash.js | 2 +- app/scripts/actions/infiniteList.js | 2 +- app/scripts/auth.js | 6 +- app/scripts/components/FlashMessageStage.js | 2 +- app/scripts/components/FormCheckbox.js | 6 +- app/scripts/components/FormImageUploader.js | 6 +- .../components/FormResourceSelectorList.js | 2 +- app/scripts/components/LocationMap.js | 2 +- app/scripts/components/PaginatedList.js | 4 +- app/scripts/components/RegistrationWizard.js | 4 +- app/scripts/components/SidebarGifStream.js | 2 +- app/scripts/components/TicketWizard.js | 4 +- app/scripts/containers/withApiState.js | 2 +- app/scripts/containers/withAuthState.js | 2 +- app/scripts/containers/withDrawerState.js | 2 +- app/scripts/containers/withFlash.js | 2 +- app/scripts/containers/withImageUpload.js | 2 +- app/scripts/containers/withSocialFeatures.js | 2 +- app/scripts/containers/withUserStatus.js | 2 +- app/scripts/middlewares/api.js | 10 +- app/scripts/middlewares/scroll.js | 2 +- app/scripts/reducers/flash.js | 5 +- app/scripts/reducers/imageUpload.js | 8 +- app/scripts/reducers/paginatedList.js | 2 +- app/scripts/reducers/resources.js | 5 +- app/scripts/reducers/user.js | 3 +- app/scripts/utils/parameterize.js | 4 +- app/scripts/views/Profile.js | 2 +- app/styles/app.scss | 18 +- app/styles/common/variables.scss | 45 ++- app/styles/components/sidebar-toggle.scss | 1 - app/styles/components/slot-editor.scss | 9 +- common/services/i18n.js | 2 +- common/utils/slots.js | 4 +- server/controllers/auth.js | 14 +- server/controllers/base.js | 6 +- server/controllers/conversation.js | 12 +- server/controllers/event.js | 26 +- server/controllers/meeting.js | 12 +- server/controllers/message.js | 8 +- server/controllers/pageAdmin.js | 2 +- server/controllers/place.js | 6 +- server/controllers/profile.js | 2 +- server/controllers/resource.js | 2 +- server/controllers/ticket.js | 4 +- server/controllers/userStatus.js | 4 +- .../20170425232318-create-user-table.js | 2 +- .../20170507115037-add-user-roles.js | 2 +- .../20170614123925-create-page-table.js | 2 +- .../20170615224148-extend-user-table.js | 2 +- .../20170615232335-add-payment-details.js | 2 +- .../20170619142756-add-phone-to-user.js | 2 +- .../20170710210246-add-visitor-role.js | 2 +- .../20170710220314-password-reset-fields.js | 2 +- .../20170712120420-add-removable-page-flag.js | 2 +- .../20170712174432-create-place-table.js | 2 +- .../20170712175259-create-slot-table.js | 2 +- .../20170712175302-create-animal-table.js | 2 +- .../20170719211839-create-resource-table.js | 2 +- .../20170720173228-create-event-table.js | 2 +- .../20170720173822-add-event-slot-relation.js | 2 +- ...0722155133-create-resources-event-table.js | 2 +- ...0170722175816-add-from-to-dates-to-slot.js | 2 +- .../20170723153354-add-delete-cascades.js | 4 +- .../20170724104331-create-image-table.js | 2 +- ...0724132437-create-resources-image-table.js | 2 +- ...0170726224516-create-conversation-table.js | 2 +- .../20170726224533-create-message-table.js | 2 +- ...24543-create-conversations-animal-table.js | 2 +- ...20170729225227-add-user-delete-cascades.js | 4 +- .../20170730191945-add-activity-table.js | 2 +- ...08101608-rename-image-association-table.js | 4 +- .../20170813131735-create-meeting-table.js | 2 +- .../seeders/20170614114641-create-admin.js | 6 +- .../20170712120306-create-static-pages.js | 4 +- .../20170723191450-more-static-pages.js | 4 +- .../seeders/20170803134020-home-video-page.js | 4 +- server/handlers/animal.js | 2 +- server/handlers/base.js | 2 +- server/handlers/image.js | 8 +- server/helpers/logger.js | 2 +- server/helpers/mailTemplate.js | 8 +- server/index.js | 2 - server/middlewares/upload.js | 2 +- server/models/image.js | 8 +- server/models/user.js | 2 +- server/routes/index.js | 8 +- server/services/activity.js | 6 +- server/services/checkout.js | 4 +- server/services/imageVersions.js | 2 +- server/services/passport.js | 2 +- server/services/s3.js | 2 +- webpack.config.babel.js | 2 +- 95 files changed, 517 insertions(+), 215 deletions(-) diff --git a/.eslintrc b/.eslintrc index d7153881..08cc1b21 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,12 +1,9 @@ { "env": { "browser": true, - "node": true + "node": true, + "es6": true }, - "extends": [ - "eslint:recommended", - "plugin:react/recommended" - ], "parser": "babel-eslint", "parserOptions": { "ecmaFeatures": { @@ -20,5 +17,314 @@ "react": { "version": "detect" } + }, + "rules": { + "arrow-parens": [ + "error", + "as-needed" + ], + "block-scoped-var": 2, + "brace-style": [ + 2, + "1tbs", + { + "allowSingleLine": true + } + ], + "camelcase": [ + 2, + { + "properties": "never" + } + ], + "comma-dangle": [ + 2, + "always-multiline" + ], + "comma-spacing": [ + 2, + { + "after": true, + "before": false + } + ], + "comma-style": [ + 2, + "last" + ], + "consistent-return": 2, + "curly": [ + 2, + "multi-line" + ], + "default-case": 2, + "dot-notation": [ + 2, + { + "allowKeywords": true + } + ], + "eol-last": 2, + "eqeqeq": 2, + "func-names": 1, + "guard-for-in": 2, + "indent": [ + 2, + 2 + ], + "jsx-quotes": [ + 2, + "prefer-double" + ], + "key-spacing": [ + 2, + { + "afterColon": true, + "beforeColon": false + } + ], + "keyword-spacing": 2, + "new-cap": [ + 2, + { + "newIsCap": true + } + ], + "no-alert": 1, + "no-caller": 2, + "no-cond-assign": [ + 2, + "always" + ], + "no-console": 1, + "no-constant-condition": 1, + "no-debugger": 1, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-else-return": 2, + "no-empty": 2, + "no-eq-null": 2, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 0, + "no-extra-parens": [ + 2, + "functions" + ], + "no-extra-semi": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-implied-eval": 2, + "no-inner-declarations": 2, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [ + 2, + { + "max": 1 + } + ], + "no-native-reassign": 2, + "no-nested-ternary": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-param-reassign": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-return-assign": 2, + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow": 1, + "no-shadow-restricted-names": 2, + "no-spaced-func": 2, + "no-sparse-arrays": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-underscore-dangle": 0, + "no-unreachable": 2, + "no-unused-vars": [ + 2, + { + "args": "after-used", + "vars": "local" + } + ], + "no-use-before-define": 2, + "no-var": 2, + "no-with": 2, + "object-curly-spacing": [ + 2, + "always" + ], + "one-var": [ + 2, + "never" + ], + "padded-blocks": [ + 2, + "never" + ], + "prefer-const": 2, + "quote-props": [ + 2, + "consistent-as-needed" + ], + "quotes": [ + 2, + "single", + "avoid-escape" + ], + "radix": 2, + "react/display-name": 0, + "react/jsx-boolean-value": [ + 2, + "always" + ], + "react/jsx-curly-spacing": [ + 2, + "never", + { + "spacing": { + "objectLiterals": "always" + } + } + ], + "react/jsx-indent": [ + 2, + 2 + ], + "react/jsx-key": 2, + "react/jsx-no-bind": [ + 2, + { + "ignoreRefs": true + } + ], + "react/jsx-no-duplicate-props": 2, + "react/jsx-no-undef": 2, + "react/jsx-sort-props": [ + 2, + { + "callbacksLast": true + } + ], + "react/jsx-tag-spacing": [ + 2, + { + "closingSlash": "never", + "beforeSelfClosing": "always", + "afterOpening": "never" + } + ], + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/jsx-wrap-multilines": 2, + "react/no-did-mount-set-state": 2, + "react/sort-prop-types": 2, + "react/no-did-update-set-state": 2, + "react/boolean-prop-naming": 2, + "react/no-multi-comp": 2, + "react/no-string-refs": 2, + "react/no-deprecated": 2, + "react/no-unknown-property": 2, + "react/no-unused-prop-types": 1, + "react/prop-types": 2, + "react/react-in-jsx-scope": 2, + "react/require-default-props": 2, + "react/self-closing-comp": 2, + "react/sort-comp": [ + 2, + { + "order": [ + "displayName", + "chrome", + "propTypes", + "contextTypes", + "childContextTypes", + "mixins", + "statics", + "fetchData", + "defaultProps", + "getDefaultProps", + "state", + "getInitialState", + "getChildContext", + "componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "componentDidUpdate", + "componentWillUnmount", + "/^on.+$/", + "/^get.+$/", + "/^render.+$/", + "render" + ] + } + ], + "semi": [ + 2, + "never" + ], + "semi-spacing": [ + 2, + { + "after": true, + "before": false + } + ], + "space-before-blocks": 2, + "lines-around-comment": [ + "error", + { + "beforeBlockComment": true, + "allowBlockStart": true, + "allowArrayStart": false, + "allowArrayEnd": false, + "afterLineComment": false, + "beforeLineComment": true + } + ], + "capitalized-comments": [ + "error", + "always", + { + "ignoreConsecutiveComments": true + } + ], + "space-before-function-paren": [ + 2, + "never" + ], + "space-infix-ops": 2, + "space-unary-ops": 2, + "spaced-comment": [ + 2, + "always" + ], + "strict": [ + 2, + "never" + ], + "use-isnan": 2, + "vars-on-top": 2, + "wrap-iife": [ + 2, + "any" + ], + "yoda": 2 } } diff --git a/app/scripts/actions/auth.js b/app/scripts/actions/auth.js index 235bc178..817448a4 100644 --- a/app/scripts/actions/auth.js +++ b/app/scripts/actions/auth.js @@ -9,7 +9,7 @@ import { REDIRECT } from '../middlewares/redirect' import { translate } from '../../../common/services/i18n' export function redirectWhenUnauthenticated(location) { - return (dispatch) => { + return dispatch => { dispatch( flash({ lifetime: 5000, diff --git a/app/scripts/actions/flash.js b/app/scripts/actions/flash.js index 04523f19..43afa71a 100644 --- a/app/scripts/actions/flash.js +++ b/app/scripts/actions/flash.js @@ -6,7 +6,7 @@ let counter = 0 export default function flash(options) { const { text, type = 'notification', lifetime, redirect } = options - return (dispatch) => { + return dispatch => { dispatch({ type: ActionTypes.FLASH_ADD_MESSAGE, message: { diff --git a/app/scripts/actions/infiniteList.js b/app/scripts/actions/infiniteList.js index d6976c12..514566e7 100644 --- a/app/scripts/actions/infiniteList.js +++ b/app/scripts/actions/infiniteList.js @@ -30,7 +30,7 @@ export function fetchList(path, page = 0, params = {}) { success[UPDATE_USER_STATUS] = true } - // this is a quick hack fixing a wierd SQL issue + // This is a quick hack fixing a wierd SQL issue if ( requestPath[0] === 'conversations' || requestPath[0] === 'events' || diff --git a/app/scripts/auth.js b/app/scripts/auth.js index eceb7ba3..d2720e4f 100644 --- a/app/scripts/auth.js +++ b/app/scripts/auth.js @@ -25,7 +25,7 @@ export const shouldNotBeAuthenticated = connectedReduxRedirect({ export const isParticipant = connectedReduxRedirect({ redirectAction, redirectPath, - authenticatedSelector: (state) => { + authenticatedSelector: state => { return ( state.auth.isAuthenticated && (state.user.isParticipant || state.user.isAdmin) && @@ -38,7 +38,7 @@ export const isParticipant = connectedReduxRedirect({ export const isVisitor = connectedReduxRedirect({ redirectAction, redirectPath, - authenticatedSelector: (state) => { + authenticatedSelector: state => { return ( state.auth.isAuthenticated && (state.user.isVisitor || state.user.isAdmin) && @@ -51,7 +51,7 @@ export const isVisitor = connectedReduxRedirect({ export const isAdmin = connectedReduxRedirect({ redirectAction, redirectPath, - authenticatedSelector: (state) => { + authenticatedSelector: state => { return ( state.auth.isAuthenticated && state.user.isAdmin && diff --git a/app/scripts/components/FlashMessageStage.js b/app/scripts/components/FlashMessageStage.js index 0434538e..dd8fa2ac 100644 --- a/app/scripts/components/FlashMessageStage.js +++ b/app/scripts/components/FlashMessageStage.js @@ -12,7 +12,7 @@ class FlashMessageStage extends Component { } renderFlashMessages() { - return this.props.messages.map((message) => { + return this.props.messages.map(message => { return ( { this._refCheckbox = c }} type="checkbox" {...input} onBlur={this.onBlur} diff --git a/app/scripts/components/FormImageUploader.js b/app/scripts/components/FormImageUploader.js index 730ddc5e..0a49cadb 100644 --- a/app/scripts/components/FormImageUploader.js +++ b/app/scripts/components/FormImageUploader.js @@ -37,8 +37,8 @@ class FormImageUploader extends Component { maxImagesCount: PropTypes.number, removeImageFromList: PropTypes.func.isRequired, setUploadedImages: PropTypes.func.isRequired, - uploadedImages: PropTypes.array.isRequired, uploadImages: PropTypes.func.isRequired, + uploadedImages: PropTypes.array.isRequired, } static defaultProps = { @@ -106,7 +106,7 @@ class FormImageUploader extends Component { onUploadClick(event) { event.preventDefault() - this.refs.uploadButton.click() + this._uploadButtonElem.click() } onImageRemoveClick(imageId) { @@ -171,7 +171,7 @@ class FormImageUploader extends Component {
{ this._uploadButtonElem = c }} style={ { display: 'none' } } type="file" onChange={this.onFilesChange} diff --git a/app/scripts/components/FormResourceSelectorList.js b/app/scripts/components/FormResourceSelectorList.js index f2ec2664..ada80717 100644 --- a/app/scripts/components/FormResourceSelectorList.js +++ b/app/scripts/components/FormResourceSelectorList.js @@ -104,7 +104,7 @@ class FormResourceSelectorList extends Component { } isSelected(item) { - return this.state.selectedItems.find((selItem) => { + return this.state.selectedItems.find(selItem => { return selItem.id === item.id }) !== undefined } diff --git a/app/scripts/components/LocationMap.js b/app/scripts/components/LocationMap.js index 9a0582e6..131f903d 100644 --- a/app/scripts/components/LocationMap.js +++ b/app/scripts/components/LocationMap.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import { GoogleMap, Marker, withGoogleMap, withScriptjs} from 'react-google-maps' +import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' import config from '../../../common/config' import styles from '../utils/googleMapStyle.json' diff --git a/app/scripts/components/PaginatedList.js b/app/scripts/components/PaginatedList.js index 0e257475..824246a3 100644 --- a/app/scripts/components/PaginatedList.js +++ b/app/scripts/components/PaginatedList.js @@ -44,7 +44,7 @@ class PaginatedList extends Component { } renderTableCells(item, index) { - return this.props.columns.map((cell) => { + return this.props.columns.map(cell => { const key = `${item.id}${cell.key}` const value = item[cell.key] @@ -112,7 +112,7 @@ class PaginatedList extends Component { } renderTableHeader() { - return this.props.columns.map((cell) => { + return this.props.columns.map(cell => { return ( { cell.title } diff --git a/app/scripts/components/RegistrationWizard.js b/app/scripts/components/RegistrationWizard.js index a8021461..f901303a 100644 --- a/app/scripts/components/RegistrationWizard.js +++ b/app/scripts/components/RegistrationWizard.js @@ -59,7 +59,7 @@ class RegistrationWizard extends Component { onTermsAcceptedChanged() { this.setState({ - isTermsAccepted: this.refs.termsCheckbox.checked, + isTermsAccepted: this._termsCheckboxElem.checked, }) } @@ -125,7 +125,7 @@ class RegistrationWizard extends Component { checked={this.state.isTermsAccepted} className="form__field-input" disabled={this.props.isLoading} - ref="termsCheckbox" + ref={c => { this._termsCheckboxElem = c }} type="checkbox" onChange={this.onTermsAcceptedChanged} /> diff --git a/app/scripts/components/SidebarGifStream.js b/app/scripts/components/SidebarGifStream.js index 00566ced..db7c34f1 100644 --- a/app/scripts/components/SidebarGifStream.js +++ b/app/scripts/components/SidebarGifStream.js @@ -119,7 +119,7 @@ class SidebarGifStream extends Component { super(props) const options = { - callback: (data) => { + callback: data => { const images = this.state.images if (images.length === PREVIEW_IMAGES_COUNT) { diff --git a/app/scripts/components/TicketWizard.js b/app/scripts/components/TicketWizard.js index b6f4188d..706afcb8 100644 --- a/app/scripts/components/TicketWizard.js +++ b/app/scripts/components/TicketWizard.js @@ -40,7 +40,7 @@ class TicketWizard extends Component { onTermsAcceptedChanged() { this.setState({ - isTermsAccepted: this.refs.termsCheckbox.checked, + isTermsAccepted: this._termsCheckboxElem.checked, }) } @@ -100,7 +100,7 @@ class TicketWizard extends Component { checked={this.state.isTermsAccepted} className="form__field-input" disabled={this.props.isLoading} - ref="termsCheckbox" + ref={c => { this._termsCheckboxElem = c }} type="checkbox" onChange={this.onTermsAcceptedChanged} /> diff --git a/app/scripts/containers/withApiState.js b/app/scripts/containers/withApiState.js index 078c6f69..d61cc793 100644 --- a/app/scripts/containers/withApiState.js +++ b/app/scripts/containers/withApiState.js @@ -8,7 +8,7 @@ export default function withApiState(WrappedComponent) { } } - return connect(mapStateToProps)((props) => { + return connect(mapStateToProps)(props => { return }) } diff --git a/app/scripts/containers/withAuthState.js b/app/scripts/containers/withAuthState.js index 28ca8130..dae27220 100644 --- a/app/scripts/containers/withAuthState.js +++ b/app/scripts/containers/withAuthState.js @@ -11,7 +11,7 @@ export default function withAuthState(WrappedComponent) { } } - return connect(mapStateToProps, { logout })((props) => { + return connect(mapStateToProps, { logout })(props => { return }) } diff --git a/app/scripts/containers/withDrawerState.js b/app/scripts/containers/withDrawerState.js index 0de4fff7..5a83a326 100644 --- a/app/scripts/containers/withDrawerState.js +++ b/app/scripts/containers/withDrawerState.js @@ -14,7 +14,7 @@ export default function withDrawerState(WrappedComponent) { collapseAll, toggleNavigation, toggleSidebar, - })((props) => { + })(props => { return }) } diff --git a/app/scripts/containers/withFlash.js b/app/scripts/containers/withFlash.js index 185ad93d..70433315 100644 --- a/app/scripts/containers/withFlash.js +++ b/app/scripts/containers/withFlash.js @@ -6,7 +6,7 @@ import flash from '../actions/flash' export default function withFlash(WrappedComponent) { return connect(null, { flash, - })((props) => { + })(props => { return }) } diff --git a/app/scripts/containers/withImageUpload.js b/app/scripts/containers/withImageUpload.js index 8c6e480f..9fbf746e 100644 --- a/app/scripts/containers/withImageUpload.js +++ b/app/scripts/containers/withImageUpload.js @@ -22,7 +22,7 @@ export default function withImageUpload(WrappedComponent) { uploadImages, } - return connect(mapStateToProps, mapDispatchToProps)((props) => { + return connect(mapStateToProps, mapDispatchToProps)(props => { return }) } diff --git a/app/scripts/containers/withSocialFeatures.js b/app/scripts/containers/withSocialFeatures.js index 2580e481..9722e363 100644 --- a/app/scripts/containers/withSocialFeatures.js +++ b/app/scripts/containers/withSocialFeatures.js @@ -16,7 +16,7 @@ export default function withSocialFeatures(WrappedComponent) { requestRandomMeeting, } - return connect(mapStateToProps, mapDispatchToProps)((props) => { + return connect(mapStateToProps, mapDispatchToProps)(props => { return }) } diff --git a/app/scripts/containers/withUserStatus.js b/app/scripts/containers/withUserStatus.js index 23b54b31..1e190210 100644 --- a/app/scripts/containers/withUserStatus.js +++ b/app/scripts/containers/withUserStatus.js @@ -10,7 +10,7 @@ export default function withAuthState(WrappedComponent) { } } - return connect(mapStateToProps, { updateStatus })((props) => { + return connect(mapStateToProps, { updateStatus })(props => { return }) } diff --git a/app/scripts/middlewares/api.js b/app/scripts/middlewares/api.js index 6c93c9b7..c89aad8a 100644 --- a/app/scripts/middlewares/api.js +++ b/app/scripts/middlewares/api.js @@ -59,10 +59,10 @@ function request(path, method = 'GET', body = {}) { return new Promise((resolve, reject) => { fetch(`${API_ENDPOINT}${path.join('/')}${paramsStr}`, options) - .then((response) => { + .then(response => { const contentType = response.headers.get('content-type') if (contentType && contentType.includes('application/json')) { - response.json().then((json) => { + response.json().then(json => { if (response.status !== 200) { reject(getErrorMessage(json)) } else { @@ -73,7 +73,7 @@ function request(path, method = 'GET', body = {}) { reject(getErrorMessage()) } }) - .catch((error) => { + .catch(error => { reject(getErrorMessage(error)) }) }) @@ -97,7 +97,7 @@ export default store => next => action => { } return request(path, method, body) - .then((payload) => { + .then(payload => { store.dispatch({ type: ActionTypes.API_SUCCESS, payload, @@ -109,7 +109,7 @@ export default store => next => action => { } } }) - .catch((error) => { + .catch(error => { store.dispatch({ type: ActionTypes.API_FAILURE, error, diff --git a/app/scripts/middlewares/scroll.js b/app/scripts/middlewares/scroll.js index ea44a814..b9dcdca2 100644 --- a/app/scripts/middlewares/scroll.js +++ b/app/scripts/middlewares/scroll.js @@ -2,7 +2,7 @@ import Scroll from 'react-scroll' export const SCROLL_TO_TOP = Symbol('app-scroll-to-top') -export default store => next => action => { +export default next => action => { if (SCROLL_TO_TOP in action) { Scroll.animateScroll.scrollToTop() } diff --git a/app/scripts/reducers/flash.js b/app/scripts/reducers/flash.js index 66652391..c9b97970 100644 --- a/app/scripts/reducers/flash.js +++ b/app/scripts/reducers/flash.js @@ -12,16 +12,19 @@ export default function flash(state = initialState, action) { return update(state, { messages: { $push: [action.message] }, }) - case ActionTypes.FLASH_REMOVE_MESSAGE: + case ActionTypes.FLASH_REMOVE_MESSAGE: { const index = state.messages.findIndex(item => { return item.id === action.message.id }) + if (index === -1) { return state } + return update(state, { messages: { $splice: [[index, 1]] }, }) + } case ActionTypes.FLASH_REMOVE_ALL_MESSAGES: return update(state, { messages: { $set: [] }, diff --git a/app/scripts/reducers/imageUpload.js b/app/scripts/reducers/imageUpload.js index 702a1b0f..446fb76a 100644 --- a/app/scripts/reducers/imageUpload.js +++ b/app/scripts/reducers/imageUpload.js @@ -16,7 +16,7 @@ export default (state = initialState, action) => { errorMessage: { $set: '' }, isLoading: { $set: true }, }) - case ActionTypes.UPLOAD_IMAGE_SUCCESS: + case ActionTypes.UPLOAD_IMAGE_SUCCESS: { const newImages = action.payload.map((fileName, index) => { return { base64String: action.meta.base64Strings[index], @@ -24,10 +24,12 @@ export default (state = initialState, action) => { id: randomId(), } }) + return update(state, { uploadedImages: { $push: newImages }, isLoading: { $set: false }, }) + } case ActionTypes.UPLOAD_IMAGE_FAILURE: return update(state, { errorMessage: { $set: action.error.message }, @@ -37,13 +39,15 @@ export default (state = initialState, action) => { return update(state, { uploadedImages: { $set: action.meta.images }, }) - case ActionTypes.UPLOAD_IMAGE_REMOVE_IMAGE: + case ActionTypes.UPLOAD_IMAGE_REMOVE_IMAGE: { const index = state.uploadedImages.findIndex(image => { return image.id === action.meta.imageId }) + return update(state, { uploadedImages: { $splice: [[index, 1]] }, }) + } case ActionTypes.UPLOAD_IMAGE_CLEAR: return update(state, { $set: initialState, diff --git a/app/scripts/reducers/paginatedList.js b/app/scripts/reducers/paginatedList.js index 2fc307d2..f80d857f 100644 --- a/app/scripts/reducers/paginatedList.js +++ b/app/scripts/reducers/paginatedList.js @@ -16,7 +16,7 @@ function sortItems(list) { } function removeItem(state, resourceId) { - return state.listItems.filter((listItem) => { + return state.listItems.filter(listItem => { return listItem.id !== resourceId }) } diff --git a/app/scripts/reducers/resources.js b/app/scripts/reducers/resources.js index caeaea46..a131dff2 100644 --- a/app/scripts/reducers/resources.js +++ b/app/scripts/reducers/resources.js @@ -113,10 +113,11 @@ export default (state = initialState, action) => { return updateResource(newState, action, true, true) } case ActionTypes.RESOURCE_CREATE_SUCCESS: { - // delete temporarily created resource + // Delete temporarily created resource const { resourceType, resourceId } = action.meta const newState = deleteResource(state, resourceType, resourceId) - // pass over the "real" remote object + + // Pass over the "real" remote object action.meta.resourceId = action.payload.id return updateResource(newState, action, false, false) } diff --git a/app/scripts/reducers/user.js b/app/scripts/reducers/user.js index 4794c1a4..46addeef 100644 --- a/app/scripts/reducers/user.js +++ b/app/scripts/reducers/user.js @@ -22,7 +22,7 @@ export default (state = initialState, action) => { isLoading: { $set: true }, }) case ActionTypes.CHANGE_PROFILE_SUCCESS: - case ActionTypes.AUTH_LOGIN_SUCCESS: + case ActionTypes.AUTH_LOGIN_SUCCESS: { const jwtPayload = jwtDecode(action.payload.token) const user = jwtPayload.user @@ -36,6 +36,7 @@ export default (state = initialState, action) => { isParticipant: { $set: user.isParticipant }, isVisitor: { $set: user.isVisitor }, }) + } case ActionTypes.CHANGE_PROFILE_FAILURE: return update(state, { errorMessage: { $set: action.error.message }, diff --git a/app/scripts/utils/parameterize.js b/app/scripts/utils/parameterize.js index f7c09e62..699fb63e 100644 --- a/app/scripts/utils/parameterize.js +++ b/app/scripts/utils/parameterize.js @@ -7,9 +7,9 @@ export default function parameterize(obj) { return '' } - return '?' + Object.keys(obj).map((key) => { + return '?' + Object.keys(obj).map(key => { if (Array.isArray(obj[key])) { - return obj[key].map((item) => { + return obj[key].map(item => { return `${encode(key)}[]=${encode(item)}` }).join('&') } diff --git a/app/scripts/views/Profile.js b/app/scripts/views/Profile.js index 33d3c2ae..5495df1b 100644 --- a/app/scripts/views/Profile.js +++ b/app/scripts/views/Profile.js @@ -8,9 +8,9 @@ import { translate } from '../../../common/services/i18n' class Profile extends Component { static propTypes = { + changeProfile: PropTypes.func.isRequired, errorMessage: PropTypes.string, isLoading: PropTypes.bool.isRequired, - changeProfile: PropTypes.func.isRequired, } static defaultProps = { diff --git a/app/styles/app.scss b/app/styles/app.scss index ba332819..3f852dee 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -1,15 +1,12 @@ -// vendor - +// Vendor @import "~normalize.css"; -// common - +// Common @import "common/variables"; @import "common/mixins"; @import "common/utils"; -// global - +// Global @import "base/animations"; @import "base/buttons"; @import "base/form"; @@ -21,8 +18,7 @@ @import "base/tables"; @import "base/typo"; -// components - +// Components @import "components/activity-list-item"; @import "components/bar"; @import "components/bullet"; @@ -57,13 +53,11 @@ @import "components/value-selector"; @import "components/youtube"; -// vendors - +// Vendors @import "vendors/react-modal"; @import "vendors/react-slider"; -// layout - +// Layout @import "layout/footer"; @import "layout/header"; @import "layout/main"; diff --git a/app/styles/common/variables.scss b/app/styles/common/variables.scss index 1411622f..723e8eed 100644 --- a/app/styles/common/variables.scss +++ b/app/styles/common/variables.scss @@ -1,27 +1,43 @@ -// typography +// Color definitions +$black: #000; +$gray-dark: #111; +$gray: #222; +$gray-light: #aaa; +$gray-lighter: #efefef; +$white: #fff; + +$red: #f00; +$green: #0f0; +$blue: #00f; +$yellow: #ff0; + +$transparent: rgba($white, 0); +// Font families $font-family: "Arial", sans-serif; +// Font sizes $font-size-xs: 9px; $font-size-sm: 12px; $font-size-md: 16px; $font-size-lg: 20px; $font-size-xl: 24px; $font-size-xxl: 58px; + $font-size-base: 15px; $font-size-heading: 20px; +// Font weights $font-weight-bold: 900; +// Line heights $line-height-base: 1.5; -// layout - +// Layout variables $page-margin: 32px; $page-margin-mobile: 18px; // z-index - $z-index: ( gif-stream: 2000, header: 3000, @@ -32,27 +48,10 @@ $z-index: ( react-modal: 20000, ); -// media breakpoints - +// Breakpoints for responsive layouts $media-breakpoint: ( xs: 699px, sm: 700px, md: 900px, - lg: 1200px + lg: 1200px, ); - -// colors - -$black: #000000; -$gray-dark: #111111; -$gray: #222222; -$gray-light: #aaaaaa; -$gray-lighter: #efefef; -$white: #ffffff; - -$red: #ff0000; -$green: #00ff00; -$blue: #0000ff; -$yellow: #ffff00; - -$transparent: rgba($white, 0); diff --git a/app/styles/components/sidebar-toggle.scss b/app/styles/components/sidebar-toggle.scss index 994ddb21..dd255309 100644 --- a/app/styles/components/sidebar-toggle.scss +++ b/app/styles/components/sidebar-toggle.scss @@ -81,4 +81,3 @@ } } } - diff --git a/app/styles/components/slot-editor.scss b/app/styles/components/slot-editor.scss index 4ba2f31a..dceb7de6 100644 --- a/app/styles/components/slot-editor.scss +++ b/app/styles/components/slot-editor.scss @@ -1,9 +1,8 @@ .slot-editor { display: flex; - flex-wrap: wrap; - align-content: flex-start; + flex-wrap: wrap; justify-content: center; } @@ -20,9 +19,8 @@ transition: all .2s linear; - flex: 1 25%; - align-items: center; + flex: 1 25%; justify-content: center; cursor: pointer; @@ -85,8 +83,7 @@ text-align: center; - flex: 1 100%; - align-items: center; + flex: 1 100%; justify-content: center; } diff --git a/common/services/i18n.js b/common/services/i18n.js index 892cedcc..782265d9 100644 --- a/common/services/i18n.js +++ b/common/services/i18n.js @@ -38,7 +38,7 @@ function capitalizeWord(word) { function titleize(sentence) { const result = [] - sentence.split(' ').forEach((word) => { + sentence.split(' ').forEach(word => { result.push(capitalizeWord(word)) }) diff --git a/common/utils/slots.js b/common/utils/slots.js index d5e34044..f22bc853 100644 --- a/common/utils/slots.js +++ b/common/utils/slots.js @@ -71,7 +71,7 @@ export function getDisabledSlotIndexes(slots) { } export function getSlotWithIndex(slots, slotIndex) { - return slots.find((slot) => slot.slotIndex === slotIndex) + return slots.find(slot => slot.slotIndex === slotIndex) } export function generateNewSlotItems(slotSize, existingSlots) { @@ -155,7 +155,7 @@ export function createEventSlots(slotIndexes, placeId, eventId, slotSize) { } export function createDisabledSlots(slotIndexes, placeId, slotSize) { - return slotIndexes.map((slotIndex) => { + return slotIndexes.map(slotIndex => { const { from, to } = getSlotTimes(slotSize, slotIndex) const slot = { from, diff --git a/server/controllers/auth.js b/server/controllers/auth.js index bb7130a8..b327b494 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -16,7 +16,7 @@ import { } from '../helpers/mailTemplate' import { translate } from '../../common/services/i18n' -const PASSWORD_RESET_EXPIRY = 15 // min +const PASSWORD_RESET_EXPIRY = 15 // Min const permittedFields = [ 'city', @@ -68,9 +68,9 @@ function signup(req, res, next) { } return User.create(fields, { returning: true }) - .then((user) => { + .then(user => { return checkout(paymentMethod, user, product) - .then((data) => { + .then(data => { sendAdminRegistrationNotification({ paymentMethod, product, @@ -97,7 +97,7 @@ function paypalCheckoutSuccess(req, res, next) { } return User.findOne(queryParams) - .then((user) => { + .then(user => { executePayment(paymentId, PayerID) .then(() => { return User.update({ isActive: true }, queryParams) @@ -174,11 +174,11 @@ function requestResetToken(req, res, next) { returning: true, } - generateRandomHash().then((passwordResetToken) => { + generateRandomHash().then(passwordResetToken => { const passwordResetAt = db.sequelize.fn('NOW') return User.update({ passwordResetAt, passwordResetToken }, queryParams) - .then((data) => { + .then(data => { if (data[0] === 0) { next( new APIError( @@ -222,7 +222,7 @@ function resetPassword(req, res, next) { const passwordResetToken = null return User.update({ password, passwordResetToken }, queryParams) - .then((data) => { + .then(data => { if (data[0] === 0) { next( new APIError( diff --git a/server/controllers/base.js b/server/controllers/base.js index 9d018a8a..582627f7 100644 --- a/server/controllers/base.js +++ b/server/controllers/base.js @@ -33,19 +33,19 @@ export function prepareAnimalResponseAll(animals) { export function prepareResponse(data, req) { const response = data.toJSON() - // set owner flag for frontend ui + // Set owner flag for frontend ui if (typeof req.isOwnerMe !== 'undefined') { response.isOwnerMe = req.isOwnerMe } else { response.isOwnerMe = (data.animal.userId === req.user.id) } - // remove userId from animal to stay anonymous + // Remove userId from animal to stay anonymous if (response.animal) { response.animal = prepareAnimalResponse(response.animal) } - // convert markdown to html + // Convert markdown to html response.descriptionHtml = marked(response.description) return response diff --git a/server/controllers/conversation.js b/server/controllers/conversation.js index 66969789..d782df07 100644 --- a/server/controllers/conversation.js +++ b/server/controllers/conversation.js @@ -61,7 +61,7 @@ export default { const values = pick(permittedFields, req.body) const animalIds = req.body.animalIds - // get all receiving animals + // Get all receiving animals return Animal.findAll({ where: { id: { @@ -72,7 +72,7 @@ export default { returning: true, }) .then(receivingAnimals => { - // check if receiving animal is not myself + // Check if receiving animal is not myself const isMyself = receivingAnimals.find(animal => { return animal.userId === req.user.id }) @@ -87,7 +87,7 @@ export default { return null } - // are all receiving animals given? + // Are all receiving animals given? if (receivingAnimals.length !== animalIds.length) { next( new APIError( @@ -98,7 +98,7 @@ export default { return null } - // create an animal for myself (the sending user) + // Create an animal for myself (the sending user) return Animal.create({ userId: req.user.id, }, { @@ -107,7 +107,7 @@ export default { .then(sendingAnimal => { const animals = receivingAnimals.concat([sendingAnimal]) - // create the new conversation + // Create the new conversation return Conversation.create({ title: values.title, animalId: sendingAnimal.id, @@ -115,7 +115,7 @@ export default { .then(conversation => { return conversation.setAnimals(animals) .then(() => { - // create first message in conversation + // Create first message in conversation return Message.create({ animalId: sendingAnimal.id, conversationId: conversation.id, diff --git a/server/controllers/event.js b/server/controllers/event.js index a1b02670..1b0ac8d1 100644 --- a/server/controllers/event.js +++ b/server/controllers/event.js @@ -214,7 +214,7 @@ function createEvent(req, fields) { returning: true, }) .then(event => { - // associate resources to event + // Associate resources to event return Resource.findAll({ where: { id: { $in: req.body.resources } }, include: [{ @@ -225,7 +225,7 @@ function createEvent(req, fields) { .then(resources => { event.setResources(resources) - // create slots for event + // Create slots for event const slots = createEventSlots( req.body.slots, place.id, @@ -280,10 +280,10 @@ function updateEvent(req, fields) { .then(data => { const event = data[1][0] - // update images + // Update images return updateImagesForObject(event, req.body.images) .then(() => { - // associate resources to event + // Associate resources to event return Resource.findAll({ where: { id: { $in: req.body.resources } }, include: [{ @@ -294,14 +294,14 @@ function updateEvent(req, fields) { .then(resources => { event.setResources(resources) - // clean up all slot before + // Clean up all slot before return Slot.destroy({ where: { eventId: event.id, }, }) .then(() => { - // create slots for event + // Create slots for event const slots = createEventSlots( req.body.slots, place.id, @@ -309,7 +309,7 @@ function updateEvent(req, fields) { place.slotSize ) - // filter out only new resources for notifications + // Filter out only new resources for notifications const currentResourceIds = resources.map(resource => { return resource.id }) @@ -338,7 +338,7 @@ function updateEvent(req, fields) { }) }) .then(() => { - // return the whole event with all associations + // Return the whole event with all associations return Event.findById(event.id, { include }) .then(updatedEvent => resolve(updatedEvent)) }) @@ -361,7 +361,7 @@ function validateEvent(req, fields, eventId) { ) } - // keep the place, because we need it later + // Keep the place, because we need it later req.place = place return Promise.all([ @@ -376,10 +376,10 @@ export default { create: (req, res, next) => { const fields = pick(permittedFields, req.body) - // check if everything is correct before we do anything + // Check if everything is correct before we do anything return validateEvent(req, fields) .then(() => { - // create event + // Create event return createEvent(req, fields) .then(event => res.json(prepareResponse(event, req))) }) @@ -467,10 +467,10 @@ export default { update: (req, res, next) => { const fields = pick(permittedFields, req.body) - // check if everything is correct before we do anything + // Check if everything is correct before we do anything return validateEvent(req, fields, req.resourceId) .then(() => { - // update event + // Update event return updateEvent(req, fields) .then(event => res.json(prepareResponse(event, req))) }) diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 2f8330a6..5b71ebed 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -51,7 +51,7 @@ function createConversation(place, from, to, userId) { placeTitle, }) - // create the new conversation + // Create the new conversation return Conversation.create({ title, animalId, @@ -59,7 +59,7 @@ function createConversation(place, from, to, userId) { .then(conversation => { return conversation.setAnimals([sendingAnimal]) .then(() => { - // create first message in conversation + // Create first message in conversation return Message.create({ animalId, conversationId: conversation.id, @@ -74,7 +74,7 @@ function createConversation(place, from, to, userId) { }) }) }) - .catch((err) => { + .catch(err => { reject(err) }) }) @@ -169,7 +169,7 @@ function joinMeeting(conversation, userId) { return conversation.addAnimal(joiningAnimal) .then(() => { - // create message in conversation + // Create message in conversation return Message.create({ animalId: joiningAnimal.id, conversationId: conversation.id, @@ -192,7 +192,7 @@ export default { let from if (date) { - // meeting was requested with a date + // Meeting was requested with a date const tresholdDate = moment() .startOf('hour') .add(DATE_MINIMUM_TO_NOW_HOURS, 'hours') @@ -210,7 +210,7 @@ export default { from = moment(date).startOf('hour') where.from = from } else { - // meeting was requested with any date + // Meeting was requested with any date from = moment() .startOf('hour') .add(ANY_DATE_FROM_NOW_MIN_HOURS, 'hours') diff --git a/server/controllers/message.js b/server/controllers/message.js index 5bae528d..40a06ff3 100644 --- a/server/controllers/message.js +++ b/server/controllers/message.js @@ -52,7 +52,7 @@ export default { create: (req, res, next) => { const values = pick(permittedFields, req.body) - // create a message in that conversation + // Create a message in that conversation return Message.create({ animalId: req.meAnimal.id, conversationId: req.conversation.id, @@ -75,7 +75,7 @@ export default { offset = DEFAULT_OFFSET, } = req.query - // find related conversation + // Find related conversation return Message.findAndCountAll({ where: { conversationId: req.params.resourceId, @@ -90,7 +90,7 @@ export default { ], }) .then(result => { - // update last checked at date + // Update last checked at date return ConversationAnimal.update({ lastCheckedAt: db.sequelize.fn('NOW'), }, { @@ -100,7 +100,7 @@ export default { }, }) .then(() => { - // return messages + // Return messages res.json({ data: prepareResponseAll(result.rows, req), limit: parseInt(limit, 10), diff --git a/server/controllers/pageAdmin.js b/server/controllers/pageAdmin.js index 5be38446..68e4f4e7 100644 --- a/server/controllers/pageAdmin.js +++ b/server/controllers/pageAdmin.js @@ -28,7 +28,7 @@ export default { isRemovable: true, }, }) - .then((isSuccess) => { + .then(isSuccess => { if (!isSuccess) { next(new APIError('Resource is not removable', httpStatus.LOCKED)) return diff --git a/server/controllers/place.js b/server/controllers/place.js index d28e15af..4f0b5a87 100644 --- a/server/controllers/place.js +++ b/server/controllers/place.js @@ -194,10 +194,10 @@ export default { const body = pick(permittedFields, req.body) const values = preparePlaceValues(body) - // check first if we can disable the requested slots + // Check first if we can disable the requested slots areSlotsBooked(req.resourceId, body.disabledSlots) .then(() => { - // update place + // Update place Place.update(values, { include, individualHooks: true, @@ -212,7 +212,7 @@ export default { return updateImagesForObject(previousPlace, req.body.images) .then(() => { - // clean up all slot before + // Clean up all slot before return Slot.destroy({ where: { isDisabled: true, diff --git a/server/controllers/profile.js b/server/controllers/profile.js index ef9e24e4..74c23041 100644 --- a/server/controllers/profile.js +++ b/server/controllers/profile.js @@ -33,7 +33,7 @@ export function update(req, res, next) { limit: 1, returning: true, }) - .then((data) => { + .then(data => { const updatedUser = data[1][0] res.json({ data: updatedUser, diff --git a/server/controllers/resource.js b/server/controllers/resource.js index ef03973d..a4459005 100644 --- a/server/controllers/resource.js +++ b/server/controllers/resource.js @@ -115,7 +115,7 @@ export default { .catch(err => next(err)) }, findAll: (req, res, next) => { - // is there a time filter activated? + // Is there a time filter activated? if (req.query.from && req.query.to) { return findAllWithAvailability(req, res, next) } diff --git a/server/controllers/ticket.js b/server/controllers/ticket.js index 2af66cc9..6841577c 100644 --- a/server/controllers/ticket.js +++ b/server/controllers/ticket.js @@ -45,9 +45,9 @@ function signup(req, res, next) { } return User.create(fields, { returning: true }) - .then((user) => { + .then(user => { return checkout(paymentMethod, user, product) - .then((data) => { + .then(data => { sendAdminRegistrationNotification({ paymentMethod, product, diff --git a/server/controllers/userStatus.js b/server/controllers/userStatus.js index d0f0342e..5a596166 100644 --- a/server/controllers/userStatus.js +++ b/server/controllers/userStatus.js @@ -39,7 +39,7 @@ function getUnreadMessageCount(req) { parseInt(req.query.lastRequestAt, 10) ) : new Date() - // check for unread messages + // Check for unread messages const unreadMessages = messages.rows.filter(message => { const animalMe = message.conversation.animals[0] const lastCheckedAt = animalMe.conversationsAnimals.updatedAt @@ -51,7 +51,7 @@ function getUnreadMessageCount(req) { return moment(lastCheckedAt).isBefore(message.createdAt) }) - // check for unread messages since the last time we looked at it + // Check for unread messages since the last time we looked at it const latestMessages = unreadMessages.filter(message => { return moment(lastRequestAt).isBefore(message.createdAt) }) diff --git a/server/database/migrations/20170425232318-create-user-table.js b/server/database/migrations/20170425232318-create-user-table.js index 1d2cc17d..bacf5cc8 100644 --- a/server/database/migrations/20170425232318-create-user-table.js +++ b/server/database/migrations/20170425232318-create-user-table.js @@ -43,7 +43,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('users') }, } diff --git a/server/database/migrations/20170507115037-add-user-roles.js b/server/database/migrations/20170507115037-add-user-roles.js index f9302e15..41553ef1 100644 --- a/server/database/migrations/20170507115037-add-user-roles.js +++ b/server/database/migrations/20170507115037-add-user-roles.js @@ -20,7 +20,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'isAdmin') queryInterface.removeColumn('users', 'isParticipant') }, diff --git a/server/database/migrations/20170614123925-create-page-table.js b/server/database/migrations/20170614123925-create-page-table.js index 2042ef2b..b4703c30 100644 --- a/server/database/migrations/20170614123925-create-page-table.js +++ b/server/database/migrations/20170614123925-create-page-table.js @@ -34,7 +34,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.dropTable('pages') }, } diff --git a/server/database/migrations/20170615224148-extend-user-table.js b/server/database/migrations/20170615224148-extend-user-table.js index 4c681eae..89a85264 100644 --- a/server/database/migrations/20170615224148-extend-user-table.js +++ b/server/database/migrations/20170615224148-extend-user-table.js @@ -40,7 +40,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'street') queryInterface.removeColumn('users', 'cityCode') queryInterface.removeColumn('users', 'city') diff --git a/server/database/migrations/20170615232335-add-payment-details.js b/server/database/migrations/20170615232335-add-payment-details.js index 55b2d4d8..43764c23 100644 --- a/server/database/migrations/20170615232335-add-payment-details.js +++ b/server/database/migrations/20170615232335-add-payment-details.js @@ -28,7 +28,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'paymentMethod') queryInterface.removeColumn('users', 'paymentId') queryInterface.removeColumn('users', 'isActive') diff --git a/server/database/migrations/20170619142756-add-phone-to-user.js b/server/database/migrations/20170619142756-add-phone-to-user.js index 0fc12a2b..1dbf757d 100644 --- a/server/database/migrations/20170619142756-add-phone-to-user.js +++ b/server/database/migrations/20170619142756-add-phone-to-user.js @@ -10,7 +10,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'phone') }, } diff --git a/server/database/migrations/20170710210246-add-visitor-role.js b/server/database/migrations/20170710210246-add-visitor-role.js index 0a2f8f5e..81f247d0 100644 --- a/server/database/migrations/20170710210246-add-visitor-role.js +++ b/server/database/migrations/20170710210246-add-visitor-role.js @@ -10,7 +10,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'isVisitor') }, } diff --git a/server/database/migrations/20170710220314-password-reset-fields.js b/server/database/migrations/20170710220314-password-reset-fields.js index 826feeb9..671a244c 100644 --- a/server/database/migrations/20170710220314-password-reset-fields.js +++ b/server/database/migrations/20170710220314-password-reset-fields.js @@ -16,7 +16,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('users', 'passwordResetAt') queryInterface.removeColumn('users', 'passwordResetToken') }, diff --git a/server/database/migrations/20170712120420-add-removable-page-flag.js b/server/database/migrations/20170712120420-add-removable-page-flag.js index bdd449df..dbe528ef 100644 --- a/server/database/migrations/20170712120420-add-removable-page-flag.js +++ b/server/database/migrations/20170712120420-add-removable-page-flag.js @@ -10,7 +10,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('pages', 'isRemovable') }, } diff --git a/server/database/migrations/20170712174432-create-place-table.js b/server/database/migrations/20170712174432-create-place-table.js index 71e63fd9..51297102 100644 --- a/server/database/migrations/20170712174432-create-place-table.js +++ b/server/database/migrations/20170712174432-create-place-table.js @@ -70,7 +70,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('places') }, } diff --git a/server/database/migrations/20170712175259-create-slot-table.js b/server/database/migrations/20170712175259-create-slot-table.js index 8f17590d..d276225a 100644 --- a/server/database/migrations/20170712175259-create-slot-table.js +++ b/server/database/migrations/20170712175259-create-slot-table.js @@ -27,7 +27,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('slots') }, } diff --git a/server/database/migrations/20170712175302-create-animal-table.js b/server/database/migrations/20170712175302-create-animal-table.js index cbdd76be..8d98bc14 100644 --- a/server/database/migrations/20170712175302-create-animal-table.js +++ b/server/database/migrations/20170712175302-create-animal-table.js @@ -22,7 +22,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('animals') }, } diff --git a/server/database/migrations/20170719211839-create-resource-table.js b/server/database/migrations/20170719211839-create-resource-table.js index 97a6b849..1ffc4dc1 100644 --- a/server/database/migrations/20170719211839-create-resource-table.js +++ b/server/database/migrations/20170719211839-create-resource-table.js @@ -35,7 +35,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('resources') }, } diff --git a/server/database/migrations/20170720173228-create-event-table.js b/server/database/migrations/20170720173228-create-event-table.js index cc6902a7..a5e99362 100644 --- a/server/database/migrations/20170720173228-create-event-table.js +++ b/server/database/migrations/20170720173228-create-event-table.js @@ -43,7 +43,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('events') }, } diff --git a/server/database/migrations/20170720173822-add-event-slot-relation.js b/server/database/migrations/20170720173822-add-event-slot-relation.js index ec5e1953..aef1fa9b 100644 --- a/server/database/migrations/20170720173822-add-event-slot-relation.js +++ b/server/database/migrations/20170720173822-add-event-slot-relation.js @@ -8,7 +8,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('slots', 'eventId') }, } diff --git a/server/database/migrations/20170722155133-create-resources-event-table.js b/server/database/migrations/20170722155133-create-resources-event-table.js index 44687857..d82d2e96 100644 --- a/server/database/migrations/20170722155133-create-resources-event-table.js +++ b/server/database/migrations/20170722155133-create-resources-event-table.js @@ -17,7 +17,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('resourcesEvents') }, } diff --git a/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js b/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js index 142107d5..bceb1a8f 100644 --- a/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js +++ b/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js @@ -18,7 +18,7 @@ module.exports = { } ) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeColumn('slots', 'from') queryInterface.removeColumn('slots', 'to') }, diff --git a/server/database/migrations/20170723153354-add-delete-cascades.js b/server/database/migrations/20170723153354-add-delete-cascades.js index ca06fae2..e898485e 100644 --- a/server/database/migrations/20170723153354-add-delete-cascades.js +++ b/server/database/migrations/20170723153354-add-delete-cascades.js @@ -1,5 +1,5 @@ module.exports = { - up: (queryInterface) => { + up: queryInterface => { queryInterface.addConstraint('places', ['animalId'], { name: 'place_animal_id_fkey', type: 'FOREIGN KEY', @@ -55,7 +55,7 @@ module.exports = { onUpdate: 'CASCADE', }) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeConstraint('places', 'place_animal_id_fkey') queryInterface.removeConstraint('events', 'event_animal_id_fkey') queryInterface.removeConstraint('resources', 'resource_animal_id_fkey') diff --git a/server/database/migrations/20170724104331-create-image-table.js b/server/database/migrations/20170724104331-create-image-table.js index 3e489778..e29c988e 100644 --- a/server/database/migrations/20170724104331-create-image-table.js +++ b/server/database/migrations/20170724104331-create-image-table.js @@ -30,7 +30,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('images') }, } diff --git a/server/database/migrations/20170724132437-create-resources-image-table.js b/server/database/migrations/20170724132437-create-resources-image-table.js index 82ee7163..1d4653ee 100644 --- a/server/database/migrations/20170724132437-create-resources-image-table.js +++ b/server/database/migrations/20170724132437-create-resources-image-table.js @@ -22,7 +22,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('resourcesImages') }, } diff --git a/server/database/migrations/20170726224516-create-conversation-table.js b/server/database/migrations/20170726224516-create-conversation-table.js index 12b0add2..341a7ce4 100644 --- a/server/database/migrations/20170726224516-create-conversation-table.js +++ b/server/database/migrations/20170726224516-create-conversation-table.js @@ -21,7 +21,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('conversations') }, } diff --git a/server/database/migrations/20170726224533-create-message-table.js b/server/database/migrations/20170726224533-create-message-table.js index a020ecf8..a29465f2 100644 --- a/server/database/migrations/20170726224533-create-message-table.js +++ b/server/database/migrations/20170726224533-create-message-table.js @@ -26,7 +26,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('messages') }, } diff --git a/server/database/migrations/20170726224543-create-conversations-animal-table.js b/server/database/migrations/20170726224543-create-conversations-animal-table.js index 76099992..5791e5e5 100644 --- a/server/database/migrations/20170726224543-create-conversations-animal-table.js +++ b/server/database/migrations/20170726224543-create-conversations-animal-table.js @@ -21,7 +21,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('conversationsAnimals') }, } diff --git a/server/database/migrations/20170729225227-add-user-delete-cascades.js b/server/database/migrations/20170729225227-add-user-delete-cascades.js index 4f29d455..f6317b40 100644 --- a/server/database/migrations/20170729225227-add-user-delete-cascades.js +++ b/server/database/migrations/20170729225227-add-user-delete-cascades.js @@ -1,5 +1,5 @@ module.exports = { - up: (queryInterface) => { + up: queryInterface => { queryInterface.addConstraint('animals', ['userId'], { name: 'animal_user_id_fkey', type: 'FOREIGN KEY', @@ -66,7 +66,7 @@ module.exports = { onUpdate: 'CASCADE', }) }, - down: (queryInterface) => { + down: queryInterface => { queryInterface.removeConstraint('animals', 'animal_user_id_fkey') queryInterface.removeConstraint('slots', 'slot_place_id_fkey') queryInterface.removeConstraint('slots', 'slot_event_id_fkey') diff --git a/server/database/migrations/20170730191945-add-activity-table.js b/server/database/migrations/20170730191945-add-activity-table.js index 5c4e8cb7..dac7acd4 100644 --- a/server/database/migrations/20170730191945-add-activity-table.js +++ b/server/database/migrations/20170730191945-add-activity-table.js @@ -35,7 +35,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('activities') }, } diff --git a/server/database/migrations/20170808101608-rename-image-association-table.js b/server/database/migrations/20170808101608-rename-image-association-table.js index 2ed07651..368657b7 100644 --- a/server/database/migrations/20170808101608-rename-image-association-table.js +++ b/server/database/migrations/20170808101608-rename-image-association-table.js @@ -1,12 +1,12 @@ module.exports = { - up: (queryInterface) => { + up: queryInterface => { return Promise.all([ queryInterface.renameTable('resourcesImages', 'objectsImages'), queryInterface.renameColumn('objectsImages', 'resourceName', 'objectType'), queryInterface.renameColumn('objectsImages', 'resourceId', 'objectId'), ]) }, - down: (queryInterface) => { + down: queryInterface => { return Promise.all([ queryInterface.renameColumn('objectsImages', 'objectType', 'resourceName'), queryInterface.renameColumn('objectsImages', 'objectId', 'resourceId'), diff --git a/server/database/migrations/20170813131735-create-meeting-table.js b/server/database/migrations/20170813131735-create-meeting-table.js index f8524eb6..d0e97e96 100644 --- a/server/database/migrations/20170813131735-create-meeting-table.js +++ b/server/database/migrations/20170813131735-create-meeting-table.js @@ -28,7 +28,7 @@ module.exports = { }, }) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.dropTable('meetings') }, } diff --git a/server/database/seeders/20170614114641-create-admin.js b/server/database/seeders/20170614114641-create-admin.js index bd55897d..1161bd5f 100644 --- a/server/database/seeders/20170614114641-create-admin.js +++ b/server/database/seeders/20170614114641-create-admin.js @@ -1,18 +1,18 @@ module.exports = { - up: (queryInterface) => { + up: queryInterface => { return queryInterface.bulkInsert('users', [{ createdAt: new Date, updatedAt: new Date, firstname: 'Boo Boo', lastname: 'Bamboo', - password: '$2a$10$Loa5/JpAso9ZpVtL1EYrT.4CrFSkblu2nqtltJYyUF5qBd/E3Deru', // adminadmin + password: '$2a$10$Loa5/JpAso9ZpVtL1EYrT.4CrFSkblu2nqtltJYyUF5qBd/E3Deru', // Adminadmin email: 'admin@admin.com', isAdmin: true, isParticipant: false, isActive: true, }]) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.bulkDelete('users', [{ email: [ 'admin@admin.com', diff --git a/server/database/seeders/20170712120306-create-static-pages.js b/server/database/seeders/20170712120306-create-static-pages.js index 1ab112cf..8bb006c0 100644 --- a/server/database/seeders/20170712120306-create-static-pages.js +++ b/server/database/seeders/20170712120306-create-static-pages.js @@ -9,7 +9,7 @@ function makePage(title, slug) { } module.exports = { - up: (queryInterface) => { + up: queryInterface => { return queryInterface.bulkInsert('pages', [ makePage('About', 'about'), makePage('Contact', 'contact'), @@ -23,7 +23,7 @@ module.exports = { makePage('Ticket', 'ticket-payment'), ]) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.bulkDelete('pages', [{ slug: [ 'about', diff --git a/server/database/seeders/20170723191450-more-static-pages.js b/server/database/seeders/20170723191450-more-static-pages.js index f87e22a9..ac99e9cd 100644 --- a/server/database/seeders/20170723191450-more-static-pages.js +++ b/server/database/seeders/20170723191450-more-static-pages.js @@ -9,7 +9,7 @@ function makePage(title, slug) { } module.exports = { - up: (queryInterface) => { + up: queryInterface => { return queryInterface.bulkInsert('pages', [ makePage('Calendar (public)', 'calendar-public'), makePage('Calendar', 'calendar'), @@ -18,7 +18,7 @@ module.exports = { makePage('New Event', 'new-event'), ]) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.bulkDelete('pages', [{ slug: [ 'calendar-public', diff --git a/server/database/seeders/20170803134020-home-video-page.js b/server/database/seeders/20170803134020-home-video-page.js index ecc88775..d3aaf1fc 100644 --- a/server/database/seeders/20170803134020-home-video-page.js +++ b/server/database/seeders/20170803134020-home-video-page.js @@ -1,5 +1,5 @@ module.exports = { - up: (queryInterface) => { + up: queryInterface => { return queryInterface.bulkInsert('pages', [{ createdAt: new Date, isRemovable: false, @@ -8,7 +8,7 @@ module.exports = { updatedAt: new Date, }]) }, - down: (queryInterface) => { + down: queryInterface => { return queryInterface.bulkDelete('pages', [{ slug: [ 'home-with-video', diff --git a/server/handlers/animal.js b/server/handlers/animal.js index e0d4fb76..e6f1e6a5 100644 --- a/server/handlers/animal.js +++ b/server/handlers/animal.js @@ -6,6 +6,6 @@ export function deleteAnimals(where) { where, }) .then(() => resolve()) - .catch((err) => reject(err)) + .catch(err => reject(err)) }) } diff --git a/server/handlers/base.js b/server/handlers/base.js index 04b32e42..a0d14561 100644 --- a/server/handlers/base.js +++ b/server/handlers/base.js @@ -6,7 +6,7 @@ export function deleteObjects(model, where, include, associations) { }) .then(associations) .then(() => resolve()) - .catch((err) => reject(err)) + .catch(err => reject(err)) }) } diff --git a/server/handlers/image.js b/server/handlers/image.js index 286eb16c..3a2f622b 100644 --- a/server/handlers/image.js +++ b/server/handlers/image.js @@ -2,7 +2,7 @@ import Image from '../models/image' export function updateImagesForObject(resource, images) { return new Promise((resolve, reject) => { - // remove images when needed + // Remove images when needed const keptImages = images.filter(img => img.id) const keptImageIds = keptImages.map(img => img.id) @@ -22,7 +22,7 @@ export function updateImagesForObject(resource, images) { return Promise.all(removePromises) }) - // add new images when given + // Add new images when given const newImages = images.filter(img => !img.id) const addNewImagesPromise = Promise.all(newImages.map(image => { @@ -37,7 +37,7 @@ export function updateImagesForObject(resource, images) { addNewImagesPromise, ]) .then(() => resolve()) - .catch((err) => reject(err)) + .catch(err => reject(err)) }) } @@ -60,6 +60,6 @@ export function deleteImagesForObject(resource) { }) .then(() => resolve()) }) - .catch((err) => reject(err)) + .catch(err => reject(err)) }) } diff --git a/server/helpers/logger.js b/server/helpers/logger.js index e2fac5ae..7bb8e3e2 100644 --- a/server/helpers/logger.js +++ b/server/helpers/logger.js @@ -1,6 +1,6 @@ import winston from 'winston' -const { format } = winston; +const { format } = winston export default winston.createLogger({ format: format.combine( diff --git a/server/helpers/mailTemplate.js b/server/helpers/mailTemplate.js index cd0f00f6..6265da29 100644 --- a/server/helpers/mailTemplate.js +++ b/server/helpers/mailTemplate.js @@ -9,8 +9,8 @@ const TEMPLATES_PATH = 'mails' function generateTemplateString(template) { const sanitized = template - .replace(/\$\{([\s]*[^;\s\{]+[\s]*)\}/g, (_, match) => { - return `\$\{map.${match.trim()}\}` + .replace(/\$\{([\s]*[^;\s{]+[\s]*)\}/g, (_, match) => { + return `$\{map.${match.trim()}}` }) .replace(/(\$\{(?!map\.)[^}]+\})/g, '') @@ -39,7 +39,7 @@ function sendMail(locals, subject, receiver, templateName, sender) { return new Promise((resolve, reject) => { const mergedLocals = Object.assign({}, locals, { config }) textTemplate(`${TEMPLATES_PATH}/${templateName}.txt`, mergedLocals) - .then((text) => { + .then(text => { const mailOptions = { subject, text, @@ -55,7 +55,7 @@ function sendMail(locals, subject, receiver, templateName, sender) { return resolve() } - return mail.sendMail(mailOptions, (err) => { + return mail.sendMail(mailOptions, err => { if (err) { reject(err) return diff --git a/server/index.js b/server/index.js index 8993cf8d..db03d2d2 100644 --- a/server/index.js +++ b/server/index.js @@ -10,8 +10,6 @@ import marked from 'marked' import methodOverride from 'method-override' import morgan from 'morgan' import path from 'path' -import sequelize from 'sequelize' -import winston from 'winston' import logger from './helpers/logger' diff --git a/server/middlewares/upload.js b/server/middlewares/upload.js index 93474529..fdcb5082 100644 --- a/server/middlewares/upload.js +++ b/server/middlewares/upload.js @@ -58,7 +58,7 @@ const upload = multer({ }).array('images') export default function(req, res, next) { - upload(req, res, (err) => { + upload(req, res, err => { if (err) { return next(err) } diff --git a/server/models/image.js b/server/models/image.js index ca47665d..9afadba5 100644 --- a/server/models/image.js +++ b/server/models/image.js @@ -26,9 +26,9 @@ const Image = db.sequelize.define('image', { }, }) -Image.hook('beforeValidate', (image) => { +Image.hook('beforeValidate', image => { if (!image.fileName) { - return sequelize.Promise.reject( + return Promise.reject( new Error('Invalid image object') ) } @@ -42,11 +42,11 @@ Image.hook('beforeValidate', (image) => { resolve() }) - .catch((err) => reject(err)) + .catch(err => reject(err)) }) }) -Image.hook('beforeDestroy', (image) => { +Image.hook('beforeDestroy', image => { return deleteObjects([ image.largeImageUrl, image.mediumImageUrl, diff --git a/server/models/user.js b/server/models/user.js index cea00aba..c29aeb03 100644 --- a/server/models/user.js +++ b/server/models/user.js @@ -96,7 +96,7 @@ const User = db.sequelize.define('user', { }, }) -// instance methods +// Instance methods User.prototype.comparePasswords = function compare(password) { return bcrypt.compareSync(password, this.password) } diff --git a/server/routes/index.js b/server/routes/index.js index 786cc1d1..f359d1f5 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -34,7 +34,7 @@ router.get('/health-check', (req, res) => res.send('ok') ) -// public API routes +// Public API routes router.use('/auth', authRoutes) @@ -49,7 +49,7 @@ router.route('/preview') eventPreviewController.findAll ) -// private API routes +// Private API routes router.use('/*', (req, res, next) => { passport.authenticate('jwt', { session: false }, (err, user) => { @@ -82,7 +82,7 @@ router.route('/upload') router.route('/activity') .get(activityController.findAll) -// admin API routes +// Admin API routes router.use(onlyAdmin) @@ -97,7 +97,7 @@ router.use((err, req, res, next) => { } if (err instanceof expressValidation.ValidationError) { - // validation error contains errors which is an + // Validation error contains errors which is an // array of error each containing message[] const unifiedMessage = err.errors.map( error => error.messages.join('. ') diff --git a/server/services/activity.js b/server/services/activity.js index 0fde74c2..ed17515f 100644 --- a/server/services/activity.js +++ b/server/services/activity.js @@ -110,7 +110,7 @@ export function addRequestPlaceActivity(data) { export function addCreateMeetingActivity(data) { const { place, animalId, userId } = data - // send a message to creating user + // Send a message to creating user const activity = { animalId, objectId: place.id, @@ -128,7 +128,7 @@ export function addCreateMeetingActivity(data) { export function addJoinMeetingActivity(data) { return new Promise((resolve, reject) => { - // send a message to all currently participating users + // Send a message to all currently participating users const activities = data.receivingAnimals.map(animal => { return { animalId: data.joiningAnimal.id, @@ -137,7 +137,7 @@ export function addJoinMeetingActivity(data) { } }) - // send a message to joining user + // Send a message to joining user const ownActivity = { animalId: data.joiningAnimal.id, type: 'JOIN_RANDOM_MEETING_ME', diff --git a/server/services/checkout.js b/server/services/checkout.js index 5552d7b3..5be67485 100644 --- a/server/services/checkout.js +++ b/server/services/checkout.js @@ -13,7 +13,7 @@ function generateRandomPaymentId() { function paypalCheckout(user, product) { return new Promise((resolve, reject) => { createPayment(product) - .then((paypalResponse) => { + .then(paypalResponse => { return User.update({ paymentId: paypalResponse.payment.id, }, { @@ -51,7 +51,7 @@ function transferCheckout(user, product) { limit: 1, returning: true, }) - .then((data) => { + .then(data => { const updatedUser = data[1][0] sendWireTransferDetails({ paymentId, diff --git a/server/services/imageVersions.js b/server/services/imageVersions.js index b5c7c536..00f8bb11 100644 --- a/server/services/imageVersions.js +++ b/server/services/imageVersions.js @@ -102,7 +102,7 @@ export function createAndUploadImageVersions(fileName) { return createImageVersions(fileName, filePath) .then(resizeResults => { - // remove temporary file + // Remove temporary file fs.unlink(filePath) resolve(prepareImageData(resizeResults)) diff --git a/server/services/passport.js b/server/services/passport.js index 4260b096..5d04103f 100644 --- a/server/services/passport.js +++ b/server/services/passport.js @@ -18,7 +18,7 @@ const tokenOptions = { const strategy = new passportJwt.Strategy(options, (payload, next) => { User.findById(payload.user.id) - .then((user) => { + .then(user => { next(null, user) return null }) diff --git a/server/services/s3.js b/server/services/s3.js index 3188a233..438f740f 100644 --- a/server/services/s3.js +++ b/server/services/s3.js @@ -28,7 +28,7 @@ function request(method, Key, customParams, customMethod) { let promise if (customMethod) { - // wrap this around a Promise since S3 SDK is not doing this for us + // Wrap this around a Promise since S3 SDK is not doing this for us promise = new Promise((customResolve, customReject) => { s3[method](customMethod, params, (err, data) => { if (err) { diff --git a/webpack.config.babel.js b/webpack.config.babel.js index 0a70e434..6c3cafdb 100644 --- a/webpack.config.babel.js +++ b/webpack.config.babel.js @@ -20,7 +20,7 @@ function getPath(filePath) { module.exports = (env, options) => { const isDevelopment = (options.mode === 'development') const filename = isDevelopment ? '[name]' : '[name]-[contenthash:4]' - const exclude = new RegExp(NODE_MODULES_NAME); + const exclude = new RegExp(NODE_MODULES_NAME) return { entry: { From 2ea76cb0e6853fe499db997a5379905576a23241 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 17:45:40 +0100 Subject: [PATCH 07/77] Update all server depedencies, module API changes --- .babelrc | 1 + package-lock.json | 1174 ++++++++++++++++++++++++++++++++--- package.json | 18 +- server/database/index.js | 2 +- server/index.js | 7 +- server/models/image.js | 4 +- server/services/passport.js | 6 +- 7 files changed, 1126 insertions(+), 86 deletions(-) diff --git a/.babelrc b/.babelrc index fed45897..d40d44f6 100644 --- a/.babelrc +++ b/.babelrc @@ -9,6 +9,7 @@ "@babel/preset-react" ], "plugins": [ + "add-module-exports", "@babel/plugin-proposal-class-properties", "@babel/plugin-proposal-object-rest-spread" ] diff --git a/package-lock.json b/package-lock.json index cc23ca2b..2f10422e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1470,8 +1470,7 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", @@ -1492,17 +1491,20 @@ "normalize-path": "^2.1.1" } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -1711,6 +1713,53 @@ "postcss-value-parser": "^3.3.1" } }, + "aws-sdk": { + "version": "2.392.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.392.0.tgz", + "integrity": "sha512-mwIJj0u8XGXepJJ66kFG6uXrZOrcPauESoHAHZfr28i2qRAnemM4B3FlWleHy6Y8pxfW6UBe2++/j2+Q+LuJhg==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.8", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + } + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1761,6 +1810,15 @@ "util.promisify": "^1.0.0" } }, + "babel-plugin-add-module-exports": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.0.tgz", + "integrity": "sha512-m0sMxPL4FaN2K69GQgaRJa4Ny15qKSdoknIcpN+gz+NaJlAW9pge/povs13tPYsKDboflrEQC+/3kfIsONBTaw==", + "dev": true, + "requires": { + "chokidar": "^2.0.4" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -1870,8 +1928,7 @@ "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "basic-auth": { "version": "2.0.1", @@ -1881,6 +1938,436 @@ "safe-buffer": "5.1.2" } }, + "bcrypt": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.3.tgz", + "integrity": "sha512-4EuzUo6K790QC3uq/ogzy9w2Hc7XDIBoEndU5y7l7YaEAwQF8vyFqv6tC30+gOBZvyxk3F632xzKBQoLNz2pjg==", + "requires": { + "nan": "2.12.1", + "node-pre-gyp": "0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.3.4", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "minizlib": { + "version": "1.1.1", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true + }, + "npm-packlist": { + "version": "1.1.12", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true + } + } + }, + "readable-stream": { + "version": "2.3.5", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.6.0", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1902,6 +2389,20 @@ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, + "bindings": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", + "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==" + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", @@ -2109,18 +2610,45 @@ "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-writer": { "version": "2.0.0", @@ -2145,6 +2673,38 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -2376,8 +2936,7 @@ "chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" }, "chrome-trace-event": { "version": "1.0.0", @@ -2541,8 +3100,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collapse-white-space": { "version": "1.0.4", @@ -2564,7 +3122,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz", "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==", - "dev": true, "requires": { "color-convert": "^1.9.1", "color-string": "^1.5.2" @@ -2682,7 +3239,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -2716,8 +3272,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "constantinople": { "version": "3.1.2", @@ -3206,6 +3761,14 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-diff": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", @@ -3214,8 +3777,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -3282,8 +3844,7 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.2", @@ -3311,6 +3872,11 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -3321,6 +3887,38 @@ "kuler": "1.0.x" } }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -3472,6 +4070,14 @@ "safer-buffer": "^2.1.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", + "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3535,7 +4141,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -3880,6 +4485,11 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3938,6 +4548,14 @@ } } }, + "express-validation": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/express-validation/-/express-validation-1.0.2.tgz", + "integrity": "sha1-fVid07JXxVs+AEZltsacsSzCsUI=", + "requires": { + "lodash": "^4.9.0" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4319,6 +4937,24 @@ "readable-stream": "^2.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-copy-file-sync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz", + "integrity": "sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ==" + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "^2.2.1" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -4918,7 +5554,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -4933,14 +5568,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4949,7 +5582,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4960,7 +5592,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5021,6 +5652,11 @@ "version": "git+https://github.com/adzialocha/gif-stream.git#f1abe18042b5d8a24d74a7e7bc07a47c50a9d413", "from": "git+https://github.com/adzialocha/gif-stream.git#0.2.0" }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -5258,8 +5894,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", @@ -5384,6 +6019,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoek": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", + "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==" + }, "hoist-non-react-statics": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz", @@ -5496,6 +6136,11 @@ "sshpk": "^1.7.0" } }, + "http-status": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.3.1.tgz", + "integrity": "sha512-PcI9NUm6EUOhHlaxYABCqDQQWS7IgoBZ/PmPkhuzj+oR01ffjv3EJfKnnWJZcUhILtUh6/NdJi1Zs/mIr6v8DA==" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -5528,8 +6173,7 @@ "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, "ienoopen": { "version": "1.0.0", @@ -5662,8 +6306,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "6.2.1", @@ -5936,8 +6579,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "4.0.0", @@ -6121,6 +6763,14 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "requires": { + "punycode": "2.x.x" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -6148,6 +6798,21 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "joi": { + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz", + "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==", + "requires": { + "hoek": "6.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + }, "js-base64": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", @@ -6231,6 +6896,29 @@ "minimist": "^1.2.0" } }, + "jsonwebtoken": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", + "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", + "requires": { + "jws": "^3.1.5", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -6261,6 +6949,25 @@ "array-includes": "^3.0.3" } }, + "jwa": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz", + "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.10", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", + "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", + "requires": { + "jwa": "^1.1.5", + "safe-buffer": "^5.0.1" + } + }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", @@ -6487,11 +7194,46 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, "lodash.isempty": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -6510,6 +7252,11 @@ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -6815,9 +7562,9 @@ } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" }, "mime-db": { "version": "1.37.0", @@ -6838,6 +7585,11 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, "mini-css-extract-plugin": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", @@ -6886,8 +7638,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minimist-options": { "version": "3.0.2", @@ -6899,6 +7650,23 @@ "is-plain-obj": "^1.1.0" } }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "^2.2.1" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -6960,7 +7728,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -6968,8 +7735,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -7017,6 +7783,21 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.1.tgz", + "integrity": "sha512-zzOLNRxzszwd+61JFuAo0fxdQfvku12aNJgnla0AQ+hHxFmfc/B7jBVuPr5Rmvu46Jze/iJrFpSOsD7afO8SDw==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -7026,8 +7807,7 @@ "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" }, "nanomatch": { "version": "1.2.13", @@ -7048,6 +7828,11 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7076,6 +7861,14 @@ "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" }, + "node-abi": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.1.tgz", + "integrity": "sha512-oDbFc7vCFx0RWWCweTer3hFm1u+e60N5FtGnmRV6QqvgATGFH/XRR6vqWIeBVosCYCqt6YdIr2L0exLZuEdVcQ==", + "requires": { + "semver": "^5.4.1" + } + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -7262,6 +8055,11 @@ } } }, + "nodemailer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-5.1.1.tgz", + "integrity": "sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ==" + }, "nodemon": { "version": "1.18.9", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.9.tgz", @@ -7297,6 +8095,11 @@ } } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -7363,7 +8166,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -7389,8 +8191,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.9.0", @@ -7515,7 +8316,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -7575,8 +8375,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "3.1.0", @@ -7764,6 +8563,29 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "passport": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.0.tgz", + "integrity": "sha1-xQlWkTR71a07XhgCOMORTRbwWBE=", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-jwt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.0.tgz", + "integrity": "sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg==", + "requires": { + "jsonwebtoken": "^8.2.0", + "passport-strategy": "^1.0.0" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", @@ -7839,6 +8661,20 @@ } } }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "paypal-rest-sdk": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/paypal-rest-sdk/-/paypal-rest-sdk-1.8.1.tgz", + "integrity": "sha512-Trj2GuPn10GqpICAxQh5wjxuDT7rq7DMOkvyatz05wI5xPGmqXN7UC0WfDSF9WSBs4YdcWZP0g+nY+sOdaFggw==", + "requires": { + "buffer-crc32": "^0.2.3", + "semver": "^5.0.3" + } + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -8568,6 +9404,50 @@ "xtend": "^4.0.0" } }, + "prebuild-install": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.2.tgz", + "integrity": "sha512-4e8VJnP3zJdZv/uP0eNWmr2r9urp4NECw7Mt1OSAi3rcLrbBRxGiAkfUFtre2MhQ5wfREAjRV+K1gubvs/GPsA==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.2.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + } + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -8861,8 +9741,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -8887,8 +9766,7 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { "version": "0.2.1", @@ -8902,6 +9780,11 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, + "random-animal-name-generator": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/random-animal-name-generator/-/random-animal-name-generator-0.1.0.tgz", + "integrity": "sha512-7uPg026gW0XNxw1qBED4eGtAOcnvv9T4fD59X9BlhlauHdt42CDss760jAOOvjvcAlPqT6j3d4gNHiMjJ3XSeg==" + }, "randombytes": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", @@ -8951,7 +9834,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -9987,8 +10869,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "scheduler": { "version": "0.12.0", @@ -10067,6 +10948,13 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + } } }, "sequelize": { @@ -10108,6 +10996,14 @@ } } }, + "sequelize-slugify": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sequelize-slugify/-/sequelize-slugify-0.6.1.tgz", + "integrity": "sha512-xaIPLQ2HUqAzBMPdx7fdr8j06xOCO+OzZrAZ3+pWAekA9MBr4rqTTjvwFp7n5tLXTWDYnWerLsmD/RN351wT9Q==", + "requires": { + "sluglife": "^0.9.7" + } + }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", @@ -10128,8 +11024,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.0", @@ -10193,6 +11088,40 @@ } } }, + "sharp": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.21.3.tgz", + "integrity": "sha512-5qZk8r+YgfyztLEKkNez20Wynq/Uh1oNyP5T/3gTYwt2lBYGs9iDs5m0yVsZEPm8eVBbAJhS08J1wp/g+Ai1Qw==", + "requires": { + "bindings": "^1.3.1", + "color": "^3.1.0", + "detect-libc": "^1.0.3", + "fs-copy-file-sync": "^1.1.1", + "nan": "^2.12.1", + "npmlog": "^4.1.2", + "prebuild-install": "^5.2.2", + "semver": "^5.6.0", + "simple-get": "^3.0.3", + "tar": "^4.4.8", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -10216,8 +11145,22 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.0.3.tgz", + "integrity": "sha512-Wvre/Jq5vgoz31Z9stYWPLn0PqRqmBDpFSdypAnHu5AvRVCYPRYGnvryNLiXu8GOBNDH82J2FRHUGMjjHUpXFw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "simple-swizzle": { "version": "0.2.2", @@ -10256,6 +11199,15 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "sluglife": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/sluglife/-/sluglife-0.9.7.tgz", + "integrity": "sha512-kFf6ox1POx/wCc7jZsyqFBXRz7QE+KziXb6uFshNHCBE+4DBVFjl5BCpcA6ruk6r0XSFngy37aSaRsqLrq5wQw==", + "requires": { + "lodash.defaults": "^4.2.0", + "unicode": ">=11.0.1" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -10589,6 +11541,11 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -10598,7 +11555,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -10628,7 +11584,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -10660,8 +11615,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-search": { "version": "0.1.0", @@ -11171,6 +12125,42 @@ "inherits": "2" } }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -11363,6 +12353,11 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -11416,6 +12411,14 @@ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, + "topo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", + "requires": { + "hoek": "6.x.x" + } + }, "toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", @@ -11519,7 +12522,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -11551,8 +12553,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "ua-parser-js": { "version": "0.7.19", @@ -11637,6 +12638,11 @@ "xtend": "^4.0.1" } }, + "unicode": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-11.0.1.tgz", + "integrity": "sha512-+cHtykLb+eF1yrSLWTwcYBrqJkTfX7Quoyg7Juhe6uylF43ZbMdxMuSHNYlnyLT8T7POAvavgBthzUF9AIaQvQ==" + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -12182,11 +13188,15 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -12318,8 +13328,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", @@ -12358,6 +13367,20 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -12372,8 +13395,7 @@ "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, "yargs": { "version": "12.0.5", diff --git a/package.json b/package.json index abf83e27..8743719e 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "lint:js": "eslint --ignore-path .gitignore ./", "lint:scss": "stylelint ./app/styles", "postinstall": "npm run assets:build", - "serve": "nodemon --watch server --watch common --exec cross-env NODE_ENV=development babel-node server/index.js", + "serve": "nodemon --watch server --watch common --exec cross-env NODE_ENV=development babel-node server/index.js --source-maps inline", "start": "cross-env NODE_ENV=production babel-node server/index.js", "test": "echo \"Error: no test specified\" && exit 1" }, @@ -42,6 +42,7 @@ "autoprefixer": "^9.4.6", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", + "babel-plugin-add-module-exports": "^1.0.0", "cross-env": "^5.2.0", "css-loader": "^2.1.0", "cssnano": "^4.1.8", @@ -63,6 +64,8 @@ "webpack-cli": "^3.2.1" }, "dependencies": { + "aws-sdk": "^2.392.0", + "bcrypt": "^3.0.3", "body-parser": "^1.18.3", "classnames": "^2.2.6", "compression": "^1.7.3", @@ -71,19 +74,30 @@ "create-react-class": "^15.6.3", "dotenv": "^6.2.0", "express": "^4.16.4", + "express-validation": "^1.0.2", "gif-stream": "git+https://github.com/adzialocha/gif-stream.git#0.2.0", "helmet": "^3.15.0", + "http-status": "^1.3.1", "immutability-helper": "^2.9.0", "isomorphic-fetch": "^2.2.1", + "joi": "^14.3.1", + "jsonwebtoken": "^8.4.0", "jwt-decode": "^2.2.0", "keymirror": "^0.1.1", "marked": "^0.6.0", "method-override": "^3.0.0", + "mime": "^2.4.0", "moment-timezone": "^0.5.23", "morgan": "^1.9.1", + "multer": "^1.4.1", + "nodemailer": "^5.1.1", "normalize.css": "^8.0.1", + "passport": "^0.4.0", + "passport-jwt": "^4.0.0", + "paypal-rest-sdk": "^1.8.1", "pg": "^7.8.0", "pug": "^2.0.3", + "random-animal-name-generator": "^0.1.0", "react": "^16.7.0", "react-dom": "^16.7.0", "react-google-maps": "^9.4.5", @@ -101,6 +115,8 @@ "redux-logger": "^3.0.6", "redux-thunk": "^2.3.0", "sequelize": "^4.42.0", + "sequelize-slugify": "^0.6.1", + "sharp": "^0.21.3", "winston": "^3.1.0" } } diff --git a/server/database/index.js b/server/database/index.js index ffae8c4f..96b3b9bc 100644 --- a/server/database/index.js +++ b/server/database/index.js @@ -12,7 +12,7 @@ const sequelize = new Sequelize(process.env.DATABASE_URL, { operatorsAliases: false, }) -export { +export default { Sequelize, sequelize, } diff --git a/server/index.js b/server/index.js index db03d2d2..61a9ae40 100644 --- a/server/index.js +++ b/server/index.js @@ -8,9 +8,11 @@ import fs from 'fs' import helmet from 'helmet' import marked from 'marked' import methodOverride from 'method-override' +import moment from 'moment-timezone' import morgan from 'morgan' import path from 'path' +import config from '../common/config' import logger from './helpers/logger' const ASSETS_FOLDER_NAME = 'static' @@ -63,7 +65,7 @@ marked.setOptions({ // Moment settings // @TODO Check if we really want to keep using moment-js here -// moment.tz.setDefault(config.timezone) +moment.tz.setDefault(config.timezone) // Check database connection const db = require('./database') @@ -110,8 +112,7 @@ if (process.env.NODE_ENV === 'production') { } // Mount all API routes -// @TODO -// app.use('/api', require('./routes')) +app.use('/api', require('./routes')) // Static assets hosting app.use(`/${ASSETS_FOLDER_NAME}`, express.static( diff --git a/server/models/image.js b/server/models/image.js index 9afadba5..dca07861 100644 --- a/server/models/image.js +++ b/server/models/image.js @@ -26,7 +26,7 @@ const Image = db.sequelize.define('image', { }, }) -Image.hook('beforeValidate', image => { +Image.addHook('beforeValidate', image => { if (!image.fileName) { return Promise.reject( new Error('Invalid image object') @@ -46,7 +46,7 @@ Image.hook('beforeValidate', image => { }) }) -Image.hook('beforeDestroy', image => { +Image.addHook('beforeDestroy', image => { return deleteObjects([ image.largeImageUrl, image.mediumImageUrl, diff --git a/server/services/passport.js b/server/services/passport.js index 5d04103f..39ed5380 100644 --- a/server/services/passport.js +++ b/server/services/passport.js @@ -1,13 +1,13 @@ import jwt from 'jsonwebtoken' import passport from 'passport' -import passportJwt from 'passport-jwt' +import { Strategy, ExtractJwt } from 'passport-jwt' import User from '../models/user' const TOKEN_EXPIRY = '96 hours' const options = { - jwtFromRequest: passportJwt.ExtractJwt.fromAuthHeader(), + jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'), secretOrKey: process.env.JWT_SECRET, } @@ -16,7 +16,7 @@ const tokenOptions = { expiresIn: TOKEN_EXPIRY, } -const strategy = new passportJwt.Strategy(options, (payload, next) => { +const strategy = new Strategy(options, (payload, next) => { User.findById(payload.user.id) .then(user => { next(null, user) From 4818f28e88c72b4d0dccedc59a6bce2b4b594f2c Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 18:03:08 +0100 Subject: [PATCH 08/77] Replace react-router-redux with connected-react-router for react-router v4 --- app/scripts/index.js | 11 ++++++----- app/scripts/middlewares/scroll.js | 2 +- app/scripts/reducers/index.js | 8 +++----- app/scripts/store.js | 6 +++--- package-lock.json | 24 +++++++++++++++++++----- package.json | 2 +- 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/app/scripts/index.js b/app/scripts/index.js index ebda5232..8fe49d75 100644 --- a/app/scripts/index.js +++ b/app/scripts/index.js @@ -1,21 +1,22 @@ import '../styles/app.scss' -import moment from 'moment-timezone' import React from 'react' -import { ConnectedRouter } from 'react-router-redux' -import { createBrowserHistory } from 'history' +import moment from 'moment-timezone' +import { ConnectedRouter } from 'connected-react-router' import { Provider } from 'react-redux' +import { createBrowserHistory } from 'history' import { render } from 'react-dom' import config from '../../common/config' import configureStore from './store' import flash from './actions/flash' -import Routes from './routes' -import { App } from './views' import { checkExistingToken } from './actions/auth' import { getItem, hasItem } from './services/storage' import { translate } from '../../common/services/i18n' +import Routes from './routes' +import { App } from './views' + moment.tz.setDefault(config.timezone) const initialState = {} diff --git a/app/scripts/middlewares/scroll.js b/app/scripts/middlewares/scroll.js index b9dcdca2..1a2d129a 100644 --- a/app/scripts/middlewares/scroll.js +++ b/app/scripts/middlewares/scroll.js @@ -2,7 +2,7 @@ import Scroll from 'react-scroll' export const SCROLL_TO_TOP = Symbol('app-scroll-to-top') -export default next => action => { +export default store => next => action => { // eslint-disable-line no-unused-vars if (SCROLL_TO_TOP in action) { Scroll.animateScroll.scrollToTop() } diff --git a/app/scripts/reducers/index.js b/app/scripts/reducers/index.js index 0c19b176..472956a6 100644 --- a/app/scripts/reducers/index.js +++ b/app/scripts/reducers/index.js @@ -1,5 +1,5 @@ import { combineReducers } from 'redux' -import { routerReducer as routing } from 'react-router-redux' +import { connectRouter } from 'connected-react-router' import api from './api' import auth from './auth' @@ -19,7 +19,7 @@ import ticket from './ticket' import user from './user' import userStatus from './userStatus' -const rootReducer = combineReducers({ +export default history => combineReducers({ api, auth, drawer, @@ -33,11 +33,9 @@ const rootReducer = combineReducers({ page, paginatedList, resources, - routing, + router: connectRouter(history), slots, ticket, user, userStatus, }) - -export default rootReducer diff --git a/app/scripts/store.js b/app/scripts/store.js index a9444ef5..c46aa2f2 100644 --- a/app/scripts/store.js +++ b/app/scripts/store.js @@ -1,7 +1,7 @@ -import { createStore, applyMiddleware } from 'redux' import thunk from 'redux-thunk' import { createLogger } from 'redux-logger' -import { routerMiddleware } from 'react-router-redux' +import { createStore, applyMiddleware } from 'redux' +import { routerMiddleware } from 'connected-react-router' import api from './middlewares/api' import apiError from './middlewares/apiError' @@ -32,7 +32,7 @@ export default function configureStore(initialState, history) { } store = createStore( - reducers, + reducers(history), applyMiddleware(...middleware), ) diff --git a/package-lock.json b/package-lock.json index 2f10422e..6722dc1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3260,6 +3260,15 @@ "xdg-basedir": "^3.0.0" } }, + "connected-react-router": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.2.2.tgz", + "integrity": "sha512-tPI3s7yYtnTt/XLoQFsQqIEQxdQCrsZltEdozjG7LPkOTNglJJ7WqUqnlnh9thC6ebavfaJoTtPa9G2EibuJbg==", + "requires": { + "immutable": "^3.8.1", + "seamless-immutable": "^7.1.3" + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -6206,6 +6215,11 @@ "invariant": "^2.2.0" } }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -9967,11 +9981,6 @@ } } }, - "react-router-redux": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz", - "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" - }, "react-scroll": { "version": "1.7.10", "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.7.10.tgz", @@ -10916,6 +10925,11 @@ } } }, + "seamless-immutable": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.4.tgz", + "integrity": "sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A==" + }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", diff --git a/package.json b/package.json index 8743719e..756ec644 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "body-parser": "^1.18.3", "classnames": "^2.2.6", "compression": "^1.7.3", + "connected-react-router": "^6.2.2", "cookie-parser": "^1.4.3", "cors": "^2.8.5", "create-react-class": "^15.6.3", @@ -105,7 +106,6 @@ "react-redux": "^6.0.0", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", - "react-router-redux": "^4.0.8", "react-scroll": "^1.7.10", "react-slider": "^0.11.2", "react-youtube": "^7.9.0", From 84702f4f8b992a3f8bf67bf7cd82e6d6c18cc4f0 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 18:10:34 +0100 Subject: [PATCH 09/77] Change route changes to new module --- app/scripts/actions/auth.js | 2 +- app/scripts/auth.js | 2 +- app/scripts/components/PaginatedListNavigation.js | 2 +- app/scripts/middlewares/apiError.js | 2 +- app/scripts/middlewares/redirect.js | 2 +- app/scripts/reducers/auth.js | 2 +- app/scripts/reducers/drawer.js | 2 +- app/scripts/reducers/resources.js | 2 +- app/scripts/reducers/ticket.js | 2 +- app/scripts/views/AdminPages.js | 2 +- app/scripts/views/AdminUsers.js | 2 +- app/scripts/views/Calendar.js | 2 +- app/scripts/views/ConversationsIndex.js | 2 +- app/scripts/views/PlacesIndex.js | 2 +- app/scripts/views/ResourcesIndex.js | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/scripts/actions/auth.js b/app/scripts/actions/auth.js index 817448a4..03fbf7f4 100644 --- a/app/scripts/actions/auth.js +++ b/app/scripts/actions/auth.js @@ -1,4 +1,4 @@ -import { routerActions } from 'react-router-redux' +import { routerActions } from 'connected-react-router' import ActionTypes from '../actionTypes' import flash from './flash' diff --git a/app/scripts/auth.js b/app/scripts/auth.js index d2720e4f..bf532eaf 100644 --- a/app/scripts/auth.js +++ b/app/scripts/auth.js @@ -1,5 +1,5 @@ import { connectedReduxRedirect } from 'redux-auth-wrapper/history4/redirect' -import { routerActions } from 'react-router-redux' +import { routerActions } from 'connected-react-router' import { redirectWhenUnauthenticated } from './actions/auth' diff --git a/app/scripts/components/PaginatedListNavigation.js b/app/scripts/components/PaginatedListNavigation.js index 4b18e849..becd70c9 100644 --- a/app/scripts/components/PaginatedListNavigation.js +++ b/app/scripts/components/PaginatedListNavigation.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { fetchList } from '../actions/paginatedList' diff --git a/app/scripts/middlewares/apiError.js b/app/scripts/middlewares/apiError.js index 36281bad..c024566c 100644 --- a/app/scripts/middlewares/apiError.js +++ b/app/scripts/middlewares/apiError.js @@ -1,4 +1,4 @@ -import { replace } from 'react-router-redux' +import { replace } from 'connected-react-router' import ActionTypes from '../actionTypes' import flash from '../actions/flash' diff --git a/app/scripts/middlewares/redirect.js b/app/scripts/middlewares/redirect.js index d26d2fc6..e749e39c 100644 --- a/app/scripts/middlewares/redirect.js +++ b/app/scripts/middlewares/redirect.js @@ -1,4 +1,4 @@ -import { push, replace } from 'react-router-redux' +import { push, replace } from 'connected-react-router' export const REDIRECT = Symbol('app-redirect') export const REPLACE = Symbol('app-replace') diff --git a/app/scripts/reducers/auth.js b/app/scripts/reducers/auth.js index 28b69636..044e47ce 100644 --- a/app/scripts/reducers/auth.js +++ b/app/scripts/reducers/auth.js @@ -1,5 +1,5 @@ import update from 'immutability-helper' -import { LOCATION_CHANGE } from 'react-router-redux' +import { LOCATION_CHANGE } from 'connected-react-router' import ActionTypes from '../actionTypes' import { setItem, removeItem } from '../services/storage' diff --git a/app/scripts/reducers/drawer.js b/app/scripts/reducers/drawer.js index 6c9e42ce..cae55b55 100644 --- a/app/scripts/reducers/drawer.js +++ b/app/scripts/reducers/drawer.js @@ -1,5 +1,5 @@ import update from 'immutability-helper' -import { LOCATION_CHANGE } from 'react-router-redux' +import { LOCATION_CHANGE } from 'connected-react-router' import ActionTypes from '../actionTypes' diff --git a/app/scripts/reducers/resources.js b/app/scripts/reducers/resources.js index a131dff2..a905104a 100644 --- a/app/scripts/reducers/resources.js +++ b/app/scripts/reducers/resources.js @@ -1,5 +1,5 @@ import update from 'immutability-helper' -import { LOCATION_CHANGE } from 'react-router-redux' +import { LOCATION_CHANGE } from 'connected-react-router' import ActionTypes from '../actionTypes' import randomId from '../utils/randomId' diff --git a/app/scripts/reducers/ticket.js b/app/scripts/reducers/ticket.js index e9638f29..b3c5a0bd 100644 --- a/app/scripts/reducers/ticket.js +++ b/app/scripts/reducers/ticket.js @@ -1,5 +1,5 @@ import update from 'immutability-helper' -import { LOCATION_CHANGE } from 'react-router-redux' +import { LOCATION_CHANGE } from 'connected-react-router' import ActionTypes from '../actionTypes' diff --git a/app/scripts/views/AdminPages.js b/app/scripts/views/AdminPages.js index 4e5254df..9430af24 100644 --- a/app/scripts/views/AdminPages.js +++ b/app/scripts/views/AdminPages.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' import { Link } from 'react-router-dom' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { deleteResource } from '../actions/resources' import { notification } from '../actions/flash' diff --git a/app/scripts/views/AdminUsers.js b/app/scripts/views/AdminUsers.js index 923390b6..ed10d409 100644 --- a/app/scripts/views/AdminUsers.js +++ b/app/scripts/views/AdminUsers.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' import { Link } from 'react-router-dom' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { deleteResource } from '../actions/resources' import { notification } from '../actions/flash' diff --git a/app/scripts/views/Calendar.js b/app/scripts/views/Calendar.js index 45c5f482..3a433d33 100644 --- a/app/scripts/views/Calendar.js +++ b/app/scripts/views/Calendar.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' import { Link } from 'react-router-dom' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { asInfiniteListCalendar } from '../containers' import { CuratedEventListItem, StaticPage } from '../components' diff --git a/app/scripts/views/ConversationsIndex.js b/app/scripts/views/ConversationsIndex.js index b9078741..b08cf54f 100644 --- a/app/scripts/views/ConversationsIndex.js +++ b/app/scripts/views/ConversationsIndex.js @@ -1,7 +1,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { asInfiniteList } from '../containers' import { ConversationListItem } from '../components' diff --git a/app/scripts/views/PlacesIndex.js b/app/scripts/views/PlacesIndex.js index f74064db..1ad986b8 100644 --- a/app/scripts/views/PlacesIndex.js +++ b/app/scripts/views/PlacesIndex.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' import { Link } from 'react-router-dom' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { asInfiniteList } from '../containers' import { CuratedPlaceListItem, StaticPage } from '../components' diff --git a/app/scripts/views/ResourcesIndex.js b/app/scripts/views/ResourcesIndex.js index 5930593f..7e930f09 100644 --- a/app/scripts/views/ResourcesIndex.js +++ b/app/scripts/views/ResourcesIndex.js @@ -2,7 +2,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { connect } from 'react-redux' import { Link } from 'react-router-dom' -import { push } from 'react-router-redux' +import { push } from 'connected-react-router' import { asInfiniteList } from '../containers' import { CuratedResourcesListItem, StaticPage } from '../components' From 7534030bd77d3636ec18cb100dd1eec72705df07 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 23 Jan 2019 19:03:09 +0100 Subject: [PATCH 10/77] Improve database migrations --- package-lock.json | 269 ++++++++++++++++++ package.json | 6 + server/database/config.js | 22 ++ server/database/index.js | 9 +- .../20170507115037-add-user-roles.js | 45 +-- .../20170614123925-create-page-table.js | 4 +- .../20170615224148-extend-user-table.js | 87 +++--- .../20170615232335-add-payment-details.js | 62 ++-- .../20170619142756-add-phone-to-user.js | 4 +- .../20170710210246-add-visitor-role.js | 4 +- .../20170710220314-password-reset-fields.js | 37 +-- .../20170712120420-add-removable-page-flag.js | 4 +- .../20170720173822-add-event-slot-relation.js | 4 +- ...0170722175816-add-from-to-dates-to-slot.js | 41 +-- .../20170723153354-add-delete-cascades.js | 118 ++++---- ...20170729225227-add-user-delete-cascades.js | 141 +++++---- .../seeders/20170614114641-create-admin.js | 2 +- 17 files changed, 585 insertions(+), 274 deletions(-) create mode 100644 server/database/config.js diff --git a/package-lock.json b/package-lock.json index 6722dc1c..f357c683 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1137,6 +1137,12 @@ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", "dev": true }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true + }, "@types/unist": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.2.tgz", @@ -3018,6 +3024,28 @@ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", "dev": true }, + "cli-color": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", + "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", + "dev": true, + "requires": { + "ansi-regex": "^2.1.1", + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.14", + "timers-ext": "^0.1.5" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -3246,6 +3274,16 @@ "typedarray": "^0.0.6" } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "configstore": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", @@ -3721,6 +3759,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4087,6 +4134,44 @@ "safe-buffer": "^5.0.1" } }, + "editorconfig": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", + "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", + "dev": true, + "requires": { + "@types/node": "^10.11.7", + "@types/semver": "^5.5.0", + "commander": "^2.19.0", + "lru-cache": "^4.1.3", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4219,11 +4304,55 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.47", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", + "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -4414,6 +4543,16 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", @@ -4956,6 +5095,17 @@ "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz", "integrity": "sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ==" }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs-minipass": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", @@ -6833,6 +6983,31 @@ "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, + "js-beautify": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz", + "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.2", + "glob": "^7.1.3", + "mkdirp": "~0.5.0", + "nopt": "~4.0.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + } + } + }, "js-levenshtein": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", @@ -6910,6 +7085,15 @@ "minimist": "^1.2.0" } }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsonwebtoken": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", @@ -7365,6 +7549,15 @@ "yallist": "^3.0.2" } }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, + "requires": { + "es5-ext": "~0.10.2" + } + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -7479,6 +7672,22 @@ "p-is-promise": "^1.1.0" } }, + "memoizee": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", + "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.45", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.5" + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -7864,6 +8073,12 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -9520,6 +9735,12 @@ "object-assign": "^4.1.1" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "proxy-addr": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", @@ -11010,6 +11231,22 @@ } } }, + "sequelize-cli": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-5.4.0.tgz", + "integrity": "sha512-4Gvl0yH0T3hhSdiiOci3+IKIfVG9x2os0hGWsbfa8QuyGgk9mZOqgTBnSCRtuxsdAyzUix9kfcTnfNolVNtprg==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cli-color": "^1.4.0", + "fs-extra": "^7.0.1", + "js-beautify": "^1.8.8", + "lodash": "^4.17.5", + "resolve": "^1.5.0", + "umzug": "^2.1.0", + "yargs": "^12.0.5" + } + }, "sequelize-slugify": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/sequelize-slugify/-/sequelize-slugify-0.6.1.tgz", @@ -11156,6 +11393,12 @@ "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -12346,6 +12589,16 @@ "setimmediate": "^1.0.4" } }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "requires": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", @@ -12633,6 +12886,16 @@ } } }, + "umzug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.2.0.tgz", + "integrity": "sha512-xZLW76ax70pND9bx3wqwb8zqkFGzZIK8dIHD9WdNy/CrNfjWcwQgQkGCuUqcuwEBvUm+g07z+qWvY+pxDmMEEw==", + "dev": true, + "requires": { + "babel-runtime": "^6.23.0", + "bluebird": "^3.5.3" + } + }, "undefsafe": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", @@ -12823,6 +13086,12 @@ "unist-util-is": "^2.1.2" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index 756ec644..992ceda3 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,11 @@ "assets:build": "npm run assets:clear && webpack --mode production --progress", "assets:clear": "rimraf ./static", "assets:watch": "npm run assets:clear && webpack --mode development --watch --progress", + "db:migrate": "sequelize db:migrate", + "db:migrate:create": "sequelize migration:generate", + "db:migrate:undo": "sequelize db:migrate:undo", + "db:seed": "sequelize db:seed:all", + "db:seed:create": "sequelize seed:generate", "lint": "npm run lint:js && npm run lint:scss", "lint:js": "eslint --ignore-path .gitignore ./", "lint:scss": "stylelint ./app/styles", @@ -56,6 +61,7 @@ "postcss-loader": "^3.0.0", "rimraf": "^2.6.3", "sass-loader": "^7.1.0", + "sequelize-cli": "^5.4.0", "stylelint": "^9.10.1", "stylelint-config-standard": "^18.2.0", "stylelint-order": "^2.0.0", diff --git a/server/database/config.js b/server/database/config.js new file mode 100644 index 00000000..867dcea2 --- /dev/null +++ b/server/database/config.js @@ -0,0 +1,22 @@ +const dotenv = require('dotenv') +const path = require('path') + +dotenv.config({ path: path.join(__dirname, '..', '..', '.env') }) + +const url = process.env.DATABASE_URL +const dialect = process.env.DATABASE_DIALECT || 'postgres' + +module.exports = { + development: { + url, + dialect, + }, + staging: { + url, + dialect, + }, + production: { + url, + dialect, + }, +} diff --git a/server/database/index.js b/server/database/index.js index 96b3b9bc..ac98766a 100644 --- a/server/database/index.js +++ b/server/database/index.js @@ -1,14 +1,17 @@ import Sequelize from 'sequelize' import logger from '../helpers/logger' +import config from './config' -const sequelize = new Sequelize(process.env.DATABASE_URL, { +const { url, dialect } = config[process.env.NODE_ENV] + +const sequelize = new Sequelize(url, { logging: msg => { if (process.env.NODE_ENV !== 'production') { - logger.info(msg) + logger.debug(msg) } }, - dialect: process.env.DATABASE_DIALECT, + dialect, operatorsAliases: false, }) diff --git a/server/database/migrations/20170507115037-add-user-roles.js b/server/database/migrations/20170507115037-add-user-roles.js index 41553ef1..26f33c6c 100644 --- a/server/database/migrations/20170507115037-add-user-roles.js +++ b/server/database/migrations/20170507115037-add-user-roles.js @@ -1,27 +1,30 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( - 'users', - 'isAdmin', - { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - } - ) - - queryInterface.addColumn( - 'users', - 'isParticipant', - { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - } - ) + return Promise.all([ + queryInterface.addColumn( + 'users', + 'isAdmin', + { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false, + } + ), + queryInterface.addColumn( + 'users', + 'isParticipant', + { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false, + } + ), + ]) }, down: queryInterface => { - queryInterface.removeColumn('users', 'isAdmin') - queryInterface.removeColumn('users', 'isParticipant') + return Promise.all([ + queryInterface.removeColumn('users', 'isAdmin'), + queryInterface.removeColumn('users', 'isParticipant'), + ]) }, } diff --git a/server/database/migrations/20170614123925-create-page-table.js b/server/database/migrations/20170614123925-create-page-table.js index b4703c30..ac2ac897 100644 --- a/server/database/migrations/20170614123925-create-page-table.js +++ b/server/database/migrations/20170614123925-create-page-table.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.createTable('pages', { + return queryInterface.createTable('pages', { id: { type: Sequelize.INTEGER, primaryKey: true, @@ -35,6 +35,6 @@ module.exports = { }) }, down: queryInterface => { - queryInterface.dropTable('pages') + return queryInterface.dropTable('pages') }, } diff --git a/server/database/migrations/20170615224148-extend-user-table.js b/server/database/migrations/20170615224148-extend-user-table.js index 89a85264..ca08a7a4 100644 --- a/server/database/migrations/20170615224148-extend-user-table.js +++ b/server/database/migrations/20170615224148-extend-user-table.js @@ -1,49 +1,50 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( - 'users', - 'street', - { - type: Sequelize.STRING, - allowNull: false, - defaultValue: '', - } - ) - - queryInterface.addColumn( - 'users', - 'cityCode', - { - type: Sequelize.STRING, - allowNull: false, - defaultValue: '', - } - ) - - queryInterface.addColumn( - 'users', - 'city', - { - type: Sequelize.STRING, - allowNull: false, - defaultValue: '', - } - ) - - queryInterface.addColumn( - 'users', - 'country', - { - type: Sequelize.STRING, - allowNull: false, - defaultValue: '', - } - ) + return Promise.all([ + queryInterface.addColumn( + 'users', + 'street', + { + type: Sequelize.STRING, + allowNull: false, + defaultValue: '', + } + ), + queryInterface.addColumn( + 'users', + 'cityCode', + { + type: Sequelize.STRING, + allowNull: false, + defaultValue: '', + } + ), + queryInterface.addColumn( + 'users', + 'city', + { + type: Sequelize.STRING, + allowNull: false, + defaultValue: '', + } + ), + queryInterface.addColumn( + 'users', + 'country', + { + type: Sequelize.STRING, + allowNull: false, + defaultValue: '', + } + ), + ]) }, down: queryInterface => { - queryInterface.removeColumn('users', 'street') - queryInterface.removeColumn('users', 'cityCode') - queryInterface.removeColumn('users', 'city') - queryInterface.removeColumn('users', 'country') + return Promise.all([ + queryInterface.removeColumn('users', 'street'), + queryInterface.removeColumn('users', 'cityCode'), + queryInterface.removeColumn('users', 'city'), + queryInterface.removeColumn('users', 'country'), + ]) }, } diff --git a/server/database/migrations/20170615232335-add-payment-details.js b/server/database/migrations/20170615232335-add-payment-details.js index 43764c23..7a06aa52 100644 --- a/server/database/migrations/20170615232335-add-payment-details.js +++ b/server/database/migrations/20170615232335-add-payment-details.js @@ -1,36 +1,38 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( - 'users', - 'paymentMethod', - { - type: Sequelize.STRING, - allowNull: true, - } - ) - - queryInterface.addColumn( - 'users', - 'paymentId', - { - type: Sequelize.STRING, - allowNull: true, - } - ) - - queryInterface.addColumn( - 'users', - 'isActive', - { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - } - ) + return Promise.all([ + queryInterface.addColumn( + 'users', + 'paymentMethod', + { + type: Sequelize.STRING, + allowNull: true, + } + ), + queryInterface.addColumn( + 'users', + 'paymentId', + { + type: Sequelize.STRING, + allowNull: true, + } + ), + queryInterface.addColumn( + 'users', + 'isActive', + { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: false, + } + ), + ]) }, down: queryInterface => { - queryInterface.removeColumn('users', 'paymentMethod') - queryInterface.removeColumn('users', 'paymentId') - queryInterface.removeColumn('users', 'isActive') + return Promise.all([ + queryInterface.removeColumn('users', 'paymentMethod'), + queryInterface.removeColumn('users', 'paymentId'), + queryInterface.removeColumn('users', 'isActive'), + ]) }, } diff --git a/server/database/migrations/20170619142756-add-phone-to-user.js b/server/database/migrations/20170619142756-add-phone-to-user.js index 1dbf757d..35cd3cb9 100644 --- a/server/database/migrations/20170619142756-add-phone-to-user.js +++ b/server/database/migrations/20170619142756-add-phone-to-user.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( + return queryInterface.addColumn( 'users', 'phone', { @@ -11,6 +11,6 @@ module.exports = { ) }, down: queryInterface => { - queryInterface.removeColumn('users', 'phone') + return queryInterface.removeColumn('users', 'phone') }, } diff --git a/server/database/migrations/20170710210246-add-visitor-role.js b/server/database/migrations/20170710210246-add-visitor-role.js index 81f247d0..835e475d 100644 --- a/server/database/migrations/20170710210246-add-visitor-role.js +++ b/server/database/migrations/20170710210246-add-visitor-role.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( + return queryInterface.addColumn( 'users', 'isVisitor', { @@ -11,6 +11,6 @@ module.exports = { ) }, down: queryInterface => { - queryInterface.removeColumn('users', 'isVisitor') + return queryInterface.removeColumn('users', 'isVisitor') }, } diff --git a/server/database/migrations/20170710220314-password-reset-fields.js b/server/database/migrations/20170710220314-password-reset-fields.js index 671a244c..58b2bc42 100644 --- a/server/database/migrations/20170710220314-password-reset-fields.js +++ b/server/database/migrations/20170710220314-password-reset-fields.js @@ -1,23 +1,26 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( - 'users', - 'passwordResetAt', - { - type: Sequelize.DATE, - } - ) - - queryInterface.addColumn( - 'users', - 'passwordResetToken', - { - type: Sequelize.STRING, - } - ) + return Promise.all([ + queryInterface.addColumn( + 'users', + 'passwordResetAt', + { + type: Sequelize.DATE, + } + ), + queryInterface.addColumn( + 'users', + 'passwordResetToken', + { + type: Sequelize.STRING, + } + ), + ]) }, down: queryInterface => { - queryInterface.removeColumn('users', 'passwordResetAt') - queryInterface.removeColumn('users', 'passwordResetToken') + return Promise.all([ + queryInterface.removeColumn('users', 'passwordResetAt'), + queryInterface.removeColumn('users', 'passwordResetToken'), + ]) }, } diff --git a/server/database/migrations/20170712120420-add-removable-page-flag.js b/server/database/migrations/20170712120420-add-removable-page-flag.js index dbe528ef..895a31f1 100644 --- a/server/database/migrations/20170712120420-add-removable-page-flag.js +++ b/server/database/migrations/20170712120420-add-removable-page-flag.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( + return queryInterface.addColumn( 'pages', 'isRemovable', { @@ -11,6 +11,6 @@ module.exports = { ) }, down: queryInterface => { - queryInterface.removeColumn('pages', 'isRemovable') + return queryInterface.removeColumn('pages', 'isRemovable') }, } diff --git a/server/database/migrations/20170720173822-add-event-slot-relation.js b/server/database/migrations/20170720173822-add-event-slot-relation.js index aef1fa9b..0c246c46 100644 --- a/server/database/migrations/20170720173822-add-event-slot-relation.js +++ b/server/database/migrations/20170720173822-add-event-slot-relation.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( + return queryInterface.addColumn( 'slots', 'eventId', { @@ -9,6 +9,6 @@ module.exports = { ) }, down: queryInterface => { - queryInterface.removeColumn('slots', 'eventId') + return queryInterface.removeColumn('slots', 'eventId') }, } diff --git a/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js b/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js index bceb1a8f..8eb4fcce 100644 --- a/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js +++ b/server/database/migrations/20170722175816-add-from-to-dates-to-slot.js @@ -1,25 +1,28 @@ module.exports = { up: (queryInterface, Sequelize) => { - queryInterface.addColumn( - 'slots', - 'from', - { - type: Sequelize.DATE, - allowNull: false, - } - ) - - queryInterface.addColumn( - 'slots', - 'to', - { - type: Sequelize.DATE, - allowNull: false, - } - ) + return Promise.all([ + queryInterface.addColumn( + 'slots', + 'from', + { + type: Sequelize.DATE, + allowNull: false, + } + ), + queryInterface.addColumn( + 'slots', + 'to', + { + type: Sequelize.DATE, + allowNull: false, + } + ), + ]) }, down: queryInterface => { - queryInterface.removeColumn('slots', 'from') - queryInterface.removeColumn('slots', 'to') + return Promise.all([ + queryInterface.removeColumn('slots', 'from'), + queryInterface.removeColumn('slots', 'to'), + ]) }, } diff --git a/server/database/migrations/20170723153354-add-delete-cascades.js b/server/database/migrations/20170723153354-add-delete-cascades.js index e898485e..e18b3f6a 100644 --- a/server/database/migrations/20170723153354-add-delete-cascades.js +++ b/server/database/migrations/20170723153354-add-delete-cascades.js @@ -1,65 +1,65 @@ module.exports = { up: queryInterface => { - queryInterface.addConstraint('places', ['animalId'], { - name: 'place_animal_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'animals', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('events', ['animalId'], { - name: 'event_animal_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'animals', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('resources', ['animalId'], { - name: 'resource_animal_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'animals', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('resourcesEvents', ['resourceId'], { - name: 'resources_events_resource_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'resources', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('resourcesEvents', ['eventId'], { - name: 'resources_events_event_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'events', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) + return Promise.all([ + queryInterface.addConstraint('places', ['animalId'], { + name: 'place_animal_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'animals', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('events', ['animalId'], { + name: 'event_animal_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'animals', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('resources', ['animalId'], { + name: 'resource_animal_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'animals', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('resourcesEvents', ['resourceId'], { + name: 'resources_events_resource_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'resources', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('resourcesEvents', ['eventId'], { + name: 'resources_events_event_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'events', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + ]) }, down: queryInterface => { - queryInterface.removeConstraint('places', 'place_animal_id_fkey') - queryInterface.removeConstraint('events', 'event_animal_id_fkey') - queryInterface.removeConstraint('resources', 'resource_animal_id_fkey') - queryInterface.removeConstraint('resources', 'resources_events_resource_id_fkey') - queryInterface.removeConstraint('resources', 'resources_events_event_id_fkey') + return Promise.all([ + queryInterface.removeConstraint('places', 'place_animal_id_fkey'), + queryInterface.removeConstraint('events', 'event_animal_id_fkey'), + queryInterface.removeConstraint('resources', 'resource_animal_id_fkey'), + queryInterface.removeConstraint('resources', 'resources_events_resource_id_fkey'), + queryInterface.removeConstraint('resources', 'resources_events_event_id_fkey'), + ]) }, } diff --git a/server/database/migrations/20170729225227-add-user-delete-cascades.js b/server/database/migrations/20170729225227-add-user-delete-cascades.js index f6317b40..b09e8a84 100644 --- a/server/database/migrations/20170729225227-add-user-delete-cascades.js +++ b/server/database/migrations/20170729225227-add-user-delete-cascades.js @@ -1,77 +1,76 @@ module.exports = { up: queryInterface => { - queryInterface.addConstraint('animals', ['userId'], { - name: 'animal_user_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'users', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('slots', ['placeId'], { - name: 'slot_place_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'places', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('slots', ['eventId'], { - name: 'slot_event_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'events', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('conversations', ['animalId'], { - name: 'conversation_animal_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'animals', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('messages', ['animalId'], { - name: 'message_animal_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'animals', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) - - queryInterface.addConstraint('messages', ['conversationId'], { - name: 'message_conversation_id_fkey', - type: 'FOREIGN KEY', - references: { - field: 'id', - table: 'conversations', - }, - onDelete: 'CASCADE', - onUpdate: 'CASCADE', - }) + return Promise.all([ + queryInterface.addConstraint('animals', ['userId'], { + name: 'animal_user_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'users', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('slots', ['placeId'], { + name: 'slot_place_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'places', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('slots', ['eventId'], { + name: 'slot_event_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'events', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('conversations', ['animalId'], { + name: 'conversation_animal_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'animals', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('messages', ['animalId'], { + name: 'message_animal_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'animals', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + queryInterface.addConstraint('messages', ['conversationId'], { + name: 'message_conversation_id_fkey', + type: 'FOREIGN KEY', + references: { + field: 'id', + table: 'conversations', + }, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }), + ]) }, down: queryInterface => { - queryInterface.removeConstraint('animals', 'animal_user_id_fkey') - queryInterface.removeConstraint('slots', 'slot_place_id_fkey') - queryInterface.removeConstraint('slots', 'slot_event_id_fkey') - queryInterface.removeConstraint('conversations', 'conversation_animal_id_fkey') - queryInterface.removeConstraint('messages', 'message_animal_id_fkey') - queryInterface.removeConstraint('messages', 'message_conversation_id_fkey') + return Promise.all([ + queryInterface.removeConstraint('animals', 'animal_user_id_fkey'), + queryInterface.removeConstraint('slots', 'slot_place_id_fkey'), + queryInterface.removeConstraint('slots', 'slot_event_id_fkey'), + queryInterface.removeConstraint('conversations', 'conversation_animal_id_fkey'), + queryInterface.removeConstraint('messages', 'message_animal_id_fkey'), + queryInterface.removeConstraint('messages', 'message_conversation_id_fkey'), + ]) }, } diff --git a/server/database/seeders/20170614114641-create-admin.js b/server/database/seeders/20170614114641-create-admin.js index 1161bd5f..c025c175 100644 --- a/server/database/seeders/20170614114641-create-admin.js +++ b/server/database/seeders/20170614114641-create-admin.js @@ -5,7 +5,7 @@ module.exports = { updatedAt: new Date, firstname: 'Boo Boo', lastname: 'Bamboo', - password: '$2a$10$Loa5/JpAso9ZpVtL1EYrT.4CrFSkblu2nqtltJYyUF5qBd/E3Deru', // Adminadmin + password: '$2a$10$Loa5/JpAso9ZpVtL1EYrT.4CrFSkblu2nqtltJYyUF5qBd/E3Deru', // Default: "adminadmin" email: 'admin@admin.com', isAdmin: true, isParticipant: false, From f82f68952cb4c0a0bea3e2dbc6d308b8e82148aa Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 14:39:43 +0100 Subject: [PATCH 11/77] Improve logging --- server/database/index.js | 7 ++++--- server/helpers/logger.js | 9 +++++++-- server/helpers/mailTemplate.js | 5 +++-- server/index.js | 30 ++++++++++++++++-------------- server/routes/index.js | 20 ++++++-------------- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/server/database/index.js b/server/database/index.js index ac98766a..7e0918de 100644 --- a/server/database/index.js +++ b/server/database/index.js @@ -3,13 +3,14 @@ import Sequelize from 'sequelize' import logger from '../helpers/logger' import config from './config' +const DEFAULT_LOG_LEVEL = 'info' + const { url, dialect } = config[process.env.NODE_ENV] const sequelize = new Sequelize(url, { + level: process.env.LOG_LEVEL || DEFAULT_LOG_LEVEL, logging: msg => { - if (process.env.NODE_ENV !== 'production') { - logger.debug(msg) - } + logger.debug(msg) }, dialect, operatorsAliases: false, diff --git a/server/helpers/logger.js b/server/helpers/logger.js index 7bb8e3e2..7aad31b2 100644 --- a/server/helpers/logger.js +++ b/server/helpers/logger.js @@ -1,12 +1,17 @@ import winston from 'winston' +const DEFAULT_LOG_LEVEL = 'info' + const { format } = winston export default winston.createLogger({ + level: process.env.LOG_LEVEL || DEFAULT_LOG_LEVEL, format: format.combine( format.colorize(), - format.splat(), - format.simple() + format.timestamp(), + format.printf(info => { + return `${info.timestamp} [${info.level}]: ${info.message}` + }) ), transports: [ new winston.transports.Console(), diff --git a/server/helpers/mailTemplate.js b/server/helpers/mailTemplate.js index 6265da29..6f000d18 100644 --- a/server/helpers/mailTemplate.js +++ b/server/helpers/mailTemplate.js @@ -1,8 +1,8 @@ import fs from 'fs' import path from 'path' -import winston from 'winston' import config from '../../common/config' +import logger from '../helpers/logger' import mail from '../services/mail' const TEMPLATES_PATH = 'mails' @@ -50,8 +50,9 @@ function sendMail(locals, subject, receiver, templateName, sender) { mailOptions.from = sender } + // Do not send real emails when in development if (process.env.NODE_ENV === 'development') { - winston.info('SEND MAIL', mailOptions) + logger.info('SEND MAIL', mailOptions) return resolve() } diff --git a/server/index.js b/server/index.js index 61a9ae40..790c10b5 100644 --- a/server/index.js +++ b/server/index.js @@ -12,9 +12,6 @@ import moment from 'moment-timezone' import morgan from 'morgan' import path from 'path' -import config from '../common/config' -import logger from './helpers/logger' - const ASSETS_FOLDER_NAME = 'static' const ASSETS_MANIFESTO_FILE = 'webpack-assets.json' const ASSETS_MAX_AGE = 31557600000 @@ -25,20 +22,24 @@ function getPath(filePath) { return path.resolve(__dirname, '..', filePath) } +// Load environment variables when in development +const envVariables = dotenv.config({ path: getPath('.env') }) + +const logger = require('./helpers/logger') + function errorAndExit(message) { logger.error(message) process.exit(1) } -// Load environment variables when in development -const envVariables = dotenv.config({ - path: getPath('.env'), -}) - if (envVariables.error && process.env.NODE_ENV === 'development') { errorAndExit('".env" file does not exist, please configure the app first') } +// Load configuration file +// @TODO Check if we shouldnt replace this with only using ENV variables +const config = require('../common/config') + // Read build manifesto for asset file paths const assetsPath = getPath(ASSETS_MANIFESTO_FILE) @@ -84,9 +85,12 @@ app.set('x-powered-by', false) app.set('view engine', 'pug') app.set('views', __dirname) -if (process.env.NODE_ENV === 'development') { - app.use(morgan('dev')) -} +// Log HTTP requests +app.use(morgan('dev', { + stream: { + write: message => logger.verbose(message.replace('\n', '')), + }, +})) // Enable compression and parsing requests app.use(compression()) @@ -139,8 +143,6 @@ app.use((req, res, next) => { // Start server app.listen(app.get('port'), () => { logger.info( - 'Server is listening at port %d in %s mode', - app.get('port'), - app.get('env') + `Server is listening at port ${app.get('port')} in ${app.get('env')} mode` ) }) diff --git a/server/routes/index.js b/server/routes/index.js index f359d1f5..e2efb954 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,7 +1,6 @@ import express from 'express' import expressValidation from 'express-validation' import httpStatus from 'http-status' -import winston from 'winston' import { EmptyResultError, ValidationError } from 'sequelize' import passport from '../services/passport' @@ -26,16 +25,14 @@ import profileRoutes from './profile' import resourceRoutes from './resource' import userRoutes from './user' +import logger from '../helpers/logger' + const router = express.Router() // eslint-disable-line new-cap // API health check route - -router.get('/health-check', (req, res) => - res.send('ok') -) +router.get('/health-check', (req, res) => res.send('ok')) // Public API routes - router.use('/auth', authRoutes) router.route('/pages/:resourceSlug(\\D+)/') @@ -45,12 +42,9 @@ router.route('/meta') .get(metaController.information) router.route('/preview') - .get( - eventPreviewController.findAll - ) + .get(eventPreviewController.findAll) // Private API routes - router.use('/*', (req, res, next) => { passport.authenticate('jwt', { session: false }, (err, user) => { if (err) { @@ -83,17 +77,15 @@ router.route('/activity') .get(activityController.findAll) // Admin API routes - router.use(onlyAdmin) router.use('/pages', pageRoutes) router.use('/users', userRoutes) // API error handling - router.use((err, req, res, next) => { - if (err && process.env.NODE_ENV === 'development') { - winston.error(err) + if (err) { + logger.error(err.stack) } if (err instanceof expressValidation.ValidationError) { From 722457d8a7a3c15eee612b45b8890497e0308840 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 15:48:40 +0100 Subject: [PATCH 12/77] Change deprecated sequelize methods --- server/controllers/auth.js | 5 ++-- server/controllers/base.js | 4 +-- server/controllers/conversation.js | 9 ++++--- server/controllers/event.js | 33 ++++++++++++------------ server/controllers/meeting.js | 11 ++++---- server/controllers/place.js | 7 ++--- server/controllers/resource.js | 14 +++++----- server/database/index.js | 12 ++------- server/handlers/activity.js | 4 ++- server/handlers/base.js | 4 ++- server/handlers/image.js | 4 ++- server/index.js | 2 +- server/models/activity.js | 20 ++++++++------- server/models/animal.js | 9 ++++--- server/models/conversation.js | 10 +++++--- server/models/conversationAnimal.js | 10 +++++--- server/models/event.js | 17 ++++++------ server/models/image.js | 18 ++++++------- server/models/meeting.js | 14 +++++----- server/models/message.js | 12 +++++---- server/models/objectImage.js | 10 +++++--- server/models/page.js | 14 +++++----- server/models/place.js | 31 +++++++++++----------- server/models/resource.js | 13 +++++----- server/models/resourceEvent.js | 8 +++--- server/models/slot.js | 18 +++++++------ server/models/user.js | 40 +++++++++++++++-------------- server/services/activity.js | 4 +-- server/services/passport.js | 2 +- 29 files changed, 194 insertions(+), 165 deletions(-) diff --git a/server/controllers/auth.js b/server/controllers/auth.js index b327b494..38524a00 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -1,4 +1,5 @@ import httpStatus from 'http-status' +import { Op } from 'sequelize' import checkout from '../services/checkout' import config from '../../common/config' @@ -210,8 +211,8 @@ function resetPassword(req, res, next) { const queryParams = { where: { passwordResetAt: { - $lt: new Date(), - $gt: new Date(new Date() - PASSWORD_RESET_EXPIRY * 60000), + [Op.lt]: new Date(), + [Op.gt]: new Date(new Date() - PASSWORD_RESET_EXPIRY * 60000), }, passwordResetToken: token, }, diff --git a/server/controllers/base.js b/server/controllers/base.js index 582627f7..0ee77ad6 100644 --- a/server/controllers/base.js +++ b/server/controllers/base.js @@ -56,7 +56,7 @@ export function prepareResponseAll(rows, req) { } export function lookup(model, req, res, next) { - return model.findById(req.params.resourceId, { + return model.findByPk(req.params.resourceId, { include, rejectOnEmpty: true, }) @@ -88,7 +88,7 @@ export function lookupWithSlug(model, req, res, next) { } export function findOne(model, req, res, next) { - return model.findById(req.params.resourceId, { + return model.findByPk(req.params.resourceId, { rejectOnEmpty: true, }) .then(data => res.json(data)) diff --git a/server/controllers/conversation.js b/server/controllers/conversation.js index d782df07..165de216 100644 --- a/server/controllers/conversation.js +++ b/server/controllers/conversation.js @@ -1,5 +1,6 @@ -import moment from 'moment-timezone' import httpStatus from 'http-status' +import moment from 'moment-timezone' +import { Op } from 'sequelize' import pick from '../utils/pick' import { addMessageActivity } from '../services/activity' @@ -65,7 +66,7 @@ export default { return Animal.findAll({ where: { id: { - $in: animalIds, + [Op.in]: animalIds, }, }, }, { @@ -172,7 +173,7 @@ export default { .catch(err => next(err)) }, lookup: (req, res, next) => { - return Conversation.findById(req.params.resourceId, { + return Conversation.findByPk(req.params.resourceId, { include: [ { association: ConversationBelongsToManyAnimal, @@ -202,7 +203,7 @@ export default { .catch(err => next(err)) }, findOne: (req, res, next) => { - return Conversation.findById(req.params.resourceId, { + return Conversation.findByPk(req.params.resourceId, { include: [ ConversationBelongsToManyAnimal, ], diff --git a/server/controllers/event.js b/server/controllers/event.js index 1b0ac8d1..e9874a1b 100644 --- a/server/controllers/event.js +++ b/server/controllers/event.js @@ -1,4 +1,5 @@ import httpStatus from 'http-status' +import { Op } from 'sequelize' import { DEFAULT_LIMIT, @@ -96,9 +97,9 @@ function areSlotsInClosedRange(req) { function areSlotsAvailable(req, fields, existingEventId) { const { placeId } = fields - let eventId = { $not: null } + let eventId = { [Op.not]: null } if (existingEventId) { - eventId = { $and: [eventId, { $not: existingEventId }] } + eventId = { [Op.and]: [eventId, { [Op.not]: existingEventId }] } } return new Promise((resolve, reject) => { @@ -106,9 +107,9 @@ function areSlotsAvailable(req, fields, existingEventId) { where: { placeId, slotIndex: { - $in: req.body.slots, + [Op.in]: req.body.slots, }, - $or: [{ + [Op.or]: [{ isDisabled: true, }, { eventId, @@ -141,9 +142,9 @@ function areResourcesAvailable(req, existingEventId) { const eventFrom = slots[0].from const eventTo = slots[slots.length - 1].to - let eventId = { $not: null } + let eventId = { [Op.not]: null } if (existingEventId) { - eventId = { $and: [eventId, { $not: existingEventId }] } + eventId = { [Op.and]: [eventId, { [Op.not]: existingEventId }] } } return new Promise((resolve, reject) => { @@ -151,7 +152,7 @@ function areResourcesAvailable(req, existingEventId) { distinct: true, where: { id: { - $in: req.body.resources, + [Op.in]: req.body.resources, }, }, include: [{ @@ -163,15 +164,15 @@ function areResourcesAvailable(req, existingEventId) { as: 'slots', required: true, where: { - $and: [{ + [Op.and]: [{ eventId, }, { from: { - $lt: eventTo, + [Op.lt]: eventTo, }, }, { to: { - $gt: eventFrom, + [Op.gt]: eventFrom, }, }], }, @@ -195,7 +196,7 @@ function areResourcesAvailable(req, existingEventId) { function createEvent(req, fields) { return new Promise((resolve, reject) => { - return Place.findById(fields.placeId, { + return Place.findByPk(fields.placeId, { include: [ PlaceBelongsToAnimal, ], @@ -216,7 +217,7 @@ function createEvent(req, fields) { .then(event => { // Associate resources to event return Resource.findAll({ - where: { id: { $in: req.body.resources } }, + where: { id: { [Op.in]: req.body.resources } }, include: [{ association: ResourceBelongsToAnimal, required: true, @@ -256,7 +257,7 @@ function createEvent(req, fields) { function updateEvent(req, fields) { return new Promise((resolve, reject) => { - return Place.findById(fields.placeId, { + return Place.findByPk(fields.placeId, { include: [ PlaceBelongsToAnimal, ], @@ -285,7 +286,7 @@ function updateEvent(req, fields) { .then(() => { // Associate resources to event return Resource.findAll({ - where: { id: { $in: req.body.resources } }, + where: { id: { [Op.in]: req.body.resources } }, include: [{ association: ResourceBelongsToAnimal, required: true, @@ -339,7 +340,7 @@ function updateEvent(req, fields) { }) .then(() => { // Return the whole event with all associations - return Event.findById(event.id, { include }) + return Event.findByPk(event.id, { include }) .then(updatedEvent => resolve(updatedEvent)) }) }) @@ -352,7 +353,7 @@ function updateEvent(req, fields) { } function validateEvent(req, fields, eventId) { - return Place.findById(fields.placeId) + return Place.findByPk(fields.placeId) .then(place => { if (!place) { throw new APIError( diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 5b71ebed..452ccf9f 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -1,5 +1,6 @@ -import moment from 'moment-timezone' import httpStatus from 'http-status' +import moment from 'moment-timezone' +import { Op } from 'sequelize' import { ConversationBelongsToManyAnimal, @@ -92,15 +93,15 @@ function getRandomPlace(from, to) { as: 'slots', required: false, where: { - $and: [{ + [Op.and]: [{ isDisabled: true, }, { from: { - $lt: to, + [Op.lt]: to, }, }, { to: { - $gt: from, + [Op.gt]: from, }, }], }, @@ -216,7 +217,7 @@ export default { .add(ANY_DATE_FROM_NOW_MIN_HOURS, 'hours') where.from = { - $gte: from, + [Op.gte]: from, } } diff --git a/server/controllers/place.js b/server/controllers/place.js index 4f0b5a87..e60537c1 100644 --- a/server/controllers/place.js +++ b/server/controllers/place.js @@ -1,4 +1,5 @@ import httpStatus from 'http-status' +import { Op } from 'sequelize' import { DEFAULT_LIMIT, @@ -58,10 +59,10 @@ function areSlotsBooked(placeId, slotIndexes) { where: { placeId, slotIndex: { - $in: slotIndexes, + [Op.in]: slotIndexes, }, eventId: { - $not: null, + [Op.not]: null, }, }, }) @@ -229,7 +230,7 @@ export default { return Slot.bulkCreate(slots) }) .then(() => { - return Place.findById(previousPlace.id, { include }) + return Place.findByPk(previousPlace.id, { include }) .then(place => { res.json(prepareResponse(place, req)) }) diff --git a/server/controllers/resource.js b/server/controllers/resource.js index a4459005..3b4d1f63 100644 --- a/server/controllers/resource.js +++ b/server/controllers/resource.js @@ -1,3 +1,5 @@ +import { Op } from 'sequelize' + import { DEFAULT_LIMIT, DEFAULT_OFFSET, @@ -37,9 +39,9 @@ function findAllWithAvailability(req, res, next) { offset = DEFAULT_OFFSET, } = req.query - let eventId = { $not: null } + let eventId = { [Op.not]: null } if (req.query.eventId) { - eventId = { $and: [eventId, { $not: req.query.eventId }] } + eventId = { [Op.and]: [eventId, { [Op.not]: req.query.eventId }] } } return Resource.findAndCountAll({ @@ -58,15 +60,15 @@ function findAllWithAvailability(req, res, next) { model: Slot, as: 'slots', where: { - $and: [{ + [Op.and]: [{ eventId, }, { from: { - $lt: req.query.to, + [Op.lt]: req.query.to, }, }, { to: { - $gt: req.query.from, + [Op.gt]: req.query.from, }, }], }, @@ -175,7 +177,7 @@ export default { return updateImagesForObject(previousResource, req.body.images) .then(() => { - return Resource.findById(previousResource.id, { include }) + return Resource.findByPk(previousResource.id, { include }) .then(resource => { res.json(prepareResponse(resource, req)) }) diff --git a/server/database/index.js b/server/database/index.js index 7e0918de..026dca86 100644 --- a/server/database/index.js +++ b/server/database/index.js @@ -3,20 +3,12 @@ import Sequelize from 'sequelize' import logger from '../helpers/logger' import config from './config' -const DEFAULT_LOG_LEVEL = 'info' - const { url, dialect } = config[process.env.NODE_ENV] -const sequelize = new Sequelize(url, { - level: process.env.LOG_LEVEL || DEFAULT_LOG_LEVEL, +export default new Sequelize(url, { logging: msg => { logger.debug(msg) }, dialect, - operatorsAliases: false, + operatorsAliases: false, // @TODO Remove this option in sequelize@>=5.0 }) - -export default { - Sequelize, - sequelize, -} diff --git a/server/handlers/activity.js b/server/handlers/activity.js index 96d2f59e..4688cadb 100644 --- a/server/handlers/activity.js +++ b/server/handlers/activity.js @@ -1,3 +1,5 @@ +import { Op } from 'sequelize' + import { prepareAnimalResponse } from '../controllers/base' import { @@ -71,7 +73,7 @@ export function getMyActivities(limit, offset, userId) { ], where: { userId: { - $or: [ + [Op.or]: [ null, userId, ], diff --git a/server/handlers/base.js b/server/handlers/base.js index a0d14561..28c37e15 100644 --- a/server/handlers/base.js +++ b/server/handlers/base.js @@ -1,3 +1,5 @@ +import { Op } from 'sequelize' + export function deleteObjects(model, where, include, associations) { return new Promise((resolve, reject) => { model.findAll({ @@ -33,7 +35,7 @@ export function deleteObjectsByUserId(model, userId, include, associations) { export function deleteObjectsByIds(model, ids, include, associations) { const where = { id: { - $in: ids, + [Op.in]: ids, }, } diff --git a/server/handlers/image.js b/server/handlers/image.js index 3a2f622b..66c49be3 100644 --- a/server/handlers/image.js +++ b/server/handlers/image.js @@ -1,3 +1,5 @@ +import { Op } from 'sequelize' + import Image from '../models/image' export function updateImagesForObject(resource, images) { @@ -53,7 +55,7 @@ export function deleteImagesForObject(resource) { return Image.destroy({ where: { id: { - $in: resource.images.map(image => image.id), + [Op.in]: resource.images.map(image => image.id), }, }, individualHooks: true, diff --git a/server/index.js b/server/index.js index 790c10b5..e601a11f 100644 --- a/server/index.js +++ b/server/index.js @@ -70,7 +70,7 @@ moment.tz.setDefault(config.timezone) // Check database connection const db = require('./database') -db.sequelize.authenticate() +db.authenticate() .then(() => { logger.info('Database connection has been established successfully') }) diff --git a/server/models/activity.js b/server/models/activity.js index 1d06a61e..8c608994 100644 --- a/server/models/activity.js +++ b/server/models/activity.js @@ -1,31 +1,33 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Activity = db.sequelize.define('activity', { +const Activity = db.define('activity', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, type: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, userId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, objectType: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, objectId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, objectTitle: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, eventId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, }) diff --git a/server/models/animal.js b/server/models/animal.js index 421d91ba..d9313646 100644 --- a/server/models/animal.js +++ b/server/models/animal.js @@ -1,19 +1,20 @@ +import Sequelize from 'sequelize' import generateRandomAnimalName from 'random-animal-name-generator' import db from '../database' -const Animal = db.sequelize.define('animal', { +const Animal = db.define('animal', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, userId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, name: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, }) diff --git a/server/models/conversation.js b/server/models/conversation.js index 3bb5c79d..bc2e1999 100644 --- a/server/models/conversation.js +++ b/server/models/conversation.js @@ -1,16 +1,18 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Conversation = db.sequelize.define('conversation', { +const Conversation = db.define('conversation', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, title: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, }) diff --git a/server/models/conversationAnimal.js b/server/models/conversationAnimal.js index 97fbbe62..c44fb0ac 100644 --- a/server/models/conversationAnimal.js +++ b/server/models/conversationAnimal.js @@ -1,16 +1,18 @@ +import Sequelize from 'sequelize' + import db from '../database' -const ConversationAnimal = db.sequelize.define('conversationsAnimals', { +const ConversationAnimal = db.define('conversationsAnimals', { lastCheckedAt: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, allowNull: true, }, conversationId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, }) diff --git a/server/models/event.js b/server/models/event.js index 16927b26..7daac21e 100644 --- a/server/models/event.js +++ b/server/models/event.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize' import slugify from 'sequelize-slugify' import db from '../database' @@ -8,36 +9,36 @@ import { addUpdateActivity, } from '../services/activity' -const Event = db.sequelize.define('event', { +const Event = db.define('event', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, placeId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, isPublic: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true, }, title: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, slug: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, unique: true, }, description: { - type: db.Sequelize.TEXT, + type: Sequelize.TEXT, allowNull: false, defaultValue: '', }, diff --git a/server/models/image.js b/server/models/image.js index dca07861..17b95a08 100644 --- a/server/models/image.js +++ b/server/models/image.js @@ -1,36 +1,36 @@ +import Sequelize from 'sequelize' + import db from '../database' import { createAndUploadImageVersions } from '../services/imageVersions' import { deleteObjects } from '../services/s3' -const Image = db.sequelize.define('image', { +const Image = db.define('image', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, fileName: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, largeImageUrl: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, mediumImageUrl: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, smallImageUrl: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, }, }) Image.addHook('beforeValidate', image => { if (!image.fileName) { - return Promise.reject( - new Error('Invalid image object') - ) + return Promise.reject(new Error('Invalid image object')) } return new Promise((resolve, reject) => { diff --git a/server/models/meeting.js b/server/models/meeting.js index 965bb6af..dc620d14 100644 --- a/server/models/meeting.js +++ b/server/models/meeting.js @@ -1,25 +1,27 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Meeting = db.sequelize.define('meeting', { +const Meeting = db.define('meeting', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, placeId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, conversationId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, from: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, allowNull: false, }, to: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, allowNull: false, }, }) diff --git a/server/models/message.js b/server/models/message.js index bf4d3d4a..f64dc4d6 100644 --- a/server/models/message.js +++ b/server/models/message.js @@ -1,21 +1,23 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Message = db.sequelize.define('message', { +const Message = db.define('message', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, conversationId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, text: { - type: db.Sequelize.TEXT, + type: Sequelize.TEXT, allowNull: false, }, }) diff --git a/server/models/objectImage.js b/server/models/objectImage.js index 192ec8f2..a12a11fa 100644 --- a/server/models/objectImage.js +++ b/server/models/objectImage.js @@ -1,16 +1,18 @@ +import Sequelize from 'sequelize' + import db from '../database' -const ObjectImage = db.sequelize.define('objectsImages', { +const ObjectImage = db.define('objectsImages', { objectType: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, primaryKey: true, }, objectId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, imageId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, }) diff --git a/server/models/page.js b/server/models/page.js index 932dccb2..4bf7602c 100644 --- a/server/models/page.js +++ b/server/models/page.js @@ -1,32 +1,34 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Page = db.sequelize.define('page', { +const Page = db.define('page', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, title: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, slug: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, content: { - type: db.Sequelize.TEXT, + type: Sequelize.TEXT, allowNull: false, defaultValue: '', }, isRemovable: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true, }, diff --git a/server/models/place.js b/server/models/place.js index 0c94f317..2720978b 100644 --- a/server/models/place.js +++ b/server/models/place.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize' import slugify from 'sequelize-slugify' import db from '../database' @@ -8,67 +9,67 @@ import { addUpdateActivity, } from '../services/activity' -const Place = db.sequelize.define('place', { +const Place = db.define('place', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, title: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, slug: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, unique: true, }, mode: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, description: { - type: db.Sequelize.TEXT, + type: Sequelize.TEXT, allowNull: false, validate: { notEmpty: true, }, }, isPublic: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true, }, slotSize: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, defaultValue: 10, }, latitude: { - type: db.Sequelize.FLOAT, + type: Sequelize.FLOAT, }, longitude: { - type: db.Sequelize.FLOAT, + type: Sequelize.FLOAT, }, street: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, cityCode: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, city: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, country: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, }) diff --git a/server/models/resource.js b/server/models/resource.js index 19e37ca3..e8a1517d 100644 --- a/server/models/resource.js +++ b/server/models/resource.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize' import slugify from 'sequelize-slugify' import db from '../database' @@ -8,28 +9,28 @@ import { addUpdateActivity, } from '../services/activity' -const Resource = db.sequelize.define('resource', { +const Resource = db.define('resource', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, animalId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, title: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, slug: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, unique: true, }, description: { - type: db.Sequelize.TEXT, + type: Sequelize.TEXT, allowNull: false, defaultValue: '', }, diff --git a/server/models/resourceEvent.js b/server/models/resourceEvent.js index bbf099f8..5522d011 100644 --- a/server/models/resourceEvent.js +++ b/server/models/resourceEvent.js @@ -1,12 +1,14 @@ +import Sequelize from 'sequelize' + import db from '../database' -const ResourceEvent = db.sequelize.define('resourceEvent', { +const ResourceEvent = db.define('resourceEvent', { resourceId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, eventId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, }, }) diff --git a/server/models/slot.js b/server/models/slot.js index 4aaa9d96..b4e23107 100644 --- a/server/models/slot.js +++ b/server/models/slot.js @@ -1,32 +1,34 @@ +import Sequelize from 'sequelize' + import db from '../database' -const Slot = db.sequelize.define('slot', { +const Slot = db.define('slot', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, placeId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, eventId: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, }, from: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, allowNull: false, }, to: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, allowNull: false, }, slotIndex: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, allowNull: false, }, isDisabled: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: false, }, diff --git a/server/models/user.js b/server/models/user.js index c29aeb03..f72338d2 100644 --- a/server/models/user.js +++ b/server/models/user.js @@ -1,3 +1,4 @@ +import Sequelize from 'sequelize' import bcrypt from 'bcrypt' import db from '../database' @@ -7,28 +8,28 @@ export function generateHash(str) { return bcrypt.hashSync(str, salt) } -const User = db.sequelize.define('user', { +const User = db.define('user', { id: { - type: db.Sequelize.INTEGER, + type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true, }, firstname: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, lastname: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, }, }, password: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: false, validate: { notEmpty: true, @@ -38,13 +39,13 @@ const User = db.sequelize.define('user', { }, }, passwordResetAt: { - type: db.Sequelize.DATE, + type: Sequelize.DATE, }, passwordResetToken: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, email: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, unique: true, allowNull: false, validate: { @@ -52,45 +53,45 @@ const User = db.sequelize.define('user', { }, }, phone: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, street: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, cityCode: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, city: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, country: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, }, paymentId: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: true, }, paymentMethod: { - type: db.Sequelize.STRING, + type: Sequelize.STRING, allowNull: true, }, isActive: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: false, }, isAdmin: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: false, }, isParticipant: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: false, }, isVisitor: { - type: db.Sequelize.BOOLEAN, + type: Sequelize.BOOLEAN, allowNull: false, defaultValue: false, }, @@ -103,6 +104,7 @@ User.prototype.comparePasswords = function compare(password) { User.prototype.toJSON = function convert() { const data = this.get() + delete data.password delete data.passwordResetAt delete data.passwordResetToken diff --git a/server/services/activity.js b/server/services/activity.js index ed17515f..5d3b1f28 100644 --- a/server/services/activity.js +++ b/server/services/activity.js @@ -15,9 +15,9 @@ function addActivity(data) { function sendMail(data) { return new Promise((resolve, reject) => { - Animal.findById(data.animalId) + Animal.findByPk(data.animalId) .then(animal => { - return User.findById(data.userId) + return User.findByPk(data.userId) .then(user => { const subject = translate(`api.activityMails.${data.type}.subject`) const message = translate(`api.activityMails.${data.type}.message`, { diff --git a/server/services/passport.js b/server/services/passport.js index 39ed5380..31973b98 100644 --- a/server/services/passport.js +++ b/server/services/passport.js @@ -17,7 +17,7 @@ const tokenOptions = { } const strategy = new Strategy(options, (payload, next) => { - User.findById(payload.user.id) + User.findByPk(payload.user.id) .then(user => { next(null, user) return null From 325b6d1eab1cb14b2d53311cc72f80c5e4bba14c Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 15:54:45 +0100 Subject: [PATCH 13/77] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f0d9a69..1fc8e4cf 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ You can log in now with the initial admin account `admin@admin.com` and password ```bash npm run serve // server runs by default on localhost:3000 -npm run watch // run gulp watch process in a second terminal +npm run assets:watch // run webpack watch process in a second terminal ``` ## Linting @@ -49,7 +49,7 @@ npm run lint // run all linters ## Deployment ```bash -npm run build // compile assets for production +npm run assets:build // compile assets for production ``` Note that `NPM_CONFIG_PRODUCTION` should be set to `false` for successful [Heroku deployment](https://devcenter.heroku.com/articles/nodejs-support#devdependencies). From 5e4ec4dde06399ac31cb7654013418d2d9f3129e Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 16:59:07 +0100 Subject: [PATCH 14/77] Fix undefined db --- server/controllers/auth.js | 2 +- server/controllers/message.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/controllers/auth.js b/server/controllers/auth.js index 38524a00..7ffd7148 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -176,7 +176,7 @@ function requestResetToken(req, res, next) { } generateRandomHash().then(passwordResetToken => { - const passwordResetAt = db.sequelize.fn('NOW') + const passwordResetAt = db.fn('NOW') return User.update({ passwordResetAt, passwordResetToken }, queryParams) .then(data => { diff --git a/server/controllers/message.js b/server/controllers/message.js index 40a06ff3..a63994a0 100644 --- a/server/controllers/message.js +++ b/server/controllers/message.js @@ -92,7 +92,7 @@ export default { .then(result => { // Update last checked at date return ConversationAnimal.update({ - lastCheckedAt: db.sequelize.fn('NOW'), + lastCheckedAt: db.fn('NOW'), }, { where: { animalId: req.meAnimal.id, From 2b45bbc429804ec5f84e8a89ad238c8b2ccb0191 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 16:56:52 +0100 Subject: [PATCH 15/77] Add config table --- package.json | 2 +- .../20190125152302-create-config-table.js | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 server/database/migrations/20190125152302-create-config-table.js diff --git a/package.json b/package.json index 992ceda3..1daef0de 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "assets:clear": "rimraf ./static", "assets:watch": "npm run assets:clear && webpack --mode development --watch --progress", "db:migrate": "sequelize db:migrate", - "db:migrate:create": "sequelize migration:generate", + "db:migrate:create": "sequelize migration:generate --name untitled", "db:migrate:undo": "sequelize db:migrate:undo", "db:seed": "sequelize db:seed:all", "db:seed:create": "sequelize seed:generate", diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js new file mode 100644 index 00000000..4500abe0 --- /dev/null +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -0,0 +1,34 @@ +function configField(type, defaultValue, allowNull = false) { + return { + type, + defaultValue, + allowNull, + validate: { + notEmpty: true, + }, + } +} + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('config', { + timezone: configField(Sequelize.CHAR, 'Europe/Berlin'), + currency: configField(Sequelize.CHAR, 'EUR'), + title: configField(Sequelize.CHAR, 'HOFFNUNG 3000'), + description: configField(Sequelize.STRING, 'HOFFNUNG 3000 is a festival'), + basePath: configField(Sequelize.CHAR, 'https://domain.com'), + mailAddressAdmin: configField(Sequelize.CHAR, 'admin@domain.com'), + mailAddressRobot: configField(Sequelize.CHAR, 'noreply@domain.com'), + maximumParticipantsCount: configField(Sequelize.INTEGER, 30, true), + festivalTicketPrice: configField(Sequelize.FLOAT, 10.00, true), + participationPrice: configField(Sequelize.FLOAT, 25.00, true), + defaultCity: configField(Sequelize.CHAR, 'Berlin'), + defaultCounty: configField(Sequelize.CHAR, 'Germany'), + defaultLatitude: configField(Sequelize.FLOAT, 52.53647), + defaultLongitude: configField(Sequelize.FLOAT, 13.40780), + }) + }, + down: queryInterface => { + return queryInterface.dropTable('config') + }, +} From a179154584ef1e22633ead44d6c49799a9954dd8 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 18:01:28 +0100 Subject: [PATCH 16/77] Improve config table, store custom data in database, use it to render index view --- README.md | 2 +- package.json | 2 +- server/config.js | 19 ++++++++++ .../20190125152302-create-config-table.js | 35 +++++++++---------- .../seeders/20170614114641-create-admin.js | 4 +-- .../seeders/20190125162811-default-config.js | 23 ++++++++++++ server/index.js | 25 +++++++------ server/index.pug | 12 +++---- server/models/config.js | 35 +++++++++++++++++++ 9 files changed, 119 insertions(+), 38 deletions(-) create mode 100644 server/config.js create mode 100644 server/database/seeders/20190125162811-default-config.js create mode 100644 server/models/config.js diff --git a/README.md b/README.md index 1fc8e4cf..a0fec210 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ npm run db:migrate // setup the database npm run db:seed // create initial data ``` -You can log in now with the initial admin account `admin@admin.com` and password `adminadmin`. +You can log in now with the initial admin account `admin@domain.com` and password `adminadmin`. ## Development diff --git a/package.json b/package.json index 1daef0de..67371ef8 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "db:migrate:create": "sequelize migration:generate --name untitled", "db:migrate:undo": "sequelize db:migrate:undo", "db:seed": "sequelize db:seed:all", - "db:seed:create": "sequelize seed:generate", + "db:seed:create": "sequelize seed:generate --name untitled", "lint": "npm run lint:js && npm run lint:scss", "lint:js": "eslint --ignore-path .gitignore ./", "lint:scss": "stylelint ./app/styles", diff --git a/server/config.js b/server/config.js new file mode 100644 index 00000000..9024dd43 --- /dev/null +++ b/server/config.js @@ -0,0 +1,19 @@ +import Config from './models/config' + +function getConfig(fields) { + const attributes = (typeof fields === 'string') ? [fields] : fields + + return Config.findOne({ + attributes, + }) + .then(config => { + return attributes.reduce((acc, field) => { + acc[field] = config[field] + return acc + }, {}) + }) +} + +export default { + getConfig, +} diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js index 4500abe0..9f533311 100644 --- a/server/database/migrations/20190125152302-create-config-table.js +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -1,7 +1,6 @@ -function configField(type, defaultValue, allowNull = false) { +function configField(type, allowNull = false) { return { type, - defaultValue, allowNull, validate: { notEmpty: true, @@ -11,24 +10,24 @@ function configField(type, defaultValue, allowNull = false) { module.exports = { up: (queryInterface, Sequelize) => { - return queryInterface.createTable('config', { - timezone: configField(Sequelize.CHAR, 'Europe/Berlin'), - currency: configField(Sequelize.CHAR, 'EUR'), - title: configField(Sequelize.CHAR, 'HOFFNUNG 3000'), - description: configField(Sequelize.STRING, 'HOFFNUNG 3000 is a festival'), - basePath: configField(Sequelize.CHAR, 'https://domain.com'), - mailAddressAdmin: configField(Sequelize.CHAR, 'admin@domain.com'), - mailAddressRobot: configField(Sequelize.CHAR, 'noreply@domain.com'), - maximumParticipantsCount: configField(Sequelize.INTEGER, 30, true), - festivalTicketPrice: configField(Sequelize.FLOAT, 10.00, true), - participationPrice: configField(Sequelize.FLOAT, 25.00, true), - defaultCity: configField(Sequelize.CHAR, 'Berlin'), - defaultCounty: configField(Sequelize.CHAR, 'Germany'), - defaultLatitude: configField(Sequelize.FLOAT, 52.53647), - defaultLongitude: configField(Sequelize.FLOAT, 13.40780), + return queryInterface.createTable('configs', { + timezone: configField(Sequelize.STRING), + currency: configField(Sequelize.STRING), + title: configField(Sequelize.STRING), + description: configField(Sequelize.STRING), + baseUrl: configField(Sequelize.STRING), + mailAddressAdmin: configField(Sequelize.STRING), + mailAddressRobot: configField(Sequelize.STRING), + maximumParticipantsCount: configField(Sequelize.INTEGER, true), + festivalTicketPrice: configField(Sequelize.FLOAT, true), + participationPrice: configField(Sequelize.FLOAT, true), + defaultCity: configField(Sequelize.STRING), + defaultCounty: configField(Sequelize.CHAR), + defaultLatitude: configField(Sequelize.FLOAT), + defaultLongitude: configField(Sequelize.FLOAT), }) }, down: queryInterface => { - return queryInterface.dropTable('config') + return queryInterface.dropTable('configs') }, } diff --git a/server/database/seeders/20170614114641-create-admin.js b/server/database/seeders/20170614114641-create-admin.js index c025c175..a3462fd8 100644 --- a/server/database/seeders/20170614114641-create-admin.js +++ b/server/database/seeders/20170614114641-create-admin.js @@ -6,7 +6,7 @@ module.exports = { firstname: 'Boo Boo', lastname: 'Bamboo', password: '$2a$10$Loa5/JpAso9ZpVtL1EYrT.4CrFSkblu2nqtltJYyUF5qBd/E3Deru', // Default: "adminadmin" - email: 'admin@admin.com', + email: 'admin@domain.com', isAdmin: true, isParticipant: false, isActive: true, @@ -15,7 +15,7 @@ module.exports = { down: queryInterface => { return queryInterface.bulkDelete('users', [{ email: [ - 'admin@admin.com', + 'admin@domain.com', ], }]) }, diff --git a/server/database/seeders/20190125162811-default-config.js b/server/database/seeders/20190125162811-default-config.js new file mode 100644 index 00000000..4aed5055 --- /dev/null +++ b/server/database/seeders/20190125162811-default-config.js @@ -0,0 +1,23 @@ +module.exports = { + up: queryInterface => { + return queryInterface.bulkInsert('configs', [{ + timezone: 'Europe/Berlin', + currency: 'EUR', + title: 'HOFFNUNG 3000', + description: 'HOFFNUNG 3000 is a festival', + baseUrl: 'https://domain.com', + mailAddressAdmin: 'admin@domain.com', + mailAddressRobot: 'noreply@domain.com', + maximumParticipantsCount: 30, + festivalTicketPrice: 10.00, + participationPrice: 25.00, + defaultCity: 'Berlin', + defaultCounty: 'Germany', + defaultLatitude: 52.53647, + defaultLongitude: 13.40780, + }]) + }, + down: queryInterface => { + return queryInterface.bulkDelete('configs', []) + }, +} diff --git a/server/index.js b/server/index.js index e601a11f..52bd4a5e 100644 --- a/server/index.js +++ b/server/index.js @@ -8,7 +8,6 @@ import fs from 'fs' import helmet from 'helmet' import marked from 'marked' import methodOverride from 'method-override' -import moment from 'moment-timezone' import morgan from 'morgan' import path from 'path' @@ -25,6 +24,7 @@ function getPath(filePath) { // Load environment variables when in development const envVariables = dotenv.config({ path: getPath('.env') }) +// Require logger after we read env variables const logger = require('./helpers/logger') function errorAndExit(message) { @@ -36,10 +36,6 @@ if (envVariables.error && process.env.NODE_ENV === 'development') { errorAndExit('".env" file does not exist, please configure the app first') } -// Load configuration file -// @TODO Check if we shouldnt replace this with only using ENV variables -const config = require('../common/config') - // Read build manifesto for asset file paths const assetsPath = getPath(ASSETS_MANIFESTO_FILE) @@ -66,7 +62,8 @@ marked.setOptions({ // Moment settings // @TODO Check if we really want to keep using moment-js here -moment.tz.setDefault(config.timezone) +// @TODO Get the timezone from the database, at every request +// moment.tz.setDefault(getConfig('timezone')) // Check database connection const db = require('./database') @@ -134,10 +131,18 @@ app.use((req, res, next) => { return } - // .. otherwise serve the webapp - res.render('index', { - assets, - }) + // Require this here to make sure we've loaded + // all .env variables first in development mode + const { getConfig } = require('./config') + + // Serve the webapp if no extension was found + getConfig(['title', 'description', 'baseUrl']) + .then(config => { + res.render('index', { + assets, + config, + }) + }) }) // Start server diff --git a/server/index.pug b/server/index.pug index c38260e2..dc4459cc 100644 --- a/server/index.pug +++ b/server/index.pug @@ -10,12 +10,12 @@ html head meta(charset='utf-8') meta(http-equiv='X-UA-Compatible' content='IE=edge') - meta(name='viewport' content='width=device-widthinitial-scale=1maximum-scale=1user-scalable=0') - // meta(property='og:title' content="{{ env 'CONFIG_TITLE' }}") - // meta(property='og:description' content="{{ env 'CONFIG_DESCRIPTION' }}") - // meta(property='og:url' content="{{ env 'CONFIG_URL' }}") - // meta(name='description' content="{{ env 'CONFIG_DESCRIPTION' }}") - // title {{ env 'CONFIG_TITLE'; }} + meta(name='viewport' content='width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0') + meta(property='og:title' content=config.title) + meta(property='og:description' content=config.description) + meta(property='og:url' content=config.baseUrl) + meta(name='description' content=config.description) + title= config.title // link(rel='icon' type='image/png' href='/static/images/favicon.png') +asset('app', 'css') body diff --git a/server/models/config.js b/server/models/config.js new file mode 100644 index 00000000..506ecc5d --- /dev/null +++ b/server/models/config.js @@ -0,0 +1,35 @@ +import Sequelize from 'sequelize' + +import db from '../database' + +// Helper method to define model fields with default values +function configField(type, allowNull = false) { + return { + type, + allowNull, + validate: { + notEmpty: true, + }, + } +} + +// This model holds global configurations which are crucial for +// the whole application. Defaults are defined in a database seed. +const Config = db.define('config', { + timezone: configField(Sequelize.STRING), + currency: configField(Sequelize.STRING), + title: configField(Sequelize.STRING), + description: configField(Sequelize.STRING), + baseUrl: configField(Sequelize.STRING), + mailAddressAdmin: configField(Sequelize.STRING), + mailAddressRobot: configField(Sequelize.STRING), + maximumParticipantsCount: configField(Sequelize.INTEGER, true), + festivalTicketPrice: configField(Sequelize.FLOAT, true), + participationPrice: configField(Sequelize.FLOAT, true), + defaultCity: configField(Sequelize.STRING), + defaultCounty: configField(Sequelize.CHAR), + defaultLatitude: configField(Sequelize.FLOAT), + defaultLongitude: configField(Sequelize.FLOAT), +}) + +export default Config From cbbe80bb26995d180d824f564ac45ad7e5e37f29 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 18:23:52 +0100 Subject: [PATCH 17/77] Remove unneded images, copy favicon to assets folder --- app/images/android-chrome-192x192.png | Bin 5026 -> 0 bytes app/images/android-chrome-512x512.png | Bin 13634 -> 0 bytes app/images/apple-touch-icon.png | Bin 2995 -> 0 bytes app/images/favicon-16x16.png | Bin 922 -> 0 bytes app/images/favicon.ico | Bin 0 -> 4286 bytes app/images/{favicon-32x32.png => favicon.png} | Bin app/images/hoffnung3000.jpg | Bin 122666 -> 0 bytes app/images/logo-senatsverwaltung-berlin.png | Bin 19836 -> 0 bytes app/images/safari-pinned-tab.svg | 1 - package-lock.json | 181 ++++++++++++++++++ package.json | 1 + server/index.pug | 2 +- webpack.config.babel.js | 6 + 13 files changed, 189 insertions(+), 2 deletions(-) delete mode 100644 app/images/android-chrome-192x192.png delete mode 100644 app/images/android-chrome-512x512.png delete mode 100644 app/images/apple-touch-icon.png delete mode 100644 app/images/favicon-16x16.png create mode 100644 app/images/favicon.ico rename app/images/{favicon-32x32.png => favicon.png} (100%) delete mode 100644 app/images/hoffnung3000.jpg delete mode 100644 app/images/logo-senatsverwaltung-berlin.png delete mode 100644 app/images/safari-pinned-tab.svg diff --git a/app/images/android-chrome-192x192.png b/app/images/android-chrome-192x192.png deleted file mode 100644 index 5ce9a78d36fd6a8ee8d202db81cb823e7b784b17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5026 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 diff --git a/app/images/android-chrome-512x512.png b/app/images/android-chrome-512x512.png deleted file mode 100644 index 608411ca04758142ad4d8da88ca3c2a7dcff9899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13634 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 diff --git a/app/images/favicon-16x16.png b/app/images/favicon-16x16.png deleted file mode 100644 index 6ee9509afd6869e427de9079283bad7f89586814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAn3BBRT^Rni_n+Ah2>S z4={E+nQaGTu$OrHy0SlHkrr1rc;x%+AyBBWDkP#LD6w3jpeR2rGbdG{q_QAY!6GR$ zmw};Tj%&9g-vI>g(0lD;Kixou_wC^lCUfUIA_l?ljVC<&!g%$)jPZsg8i_#5 z6R=vIT9KK?z`!x{vDexYK97SKn2nY7goBH@jlGSHnH3B?4LuDF47^Ml7`PS8wiuXi zX7O}9%Ck_!hnJ(lM4~WJgXvR)(6Jjw5*xS~z6MHv+xExt63{MxtafDZ`uLQN zhUYV&UCP{g$=t%q!rqfbn1vNw8cYtSFe`5kQ8<0$%84Uqj>sHgKi%N5z)O!oV=CWc zEu~y}pwYFSE{-7*my>_=vq`K_DkwX))&914ea-HK_xrnz-~UPf5fdsCa2w|;9LzI|rWg|&5w zn|~|+?Q>O6`J3{iKKJC={q5#8KX-ilv48ey`M{G)GZ+}Wf8RN^_-O8CphHwkTq8@|Cv8k1bg|>l_m4U&-bDi%|H00)|WTsW()-YkR zVK7jGB*+F(1X;NP3D4Zb^i-eJy!4U`215fQlWlWVB7lk{FcpPora;xW?mRUWs744y zjelBNacT*Jky)_xqEw))21qtDIoT>Xzo4=xGd-h(!5PLXCx!Nl7hEE&@huW_})nOJ;FFPGY4(fN_82?ma+N(lAxIiFu`IiOD6UMX5zd k%8VY$cmkD)z?J2vq~;*W-%J005h%~#>FVdQ&MBb@028lJng9R* diff --git a/app/images/favicon.ico b/app/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c9ee60eb9f5ed66e20a68c49c36f4268b7be1a3 GIT binary patch literal 4286 zcmeHIODJt&6yAprqU#dn)sYDbd6ZX5j2RFUZzD1j15;%n?+gs2kaY7*9#I$&28ukx zM0ut>^UQ1A^L_eH`yO3qcn9~a-QN3O>-*MP|6c$4|E*~T(`7Vjcxu0XXqvaCX(6WD zWYSVhH|!J>_S5zA{xoQs*u+)=TLu363cSC+%j@ea?~jj_*vS3!=}U<4xT=yC0~!LxT~wH(%s!Hqobp8b#=v5z!ZLbd@Ox^ebV3GFX!jy zUvT&g4Gl?eZ?7C29DKnaA0K6Ma#Fgwx@2>6(~M(KUS2My^H}Wc?D+Qa@sWjv1#<9! zpR21YG4Q;+ykuo%#f)!kY>1zqA8~`hAPx==oQoo0zR}Uq#O>|v`EF`zB8)d;hJ=JL zPgPYF^`M|2d3bn`=jUg^7@W4YHmRwp;W#-tS%sIhv^3hPtE;7>ql4psfB?C^z9y%% zw3N2Iygbg!&CN}moSbB5XGfZwnsH2$wiMuMMaU1Z(Lhj<2WWJhB)Tr@9$6B z;o%|I0(JBB^pwlXOL8zb%y(vHhI(LNAa%rol$4ZEZ)|L&j)z)jj8*>a?QIzt7$7$* zD+>@MAt8abrKKfVUti}qA|isl4MIUd0d1(o{rx@1?(Xh#dU{I#+S*#$ii?Z6Ct$?f zhlhtn)juUAgOyI5aerXHRx^Hg#|yPft%078XVu))RXS-V)m-z(YO-4&zJ zXvPs+)e{_?ji@JlRgU)dcDk#5x3#s!vlY3pW)S`PdvR)QG#f8zYp=TbOq)^PQI b{hPnS_1~uA+upVc*edYoB^RA>qw1wz0AzJM6aKX7lsbAB~!^*s%RxAo?Q2b`Q2 z;@Hp}NCA=uty_P{{nYVI4h}z0*7@h}ANBv^LD2rA?NE!sWL@uy6n^zA*;a2`y2YMyzE~W<{a@jV=SdqU;p)7 zC>w$-SrUn)=&$E?uplVQ41(so`0Kf4z&;e^An3Oj#}A!6^rJp$@Hpcru(r=&yyP7q zNGTtJW{XZ8HCp@Qy42jw5Hz!2BKfiuf^gR%NPI;i5k8Pe#1A1zx)*}V{3KC0p}SOX z+42>}CZ=ZV)|*>x*}BboyUmV0d-v^k1l@H%;&If|i{gFCKj3sA?abNG3t{0A7bByt zUB7WNF8iw+p**ZqM5tYLyo93u4G3M&>C%g8eXa8#*JOBTxXaDHf zU;XNVtiWvl_kJXxl7FuT@NP*TaAt_48=5OE1&m2r5h6htwhX#ABV-OV{p-K+5J(!Q zaheJ?DruU=X-eSKJdM+oz^P>#rzwF`>oiVN0;jfVoTda$?bA3-37k5nahei1P4lNI z!SSd0)6~#nB-8w9YRso;{xmgkn&wYa1E*>JG&OLV=1)@tr)mB)HE^2dPg4V@>HO2w zz-gL4O%0r;`P0K5%zJ-=WT9w)vczv92~jl=)f@9KV;a=#$v{qwkWi!S+Hb4ofeu$53X`flIG z@x!=x8`ayLMP}_gc8<&y(#hufo z5dx-QE`iQp#F`1n&zYT8WvpEM@QX(%>1Q-D6Ki2ep^lGwX+0Hj*y?7@3dUkIfFD>@ zcw-kO&}{$JYDRZzsQ>=(uePPjcE6u@Y1M*9IKH$5Qamex%H1W9R0_@r71)W{ZEN+51zGyFYhBTlq+NCM4_l|c7df*=W0sgxvvJ_|xf_Zv{tT1@Vt zaI!Lc3FM2vM3!cG$DHDxe$26-$#|{36ivTh&Vj?*iSlhae7~D~7cTySf$ob|-#q== z=g&0EE{*42d--s0P(=Qn=cb>YN{Q1Qq&Cikl%XHLU^N&ynJQ9K6O4g&xiQ*dX(FES zs_;XlykU7FQGE9)rb`Pa{6t@u&5wJi7x@9b$(OG9Y(s%hJ?bh+j~6&b7`LfLU49Ud z;9K^3D+I4+@zpX#sw6C20(F5p=kB~Nf$F*;63>u~u7t(%5-5j_Ex4;Ef#P!^xXO)% z9FRa0ni9y9C0b(+`e^7SE%cH=p}sKZAuG2)r2I{wg{Jez1gWjXnosDPkcbhN0r-Ns zN$q(HJu0VfxrOFE(IQlRz>=sLv$lKm^ZN0b?V@0wTAb)rra^98-22t}k6ufOaewbO zy+`Q4=p<)LpkWu}^8hb%WEa1dJ64XDt`>ylwiZ(}wo)GXd^?>LnbKTL;NIR9$cxn& zN|T%IxDg4D&hXj2^_EUcpY+-gScjA!DAK+!T!$|BRJuSM4ttU`M1k!*Bj;|BJ=#KJ z&mn3g)m>M3oJ2FTGjFIOt5TYwC++4#^cAftw|Z!bi{D6zdKgV4B*0UoYCXX2dHU7x zGI5Uhj%Wk?eq|wU_#0AJ*-yB-m^x1J88Fl~tD;6~1XY>aC8KXD9H|N0eo>q!{n?gB z6)8IkFtkZ<0nHNnV(p}PBYp*u#to`iBdn5lSA7@u)pSDZL)6=*5ra4O6PC$$R@194 z*4RPxn~#SI`wR5$J{>a8$Xpe8rZDmT8F=XcJGiyQ^z4^J@rz!m+do~~GPGp3#qLGD z*S5XBe92tJW5p}$M++Nq`E;TkA2n{GXEE`0Z_TCEs}5ii04gu_^zY(h@2;6nwgz_WVnCko$OGlnqmw3|>n1(OJGix z1o~=*HNfa$eMZYc`|`7?F~zfm+r3$H{bv{BxpGw5!7S9dg&SK*Rk2cOXZi-x z;>{}e^S3=2p*8Cp%gbzl!kj`#4+^1W()?4H+=%dmhz7i4AgFg;agflC@kXs*t)+B1 zEr@4W!JIo-;IUX3GzZ8u=RIakOc4mG9xW!0fAW{qCz*Z>N_nxa5FCoc@0e z(0|UZB+xc8x};%bIe&wo0u25s#!F^yZH>=e)i1n=8bY{LwVTlkWb~?b=mWbn!n~nE zKk)|ZaHoN1p~Hp2&p*$n$RcCUM~$T>biiT?+8zAAzI>}9&-IF0ntMhk5g^k-a9!F}`C*99#Uo{6a`MXa5#{;s??&g+rjr zZCEb}u_a$-<&eM#bXhy2KFMexFTR4Tg4R}_K!?ER#;khRo*TO$Mzwy}FC$ORG`qk> zDSx}-K^wy{Iq7N$He&x5bX>ez0{s$uiD)Fg&pO2HY#11;I+HsTdyxzR01x}FG2VyE z8OG5v&AGQk?tB8*>_YJ&9woPat=Top4ffZa+6}eelIfqM`?{GUSs+E2?C6 zpRKHWdeA#A+eW(Y6jkcNETy+|dmC}Qg8!R%>_2D1m1@xjjaPc{{JE3f z2HRl=e5do@k^P*(XNt4{m@~r~MTdALs+HC3oQcklm~MxEkx4w~==CLOl+;i0`{Q^v z3eV?Wn{{a8=*HfzV{>^S>ofm-4=;sfJiLN`B!P&`y3hA!{)qM^kOdnxP!s(W16pMy zj(|BStUSHpEJUY@Df^V6BwE_e_^A`!+)*WgW*d(w4m~U9QA1&cV&5n7R?f`*`ElQG zyYfvRAx341b~#qZ%vP=#mii97?te)rT@0g(a3U3W2bd1eu-*=>)SOJj2$3Rh!nIA3je49Nt&l`&vwid4n-iF$N1WNYaQg!*%P zz(u+d*ItQDasK&iT-vHEnS`)U&Mq~2MKpIxQt!KMUeY}3e+nm|BR0ES0^v5n<$EO% zh1K&xU?ENB1N*A+Aoc3Mw|SNslE`LEdM7>_`wzk1grxt7#sEx%Ay--ErNXUee5TZYDpgVst#T&ic8L}t7V!z#{f7rvI}MKpkRuc4 zwQI9y2i>E5Qy7GBU+xMwf>pVJj5sl46JmO^7_Ah9RQXMtdXzo))e zOceQ&l;q1KnZmi&OYm zq9uJ7-|o(qI~Ve^+UdK_cu?l}NA4GEc zt!6iw+*VTDEM=v>JL!mT**$zCE0l@2!l?dOSz5HZ2ymvEGsO=BmVFgi`KF3?^W#N^ zmWy;^!}5J~23(o3U*G5M)pm9XzWp+Cb=KlTb0EfhtPV!bT94ErqocJyi=SXpA|-KB z@f!8;4JAJ1F==!;G>-f1dSCrx3gD)bxXHa_oF?}t6 zNqoU21An_UqCH7yk>i<#2a5INt5W(P61+)fhQg+|ijA?mIx;)H{6DG$_&4O9huEBY zAq1DNHy&ZBNpe|_JQYZ{?tyEKwoX1^~#}#A}eu9u{Zw=KW*(M z-ES3!VP7IHZHI1MAZwU~^xMQ7IP*#h?cnQU3U7his7F7IjM5GHMx2Q9i%wl(5tZbS zMEN#fo&9fgtWgl9sEkD|-PZgqc2QaXNL;TJX8=<;58n4tt`d-X`TA4uf5I=p-mtR| z<#a2Yjy6Oc-nSkCb5zYnb85*_4AZSLkG}NKZBZp| zz4nIAwsT%7*E#RLRYX2;JeVPLJlC;aM)3>8=*3Jhak*^ONB;4CC0{?m6s%=s30I$yQGtfRwJuz&ylFRuM=uJu|a>B;HE zz9!Z6^;NI0ZlcO;|6FgJakW~*sA$DwV<}M!gH1pJ$RZ^pfpKe|1dsf`N9DEtItAIlYf4f$EWk^6YMC%9ATx%6)Ti8DKDV>XiHN=&iLYkG9 zFxOOhzI4Dh5az+<%`D_#%*iwTY{BbnWF)uQC_N$qh!@nZ^9vU4KAE*C@G)JpE#QQP zbRNBLhtn(x1LjH?wqfFH7h4`cu?i$t4oYg z-Ur~o9KClM#3XfPP|CFR(O!Md$hSukSxBA$%;H0tFpEdGm+SX ze7KyXW__$`Wk>vMo?Jt;n|j;WqM7e5ziHTk&G$)jt*6~1w0nw_>M#XB%+CXP zrF@%-rDhoeLetM6o&%Sk8E~^vE#by)O1~7}ui&vApq@F!c;2k>V3#r?u_WPyVW&S? zo|Z9I-JyCyT==0vux4xvB>wGxn8Em0cyt*_q{_l(_knenpfi!N^`wj7&?4PR-PZp@bHW|w~%Oh~N?4k}OBmLk3C?ju)o3vVe=IM%{M zf&y#O4}aOyEP>ovoosHyIpZ4%2aH+jj7ChKkE`-Mi@h!w9eao9RrWMQB-lro5LSxv z4F{MST~=!&m%J#Bj42FZ*q|RUg%Z&BZZvFoE^5GxN9!C`KfOmdMOOrNRtI9y)KZA`EOr1_$?m#6@FC*i3KJ6+Lb_P0 zNvj!A&ajKPNXPSv;JK8X-=ySq8!E;76^oX8-#)RC&}=_!1Y9ozF1H|2Hi*^A0s9FT z`3RNh8{0A#X4~zlalA_3juLd=)m`-EkyI?qk}1w_&Sx6d2R=eOxE*04qvXvmO+G|k zvbAW0;C&2bzGoOckXxcu^fE{t0dA_i*<^!Ao&G>o6(209GS;vtmkR(B&K# zIM><}=8ZVkwG~?j`OZspC6qH%S_Vq_}x!LhRLyJrwl2;h4z8a>z6~c%T$Y%_- zggFIaCI+^Zq%5`JR30n3g56LM%8Rd!RZOiU$-O+KxLChlhuaYDE3)G?%=7xDj@KM2 zU4{mxE!=&bvi-o?5XOA^9x(95VBoX*Nzb3hmt$*DX~cZCN8tG$F0-s&&RMld_0{HV z(b3k@l{TxYE7WyYHJtC<0ex=-Q=$<@T&05qW2m1?tWoL}k|(*#Y}n=0H%7GtnxivZ z8ykP-QvGFmbC)+XLEutFS_5EVzJkoGnvb$-*iyuGmCBF4IE(C1HLh4?mHS+|iqE12 zEY!~UQ2a7&J;#HiZ??5V;x6$Om?OZ4mM(A2ZIEa5u(M;Mh)M>v*QuxY_8h%PHJ*LA z`->Z4*S_pWeR#jp&3Ng!ZTafgoc!%oMVs6D4lL2I$VhsQ6UYmfV_mFl_DDI>-oaxJ zC-aNSSQ^E6v##ceZxv^6nKy)w`5iX0dWd#ZIN#W>ZGe~-H$J{Cl&hXt8kzQ8({JY0 zbItpqiIe~2rvFIv;Qz&UuSkCfs!(VHkb{)TbAWP+md=Mi-4@^fC@p&Naq??pNm=&j z+GuPyS!fM+MWbMN9KQ_@Z6pl7{HHkC6GnmzMM-J`p#0{TwZP-2>8|(i1FI(6AuT4t zoL8~mw`SIk2}$fI(gav90sAC>{avtDhUP;{?nu4VyQiI+YM=RTBcTSYm`qF|7o`Z7 zd%G^K#q2^Y*{kjr0NRU zu#zqBt=Qw@?MO6YMIS^mZb)GPgj~{yA^)2o2W4i6j*62?4QT8E!z#Aoj)q5QX068S ziS$;}_l|K|dfRfu?eSa|{(!o(rGBNGR#vl!^sr|nuQ|78!;$TKr7Iu((>LlSbie1l z;q`xh!}GB%a(eJ0uQ2~6=Xw6~bL|IK8N82-J8(37i__vbQ^%M#*9EI*ZX~4}qDwxA zw9W_*FlxUslu%2d&r2S@dq8k3Kdx>&S@lyvU7*lfWYpx4wD^M+|MKGi8M5-%dh?}c zV#6^VH)6@jG^%H^XmjIN;X41WjihEzfr~h8Qg83E<*>sUM8<2TGTnsl$qkHpP#wqO z4#lgPA5B(vs0-#cD0{`9=ow;~}mC z&NT{t1?I9}rqC$1`;-LQ%ZvfGVf4=f@MjK6T5QDPylnVxO&!?;T9cd!e~LkuZzOc> zgOsI2Z{YGC*5@z@6ipI1F@SRT38ri$ylwlNA^m9(K-VV>w@Dz`2?_K{9p*4$fmMeD z+CxxrzzqjXRtAFD^3UwgpqBGTB~Yik04xN}hFuRrNDUc3jII%zPv4K8L-ctOm1CE{ zY^U2kqHW+gRb|F-EjJnsm5uU`8tq;{F1Cwtd*GFN z9}E6!oX`$@)N&T*J{v#j{h3+T70mAVa%R^AInu;OhfBItDx3YB!sOQ0!1B&r)&sG# z3+q;P=%?74v@s*;x|TiSv|Wh(MY`GJz9nXk*L%vOCQSb7Gkgap(&kGbJxAd@pyQMR zSyBS+H*du8L`602N297n4Do&ICN}6V2gw<)a?L9kiWQb|+2Xu!R2m$69EKl|S3n1@bb(yC1mF zS}M;kvF#ae87I%F4)i(1OSkKk7RS*Id9VW70j3~7{(?!mQB|oD-!Ci)Wdf^hqAqGR z4u&fW$HPj~9t=6#iF003gHyZ<&z1uFuVRX3ui*GH4E9EiLN&j0JZYGuXmy*>dq(a?_hZwb}8sbYZ1S3tz*WAZnHH- z#*J+c&-<{>Ve8sb6Nfgtnz!xup++PO7qIYS7uI%B@=NipCbpSMRZ>_IGuvz=SV&~_ zN}w6V1mQNuYxcZc)ZL1Vrw3Go_ELPBSmc{C4mPDOWI6a zw|&}tF5-tJ$P!%gLBBOY|VGVOOQIEE5*o_uc zgU#p|$1C_u1l^H~J`|K%FXu`r;7j{F8B}{Pu%m7G$Zh+!m7~L{34LXx=2&dja^O2m zX)b~ft;NfQi?QBQs3$jd#3yiON(?f@yZN9C4dOP8Xg%KcU_tJg+_7Ft{|vPJF?7uZ zWxP%evj}*k`751(kI3_h(J6P_Na*}aU6SGvawA5x5VBx9s>jC(BEhz)t&=`39ez;wvT)mi#h_9j~G)G(4ZX!MQ!7K-V=2@S`1bhu6htw zMtXG{ld}TNozG~2k-hl&=tHi3rK^1v4BX}6btbb7j0vF=TPFsw6=-UzQ#}^JGmO>f zzaF3`7_Syx%}AyqL-wWD%iJ_i9Gd$KO>=A3;Rko(zA*pv#B-kh_UgB4r|ljdOV&PH zKR4-@^Rs?i_*Q${8nAr9qIs2=LM)mrT^c`Cz``GXE;6!aGFz4INp1ENwbzPzj><5%jG#D2|>(GsY z_U5(F15QhcWPP0bb9k=q`}k@X$Aj(3eA%K${oWJ(FVe|<-i0+;Y2Ie@T|a50q&;Ta zo(Ov6ZPszJ?$nu}K#LAD$N4XfKNnwqQ>K375APx+1WS(09pF>?7@Y*fW{lv35AR?6 z0=+6+KV<$^4G6Pf&7!J*ir-DsteR(U?33o>HoGvOkjZ6M&Gwa+gH_P8vN^4O_giW& zA%r14p)`X{2J~7vS`dJ+MwSbWY3bt)vwhZ@Ugc5cKQ&dl1C=AuG&?`< zdAmq@U<5d^`$@Fx+tp5g4nNQPvb{aGD4j$`Mw6d>G*7wv*cA#+{nJK(H?$xlu7;=~ zvjT*04d)^%?WMXtvQ)t~j#vUMAddvm4PHEtv!6>hZ=zljBn+#=-yU^t<4{nVEh4es0qc}n-un=&m2U4w6CuFA;JgT6oc z(^(L&h;Nd7GP^ejmY|jQ=z-#RkiUP(B~-ESt7A-HysHjn;(c7pR?CiX5t-Z5Ihu=K zfI9A?E%LRhWazd8SZWXQ&T~hIZN9!15aAPuC1gNwa9&Jb0v@wyE9ooIXv%$&j<~== zo;x-|(iE-DP4J>G=bLS9DgM<24-^NSN2_1Pm~M;CHLs(5!*gR}R0}K4hZhR*XR(m9 z%xAc-yZ##7KNlXUfAQsm|1F4$6c$KAPFjn83VKQ#a6&;SEAvGhVi6#|i+tGWYYhl} z?1&~;{^w|r%y&MoevEF7M058Sx$8|3LXQ1vmxK=0bRXjl)dt!Ib4zA?!pm%W#74hL zqjvv9!vEkF(qHSa*(X4-uveS{b8fH*PqEdaIqeF0oW8TJq@8FTV(rE%iY_CliS#HN z3IvSIxtpoOWEIMqUe^XrgVvxRdq`W2mFU05yHvYXWW_BxE-gL-f{jEr;y~#7hRtyV zQ^QJdTYNXK%THvPp>7PT(MXO#+eH+lsJ75wwb=)Q_%*kEEGrHSoh5hsj;8x9x@Nb* zt#K?jQ_-uy?CiEQj}yyqJzsyH()7v3Dodan!B`(z;7Q2+fITK@HsVmvAJO5T=>8+R zz)g6<<=2^?FSENtu?AZ=3Dl;E><%GiKLH`>cimDn+J3&)27!Y(&Cnko!BRJ8@eZvdBfN5q6ztRVw zC9nj)u(Ko(mNQn_4T=9u&*_oS4cD-lEbZ?R?e;>{nWzhD1hO%muJ9yL+I9Abqg zaOb#i3*cMd_~Rg+`#TT>P7vP^+hG<9M(i}-5o1z6N=N?je)vRV@Jz^Ha(Hkk0++ug zf4)QNsl;l?p`?j=rtBkWB;j{Yga0}y!fqmQo-&bqqN+Cw`I#D1s{5sMu}G!ags=d6 z?VOSscso-?r0H_~6o~lO96b2)eZMzQMosi9(`kP79*OVC5eX&jOm|Pp1G?Fn1=7Oc zza|B#S_zYLlt9a=U_fF3&Eben0(OJNTj zaKg#B{>RQZoZ$ehNweZ+h8FMP%kglL{`Rso&2kOdbY7+!T2Pe`lYf;96nz?XQ`YU> z?Exj8drPkA+sd2${476l^z$fhYt(|pf$ry`0I2$8)KE|KlOsP6o3j7(vhWL)kc6KUg!tHwI}fHh4md*w|J^>Z}z2^@D-O zI#^QJ0<4)NMR)WWAcc`si`RJaV(0ic_+I8NzLiwa>hJ3Po5eMX_EMxjof^y?Q~DTa zAgEU&x0q|J1N^d`q<+#X%7H$n5(`Gj&N?n@<8PQK~6EeV&*j$GNXvxMJX zaA+Rx%Z7hK0rw5e71=nr+-saLlh(2W%nBE*McX)Ws4Q_^;VmG#Hz=b~!m~89TF3eJ zK~F@puT6}w0=Q#Z#qk;imC;U1x3tjx;xXlx=FilhKE|DOz)dXubJ%hGV9@?w;BwDA zd{->@0bFhlA7!c^q!6?*Q<}Hs9>F<&M1*02ybIT}+`v!$a4uqbSNt@3)lEQ1kuw$F zuWe~HwhwRWeeF9yv_u5yUQ!t4?=ER3#HfVJfvIqw5){GXb#~r|a7?e8?32(jJkFQ> zW`o3z7$NyJ?k1Vh^cfv%Yt^E1W7bmKb4l|UnlFO`cqCc3h};)NHR)XSaeYgC_1Txl z@q&$Di?3WcNmV4xVMUSU>9)zV2JToDSmAhcbRS5 z_|=yvXQ#Kh>DW_a-^H)$Y@g-kg-E~pbAg#$XDqEanKiLdq@2uZ7!sX8mk-$aa6eR& z!?l;Rh@3dF>NEz&<&*QOywvq;ep6|7@#)e0O*@$6*laRuRc<-j&M_J2U>#fmb8TlUj8xjn?H{n8&PR@8Tx+MR*T3EuK$X-JbV>GXk`t9IWBtw zF1N-^DHDMp3io1biL}L6j5Wt}*_9K5`-V06sP^_2sf91VeldJTOIaiK?uIx@0`aQD z)8X{kXZ_MaBOKszv!nUT?_(gVN}l&D8iFnr*;iF6`}h) zHdGPUiS&yjc+?7`dGIRzdiN@#c1#{=MtR`!&rc7dH}BI{O?*f5vTy4g$GvU)BPx7G zLbkF{eY0x7_t+!u_e6HhRFfE30HdM74^S6DJZkT2c$YFjkkTD^g5KWR@*zQgJElV? zs&#aaoewZHePtWrYhO`NctHafIUWWa5fSy^>zBdm3@wzv>!=u0rns4+C-{05g=#S% zJv*WR=MEBekb+46p~Ki?8SS2?$*5*QOkMPjG@sVQ~ZA>(OY_Q z2<4foj3%ZQQI65TnDM;nnCKLr&1Gx@UiB9&MyN^f|V1d0gaWlErRJHT;( zxlB}_AXc{Td?CF&2*PQ4N57ejvVHY9vw=Cy%qjoX0K^7cv?rnANTdAGmsv^sT&@Ifn9XU<-Kwcfq|@ zD&2-NHnXohO@2>B!kt(jg}VXAR`xgVI@?^gavlV4+6y9~FYCc-=?AhHYS>B;xO$)< zG<_^ihT!WUCjzebF(-F6>ZR6_(B-uwD)`}Ap@lbF!JmBbI;vN#O|)f4nPUZ9mYlp& zgl{=YZrVur(D7#sMfe2l zNcI_A?nL4il8z_}SBl7dLqWudrI6rdZW!TF*tSa4=gA8!+wwUVj_9{oYp>UxXX#%4 z&H&Rwc^?g`DqN^ITC`K??Y;b>2O;oY|35V^>^RudQ!Bbl9<~CZ@b>|bZ#e*xsZ}OF zY(aPin7=OToeJ=Pc4XmdYUgAw$mtt*1Y(^35r4tg!46R{8J6EcZ%d#f)*L|k_6l(WJ1eA}}vvUor30y`}yvqmR++s_fyt!?kbXB26wn2U#S8Tth z*{{;Y?e!%o46p&jp41Zx67b-_ixs*-=tS2`*buD4vyONOLWhSH>1VY1Q;{*=s>|E% z4m3m*wydbt>nUEtTi}=O>-Vl8Pvd>$(yKh%W!vJPcG@h%b>H~Mi2ob;9@1;Tw-rDG z&iB!x1((p00X(|&+i(wWEDLmAws@=Rb-u8wU#sL0AhHDmY7vGqg|VTYr3F_REyxEh z@r7T4f5PFg96r7(Sbtahs%EURk~pu#0YC6ZiWUD1fM|&7eH*zYJc|~RXJWsB^m%QS zeT@0dJN%v@XI8}5PJgyE>SlA(O>uy55z{GbDwg6(TO8BwqTBK;4aQ`*KG-P%Bpu#E z%JCGbTM1p!{yN)sk~gV4lT%x^j;eF{{ZIu(p2Mi`%eS=zZyd zH0u<)1`@h<^n=&c?LYbb)>}qMAmxH46Zk!q`5L8}!WCFINgi9)Yo*-b?0LS_SY*+` zQ1UjKRqD|^z>g0zVMccE!|q#n@9!S{R+*^YlJvrhR}@U_d0ny*|4vQN0&w!fdSJxf zUfBsH3yQ={3t!}lk6NH9L!Ix@yI*?|dTL;Hx=L~!X|~83NgvJQq@Nx!IPKO;F+JPk zb2i{#R2{Kzfqq*sq(*uD} z-2h?D54yYP>rHPisV=Rg@B{5yVnfEY%==t~jy0j&w^`9-!`*Si(qhZM2j+h;eWJfO zgGC|9V6|`#z83C|<}Dqx&_Rs2u~FD!@BNCe|Cl7hA5@# z&2yvN%~R67vJc6DQ)?0SfHe?F;)kWi^nK`e{vOBcu4oKDwiaYWVh1dDT}nI%vgy%z zw@bV+{bkA5_IM_D)tx?;8)I%}I^h>jrKI-E%+Cv(C;e(td$L09k$4`pmU)7 zMzl)%j^bsB3&ZZF=V_T$!gz~4_j+sb%M*p1pA!PAY?ihdlw8tqN?6^LguIyl2=@i}*_rl0 zv9e=%GdpjW^)E%g2v?$mfd3QDyUovLI`Lz}pBC$#;AX}$W;UijycQ((E!Irw8#-%U zWv}3s&kug++$LK7$cYy9rmtTtl1W&4_lb{c2;t=qF%j28Ms_lL+<7>WQmvp4RTnzb zEv~)ijd5e6)06mt;oRq52BH9@!)1RHIC`q_Rdt>*V+nG1G}ZIaiIdltUd@1y3<>y} zBTJhmHAL#zY+Bkzen%MHXn;D$`}9Od7}#bk)~t5ZX!l)^my&*u7Gam)mg~E-?XsK; zd$8klhr=56HLsEejHMcXFe})UfcOWBl>LMPC1A`ahnNZ&;nP^M=#)5nbiCnQBCaU+ zg^-xaWku8{0c~GHbmH*7htHirxDP&0d)Bk!>;%m|LKQ*L-{5rj#tElxDQrjUq>Ck- zV3dK*vb&k!m=^z41IKVUle3j?c5!iDv=cu*I-oAUiKtCqgFJMt^)!oSETrAP_rgxk z_A6g{p zM^ay)6rR50%?p924wN+nK{({9a0~W^sR7(I`%>w8F_Yy*jp+VRiH~L~1nfzoWmaf> z-soqbOFLYY#d^ldN*LSGVQk=T|2)6VpD^!Ze0O+c#-Q2hgv9Ic8TV5%!%{r3K*^4U zfn9Gvp^2|7U5mu!Jfa0wGv;^rGnHtbRT^7g$2n(&@w8+y_P(ZoyK6tII{BK&8|}`^ zFUfup8Ml4aFHw7c`E5=JoEI;euP+z}1dEfzeugVE?7qA8W@?ORD|e8t%a66nQmj=t z$B!?|VJe_lx90X+)#10&Kka`!U^ut4sJM}4TQz}8tT}oX5-^(Ej|69Qtfj+LN0(4`o#z@74SDSn)o-Pt|c+X!+^V zMftBPgOX`3<^9G@i>{w?p%secpGbXURm137cY#v7#hO4WVlBuJKP3{-mf_d=8nsmd z)SB;EQRknvI?82iE=uOsme;!-x#k)Y^N4PSo=-SyZQ1{;ZgF02n}z;>mT9+Fa$7Nhw_$_r zSF*Wq%L~5j`7EDPA&h;$$8$-kB6Z*^XKI$9B?yieC{oJdnP%#aMT6k;Q40DH+06U= zp}vTPYJtrs>8xn_ngv%A0wcJrs$lQ-PyH12oBqtmv-@Mbt~k-o%G|?`T>E2L{Okq1 zX9|n+(2SZRgbkKo;QyLam@?K*r zn+@pF?#6p;eNWt@TQ&#S9+D|6`LquA#d0#LloD@*%a@Qi9hu!MY|eU4tUNg9yugA? z73wiwyDbmbvM*26=_occi(;%0?QdGL>Trhz4*8xZuh3(QTz;_FqeVm+koWmHc2_}S zi!;KCpu60E6MtDsYzW4|8c>KXZB3yjxFtaT5G`l8Oe>gv2w84yUvOpvy@`7rnLS#Q zc$7%(w2yQi^HPL;=EghV-xpzX*kHAJj}w^cU~`b?wHn z@-|#@G(5+D!Rfpj)_}cKEu7xv(~oaa-Kvp#iB3rCC&v58_rKuT%hAY{f&%j!8wqtW zKSKVmU@4LX+oraS!G{0?#GS{qXlahuIyj_}n}OVh5Y~JHz2~2E`!s7NQl27oWi)if z%O$4#dhVEp_h*{RuF|4JeLJ&q%#wdJd2OA^%|{OS@#6oGOCU-963>4Dgj# zdM_s1&TKu>>Zddu7pQQLz;gv#h#CpXuy^KVrV8xU5JOxPUrkVEtf93y@oO&yM4BbZ zKlbj>!|& z8kvY=Y_wTispfMg*K@cD`LZWFV!&)f>dBxHnKE%OXQi2Y8H~^UW{S`%d49>MJL030 z#ToK?6%%^}6Ca|e>ASyGPB>oNNNS4}%mr2YVSs!gcFZsb`f~9Nh7yG+cm7lVZ?uNm z?rYWQqCM#C$6dAOo{Bc}`|69&X1rK`cXZX$uR-uISdP8$fv2ckD&A}V{NTuq#81Ct zJ)@*AIpsbj;1KLX4RQ~nS|*R&>{aaTcI`e`)7abH=kjx=e053HD!#qUBYvG`?n!+e zML;{pL~2Ty{C?Dve|sZ8V#Eq``8Bu~0+KUu`Zo138e7B4#x7-12y;sfSK8=~^s;9U z+r<71^s6~rZFF*wyHQ>A4g4)EkG#A*#P89naf9R1B5puE-WjRMOGBwu3ELh6@~B7) z+RJJ(8NsIEHLn8YMSkwx@-9FYygl@p+ct)6siz{k&!GW12Ru z{WvLIlNzbm+-@*riMDBjL=q^t(Ovi}ue*JmH^f{3aQRl!I|5wbD85xYvR(o`v9I|m zg{l7@&w%7cIS`HBEhiv$u|g87b4UU?>u}p3xZtl{gny9BAJx4E8+nTW=_aE&pgr*% zJeDc|yN&Jk{&0U_-#vfP~5ycaP8U|B{lL#fBrwTqZRZB zH%#t*M85zz2p)bZ`~?l&)_AxG$U%2Cxv?YAkU|W{P*Ytmez^N+ z?7*+}nU$Fuy~F1he@1o4ZJGC)>6#~=ON)2^$pNKByGWco_;cLkX=1iG5npR4-WlKx zi7F;d-;TwJW_^xhp?YfKMC&q=_<*x61m~;#Axt;af^8^ZZU4EI#JL4O^GjmSH93*W zXd&g+3v!SMj&HA;oN6*B4IYlo1=hf#C@y+?oBKWjPVM@*XA61Q&5|E@p1Nv;>i=7S zTp*wsi`J(kyr=lB(v9Qscuq?b&m^5Wnm{>NoL#3McSiSWSE7y9t-j8j`8LK7E9DDoG2ROqo2gGzvU4HL}<&&E zao^?{^xY|6l{>O|CP<6?Jn5;-KeY>H`OT9SRkAo-L)6UCdD55ndc%3l;Utqxb*u_o z%>PN1u?VUE8eiCOiFEWXwMvb#^Lmm`_tV7ShKr>t-U*kQy!z+!^OHCDXlzRkNJgz| z95uqz&pbqLSN}qIr8NnzY(s>_)(q6D%3Lkl!Z7U7cp84;-M;HOw51CAH7R)VWahRm+h7s4( z0$dfy!4uUF;4faGT)c9?nZ6eZ7?(ij7|VLPx>8M52}mO9Q>8R`dN&;z+|$WT-e!{w ziKTvDWB%B(^2061#-bK2f=9(D5PW35q1M8+AJ4{ij#Inq27X>kyVmEiqB|ZOo;*DU89PV)OPi!9~)i9wSX0YTmt91o3i)@e8gUX z(MM7)UhaDW+?k`jbU}0#5#O4(ZnqCRoS74z?;C)Z{+OUqxVF=qq?~RrjOoy>?=HAe zAIue7mpjjG>au;{eU%*oyZHa`!Ef&a3Emouf!dW;{Q_1qE@UjEnd}u_MoJYn~;wlBrO<54m>c$l;bv$#g~Z|Kjf5X%>F^MQ*%CU0lKsv~(6v?gW?3AXGbIjc>A!C-vDKVAePGxkWa+sVWnVc(04mpgN zgQR4#h8iogX7zk<@4fH+?EU+FpVxQ4p4am{yFcnxv8?$VuIqihuj_hW_Xe03Xv#%@ zUac!Bi>h40E4DRu;f~!dEmGY}=-oZN4r6D)Iux)@`Tvq)d*Jhm1}GQUUXMh~IH-Vg zp_p(U*DNW!_3F4~5_2SvdRpl3y83GWo+nkSy6zxq4{htO65?FFU(P=Tk~C`%O6{HX zICc3!HLvA|4lZ;~iIiG;l_aHP&jm#>rf{_!SnQkHAm)hj2A0jbN)@xLLPj(~8krZ< zt?5EobiLE-;`+{fngN<^U-pbVyU%@OA$$@uYW-$HRd~?79po}<#Cy7^+hiSJzWZVR zXBkl-2o7-Iqq(Cb)Sw|wY=bwPg~}+Al^gPeERl`>3M&en)w`S}3>o>tcR#V&gw}Y# z`JQ;^IJQ=3n{#|1$>5XA1r7CBinZQrp@Sro9w?0;`#!yeeK59Uo7jW=8CHY*DBVz< zMh11u07t%u*2Ypa&i7tZ?KuFl{ys;g(d*vXb@nblh>K9CBZ&0_bH7CcPtemrYX{Z* zz=7M5KE2Qb>u|yrNdXgArPVWJ0Kd(d@5ea#9& zTC2G-RxyZAiN~ZL_mC`K1%asZaCU%d(Cnw-zZ1qcO<$2;Qd=qLItZ6%W*+$huqZbh zQl)NG#LMTD=U@cMpUDqq?Ml~EJF5)W@X_m8J6G*yQ93vW3Q+${Kg3FXQ$#*PxbC+z zSGA7oZ6%Dp2Fr=Y;q%srm8k2$MkNA%a0v@!$Pz@Q3BE$P+7Ojcqk0v$+%5*edWBCb zXb%_j=UiWL(IMWHx|y$98eywxqw@9W(x+WkmVXGczJ?%sq;Xw%VU-qI%Olj0iBv;0 z=I#eHsF5?D>dU9c^{+=H+*zYGLP~V-vr#3KzN@^!j*;y*89aC^W>1@NVfp?Q)74?n zA+XB{byw@I(xTK<9L#MR3 zm8P58PL(=5;cz;^;3&hDzMx0ku}cCgx# za&Y|s0Oa0E_r_G2_&f+{;lcFcFbg=6HP5_vG?_sRu=f!JGh{+nO*odcSt*}3d#O!~ zx8BrgWyEuI?NmsN*nt8*zHT!0_A1hYp9NBILEiQ2sW&`*v%YkuR?ryP?A{({XBW46 zUr$d@--XrwzP|pm?yGf{zO%jD+gp>Mx<;o_x*2zSkDpWeY&Gmzzw&Ly5oRF8QVw z`pE6Lm>(v4>==h!Jf$!@ut&x&{qA2T&X$SPoz$Eq^{%hWUUC4Yj0#IRQG(szV*wwr>&2{>s}@aeNil5o> z=dYPG(6e2rw!%gIX=hI^+{uUJhx>OpDqgS4BvwzO0l5zxWDlX+jt@GP5=FJBjo1J) zQE_$;9d{8^k}yw^VO2Y>ftkI#6w<#1jecCGvG}No+)kx*$C&26i=ol=>J@S^+{!31 zh*PEUcbr1+ksQQHWGKnNm*8($MWZptkttstlR=E$(V7PZo95(_H(PX;^IKH?)@%z5 zW~iY>>W1p=p7hvZllpA9l_xEgdt-l$u=ow{4L@LH}8FIm}I}FyX|GLfprUBIX6W zo^N6>YTF8(f)sq#`$D!Zu7-s1v#)=h2stel4MA^YfcN z+NPZrpe%+vZ5t*%MCOugD_`+q+Iv_E_M^uMj6xY)3cxZ7=$MxE=4ii+<*nbFKGN&0 z7gXNf=JUN}33_9o`ZGg423< zR;UBtF3RFz{KGIJ+ zjsW-yuhZf^@NkOoxfC25Jk92CU}QJ+bGIF);(@n}iZ+2(y?8Vj+yn6p3jNperkRq| ze^eXr!wf_oR8Tu`+@|POl=!>40nVl!2Pd;qyQSdEPVrQBa^GTZ8uT$%bGd8nm1a3bRL^J@%Uj4*-f7 zr}Nn34Mc?#Ps>x9ircCTeLE?9;(Qn5R8awSYg_PU1tb5y5dH>`2}qju(X*xgd&PY+ z*KaIwUvm9=w9(4t*ROqCdnIb|g1O5+Dqp!Y57^ivM07oH5OpkMKe;=-_619|a#sai zKo%RZeTYi9+4?(Y^g64ShwflI1R$J&=B zGHjyu5w!bt6vCb`ykkOQK_{-ZsBEBO6QOV+R@ zzTo}0#(I)QZ^MJUtdx34Il0L5c#d1DyIXaJ268f{=h&qca^r(D#4H)EW-^eSOq4>V zM~hgJJJgk;mL7sAKzQip7gy~P?@wPKttv}jf8U%h+Vifmd5Tq!xa3*-AmF3NpMI-X z`2L%zl?C@zK(N;4Bf<@BFQAT(QZv6+OD&a>;!16jmaO>Kx_GHfrOkZx+EH1mGh%qj zdNH;eDNP)J<2VbfEOSF`8Zs6L7hQ8rj^UH%qfs>x>s(q(+?JeA=D)@p_~Buf1p&+o zOZ!=yBH=_jrY3{S5Aw}W14F@(Fiv!=${#Q&($yh^I^y{ZgDT3}fqJqm)jt?M%}xCJ zsI(!_B4YMP327F3_v1E-VoM@bpXunW-mTqcCxtbDOSC18XErh<-cF5RX*j)Lo`;rL zn-6;(4>TXW0OZ`L0YbHjmQyEG{CSEh&VTOygSDI<@x45mzw~XZ#3L9fbuytF6LW4L84_<(- zZK+$=$n;^8*i728K8tHbyt49|%q3>FO#u_cSdhkRha6t23U08!u{@qI2hh8A&2@zCsVUi-$4 zjd2xdY2Jm8)c7~T7h}hs_1;^zOm5Ju0YWWOa0L>QB5+zyEHXVWOtdTFeDa6ntXE^J zg>rx9+|Kg{EpVYJ)%fP;<6HIBx@xYz+^{hBx0g$0xF%pP?Zx3=VC^bJOapBeYvJvn z6kZ3-2J~M`?QEg?rK-8uj(1j@RnXCfbCxl)1=$xzu}xO%f+-Y(oXY-QKPR=**YqDO zUkc)&BcY_4ej;KSQ)$6v%6~aqL5!&+X8QE2A)SdQGu%_@z$_AgpvIo02khmq96-}e zacObccAE3ueQ#IDOqU4Apx^>V55A>;f~(hd5K+bj$rA-xaKM(GrSx1|UJixh&|y-6 zhY@Jp{aM}nR0f?hZH@swLPpI;?K;d`P#wz1czC#83$U;8tm5?r_j6f)Xjv1JtXIF& zOXi#xr#$vKcdc>BFR5LrG`rnW_+>ziDv=ti%-`XfsColK*@|>pL{bb@sG;c!v*QED z?u~#?QXJkKbogo0f_tx?6g*8c-i}pXmNu8h7eJcUpa*QArGcCXEw!RR>`HGTolj1# zT8S18yb0UUuO|c{#t&%G*T6#i@j@-T!{uX5$41zz*Ibku*8qhz0PcqfD$ zg1Upau?5*#OkT79KsJyd8BjDhIc`!yk;Rr3byTemZMU!7KUb`s$Af42u{~RVy1jaK zT2p?W23R)#bJMZddbAnIse!d<3$TNz{y;CO3?%|}6(+zm!kAR$^slwrTaf+-JfQlt z&}i9J$90FwoqMiFy*yMfhP@#2^o2pZvUuzHm=k&%f$QUSgibY#_@m}%0N=UB`~>-S$$npIV@7xA6_DgI##HE;SXk%HL! zr);epVulUdEx7I5? zkUS8sClZE(qzd7B3x7`oTFv>b(4Vf;%Oe7ZFv^zpRt+lj##A4$n3aS(8nD|lakyWSr)sj^t3;_;~cZLMf>L;W}M3R)YHh2yU^?IRpLfd zt37(FO2^&Qq;UU-Qkhaq|Ja~=*={PN{+)#Cw+Pfj#IB$f0EE&+w&vj~yd5aBF?zo8 z>VHWkjn-vQ*i||{Y{jxzYu%>GR1b#M=Zxi=C%vw(DLm}Eh#hJDeF~i<(a|ktqQpux zTs)iB!YE2jc^GjKRMw*sQx>x~_rm%-E_6O)Dc;jjJQTk`doC6RIyuveUfRqZYRgLl zLJ?b`Hx<)+Akl%jub4eGjkUx=hQL>Rh~xXYVxpdtRH0s-w@`FO@%M}cs0B~KOr@_W zyIi)`BL}_7e?ItNBK4K%8B4xbe&G1=Q{SZ}Wiu-WP6TqUYy^-Da5qQfE6Fu)k~U1B z&B9Jqp&m?kn*|_Q6cZ+VR$J6>AN=sQ)$KO-Lx*@R7jn(JJwKRy5}v(_gpqyARU+Z^ z=hHxO@-Sdst}%+;hmzqFfb5}*yx*JQT@c9d2-~*_hvM#}Zue}jTrM1_Rd>)%3s@3x zw}!ZwY9dT7xaL?RuCw%VGSZuuNn}sgoBRz{!oU9GT!a4$0wcaJa7KxeEHfD7xL1w} z3WTrSU4G=LxS-&c%taR>O`o=N=Hu#QxTX+26|fHumR*M$)wt>p)DvC?=I48dr29U2 zdQE10_ssSJV9aeMcdsL%_TpvK-IB^mm;2{ImwC3(`W_dGvn)Hzb$CFXj~>WB@@3P7 zic{Yf`otw$uj&a+6bCM~c>X@SwneV5W@N`TY00gBmx__DrIOG9F6$CQu@Xk;eCs%W zK7bvnR!hJi{TmPgV$gmBVO%=n#v!0_yPr0`Dd2o@jp-}eq^w8tzM*OKxDZrgg$UX~ zJrP}`FL}c98SSyFU)$$COq8J+p*htWw7l?Hy+=Y*YEsJ@CSFvTtsj2;WaogHY(EOu zuNSU*=n!#2U*>$V%pfqfpb+av25>MWmS3vm9?ZQ0D_JS#_$h|-0srREh;NWEf@7av zzWIu}(KpCfNZ|EVUy}4~s;#D3wOeUry^ORSsGd-s-%Q!OTJC!ZfO7w!M>Aq#Dqsg) zl=tE4_0R|ot}|2OLytQsjdP0s)1YG=135d2-GTWnl2mdeG|6BCk!y7lDbfu9#Yi>F8eu zuE|&>G(1l|z+-8mmPb0UHDE2|{3oG{R3pBl+Bbhi?^;|J!S7IVe9rZ!Ly2F-={#RUKw^5sHx=u7^o;F{*wA?jcox6ku&yw z3{Z>F<_^E$~LlBKV64kKB+x{eX!HExC7lXU&*3x*WC?*yokCl1gaA69pt=ZV%!Y z3CRNk{}m=Ooz4BMP)Y#d`z~fg4z}y5BA*$8%<54#A$p zB!283gRcOcSP`20qeERzh<7G+n3$B*>q+D*7x9Ue4+kv(Q&D|#e6`J{L^ zc!^W1rk5iD=H7=(ESMwv#B-*2N4>JuuEVe#t`OSjj)Yb8i2PXz8rRb>U9v*)qslkg zX}OqPCuVYg{eGLo54r1BJKvJQHU)nB#{8B~Vdi^RK7al+{oB~su&=2puv#a5^GyT2 zuN4=Otnz^d;-xl_G%q){&zuJWW;r`9ppeltzFZ>JgbU5_>8jEZ#wAtS-3_&?$so3$ z7%$NZsjJfK5S$56ux;nP9H#_t*+16#y3?4xHf-R?rB6VarVE!Z7i*yYxco0EF#&%| zE+ogzzSfQzpkY}(p)Jl&9G`^VT9!h|O$STecmtu9z;_x)UHwH|y(88dxnt&7$)-)qqBZD1_S6vBze zE?>^FKhfD~?_#sd<(h_+WJ$Yuv*pew#cjnA){XXUBg@^wwJd)tj;g77-Dmw#E%j_c zJ%utasC0$Ljw8rDgGjS!Q>OZ#*}lL25xz#mwBp1eq23}8c1NWhp_-r+rs;E}U1Wir z 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 jFmMv_r-gx&h(9e1oJ9O-Vc;a>?U_CM+;i{z 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 Yf~5z@2}YFzq%f{iXsqddW7qiq1KD~WQvd(} diff --git a/app/images/safari-pinned-tab.svg b/app/images/safari-pinned-tab.svg deleted file mode 100644 index c44220f2..00000000 --- a/app/images/safari-pinned-tab.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/package-lock.json b/package-lock.json index f357c683..9a686aac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3401,6 +3401,187 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, "core-js": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", diff --git a/package.json b/package.json index 67371ef8..72b29ed5 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", "babel-plugin-add-module-exports": "^1.0.0", + "copy-webpack-plugin": "^4.6.0", "cross-env": "^5.2.0", "css-loader": "^2.1.0", "cssnano": "^4.1.8", diff --git a/server/index.pug b/server/index.pug index dc4459cc..1a0d1bc5 100644 --- a/server/index.pug +++ b/server/index.pug @@ -16,7 +16,7 @@ html meta(property='og:url' content=config.baseUrl) meta(name='description' content=config.description) title= config.title - // link(rel='icon' type='image/png' href='/static/images/favicon.png') + link(type='image/x-icon' rel='shortcut icon' href=`${assets.basePath}/favicon.ico`) +asset('app', 'css') body #app diff --git a/webpack.config.babel.js b/webpack.config.babel.js index 6c3cafdb..9c999013 100644 --- a/webpack.config.babel.js +++ b/webpack.config.babel.js @@ -1,6 +1,7 @@ import path from 'path' import AssetsPlugin from 'assets-webpack-plugin' +import CopyPlugin from 'copy-webpack-plugin' import MiniCssExtractPlugin from 'mini-css-extract-plugin' import OptimizeCssAssetsPlugin from 'optimize-css-assets-webpack-plugin' import UglifyJsPlugin from 'uglifyjs-webpack-plugin' @@ -94,6 +95,11 @@ module.exports = (env, options) => { devtool: isDevelopment ? 'cheap-module-source-map' : undefined, plugins: [ new AssetsPlugin(), + new CopyPlugin([{ + flatten: true, + from: getPath(`${PATH_SRC}/images/*`), + to: getPath(PATH_DIST), + }]), new MiniCssExtractPlugin({ filename: `${filename}.css`, }), From c6679af10d32879785e83a466fe1cdc221882123 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 25 Jan 2019 19:12:21 +0100 Subject: [PATCH 18/77] Use configs from database in server methods --- common/utils/slots.js | 11 +- server/controllers/auth.js | 171 ++++++++++-------- server/controllers/meeting.js | 78 ++++---- server/controllers/meta.js | 24 ++- server/controllers/ticket.js | 63 ++++--- .../20190125152302-create-config-table.js | 18 +- .../seeders/20190125162811-default-config.js | 2 + server/helpers/mailTemplate.js | 85 ++++++--- server/models/config.js | 18 +- server/services/mail.js | 4 - server/services/paypal.js | 80 ++++---- 11 files changed, 316 insertions(+), 238 deletions(-) diff --git a/common/utils/slots.js b/common/utils/slots.js index f22bc853..0d39c8a2 100644 --- a/common/utils/slots.js +++ b/common/utils/slots.js @@ -9,13 +9,8 @@ function addSlotDuration(date, slotSize) { return moment(date).add(slotSize, 'minutes') } -export function isInFestivalRange(date) { - return moment(date).isBetween( - config.festivalDateStart, - config.festivalDateEnd, - null, - '[]' - ) +export function isInFestivalRange(date, start, end) { + return moment(date).isBetween(start, end, null, '[]') } export function checkSlotSize(slotSize) { @@ -97,6 +92,7 @@ export function generateNewSlotItems(slotSize, existingSlots) { } let slotIndex = 0 + // @TODO Pass config as a function argument let from = moment(config.festivalDateStart) let to = addSlotDuration(from, slotSize) @@ -120,6 +116,7 @@ export function generateNewSlotItems(slotSize, existingSlots) { } export function getSlotTimes(slotSize, slotIndex) { + // @TODO Pass config as a function argument const date = config.festivalDateStart return { from: moment(date).add(slotSize * slotIndex, 'minutes'), diff --git a/server/controllers/auth.js b/server/controllers/auth.js index 7ffd7148..eb60afc0 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -1,23 +1,24 @@ import httpStatus from 'http-status' import { Op } from 'sequelize' +import User from '../models/user' import checkout from '../services/checkout' -import config from '../../common/config' import db from '../database' import pick from '../utils/pick' -import User from '../models/user' import { APIError } from '../helpers/errors' import { executePayment } from '../services/paypal' import { generateRandomHash } from '../utils/randomHash' import { generateToken } from '../services/passport' +import { getConfig } from '../config' +import { translate } from '../../common/services/i18n' + import { sendAdminRegistrationNotification, sendPasswordReset, sendRegistrationComplete, } from '../helpers/mailTemplate' -import { translate } from '../../common/services/i18n' -const PASSWORD_RESET_EXPIRY = 15 // Min +const PASSWORD_RESET_EXPIRY = 15 // Minutes const permittedFields = [ 'city', @@ -32,10 +33,12 @@ const permittedFields = [ 'street', ] -const product = { - name: config.title, - description: translate('api.products.participation'), - price: config.participationPrice, +function getProduct(config) { + return { + name: config.title, + description: translate('api.products.participation'), + price: config.participationPrice, + } } function signup(req, res, next) { @@ -44,50 +47,56 @@ function signup(req, res, next) { const { email, paymentMethod } = fields - return User.count({ where: { isParticipant: true } }) - .then(count => { - if (count >= config.maximumParticipantsCount) { - next( - new APIError( - translate('api.errors.auth.registrationLimitExceeded'), - httpStatus.LOCKED - ) - ) - return null - } - - return User.findOne({ where: { email } }) - .then(existingUser => { - if (existingUser) { + return getConfig(['maximumParticipantsCount', 'title', 'description']) + .then(config => { + return User.count({ where: { isParticipant: true } }) + .then(count => { + if (count >= config.maximumParticipantsCount) { next( new APIError( - translate('api.errors.auth.userExistsAlready'), - httpStatus.BAD_REQUEST + translate('api.errors.auth.registrationLimitExceeded'), + httpStatus.LOCKED ) ) return null } - return User.create(fields, { returning: true }) - .then(user => { - return checkout(paymentMethod, user, product) - .then(data => { - sendAdminRegistrationNotification({ - paymentMethod, - product, - user, - }) - res.json(data) + const product = getProduct(config) + + return User.findOne({ where: { email } }) + .then(existingUser => { + if (existingUser) { + next( + new APIError( + translate('api.errors.auth.userExistsAlready'), + httpStatus.BAD_REQUEST + ) + ) + return null + } + + return User.create(fields, { returning: true }) + .then(user => { + return checkout(paymentMethod, user, product) + .then(data => { + sendAdminRegistrationNotification({ + paymentMethod, + product, + user, + }) + res.json(data) + }) + .catch(err => next(err)) }) .catch(err => next(err)) }) - .catch(err => next(err)) }) }) } function paypalCheckoutSuccess(req, res, next) { const { paymentId, PayerID } = req.query + const queryParams = { where: { paymentId, @@ -97,34 +106,41 @@ function paypalCheckoutSuccess(req, res, next) { rejectOnEmpty: true, } - return User.findOne(queryParams) - .then(user => { - executePayment(paymentId, PayerID) - .then(() => { - return User.update({ isActive: true }, queryParams) + return getConfig(['title', 'description']) + .then(config => { + return getProduct(config) + }) + .then(product => { + return User + .findOne(queryParams) + .then(user => { + executePayment(paymentId, PayerID) .then(() => { - sendRegistrationComplete({ - product, - user, - }, user.email) + return User.update({ isActive: true }, queryParams) + .then(() => { + sendRegistrationComplete({ + product, + user, + }, user.email) - res.redirect('/?paypalSuccess') + res.redirect('/?paypalSuccess') + }) + .catch(err => next(err)) }) - .catch(err => next(err)) + .catch(() => next( + new APIError( + translate('api.errors.auth.paymentError'), + httpStatus.INTERNAL_SERVER_ERROR + ) + )) }) .catch(() => next( new APIError( - translate('api.errors.auth.paymentError'), - httpStatus.INTERNAL_SERVER_ERROR + translate('api.errors.auth.paymentMethodError'), + httpStatus.BAD_REQUEST ) )) }) - .catch(() => next( - new APIError( - translate('api.errors.auth.paymentMethodError'), - httpStatus.BAD_REQUEST - ) - )) } function paypalCheckoutCancel(req, res) { @@ -178,31 +194,34 @@ function requestResetToken(req, res, next) { generateRandomHash().then(passwordResetToken => { const passwordResetAt = db.fn('NOW') - return User.update({ passwordResetAt, passwordResetToken }, queryParams) - .then(data => { - if (data[0] === 0) { - next( - new APIError( - translate('api.errors.auth.userNotExisting'), - httpStatus.BAD_REQUEST - ) - ) - return - } + return getConfig('baseUrl') + .then(config => { + return User.update({ passwordResetAt, passwordResetToken }, queryParams) + .then(data => { + if (data[0] === 0) { + next( + new APIError( + translate('api.errors.auth.userNotExisting'), + httpStatus.BAD_REQUEST + ) + ) + return + } - const user = data[1][0] - const passwordResetUrl = `${config.basePath}/reset/${passwordResetToken}` + const user = data[1][0] + const passwordResetUrl = `${config.baseUrl}/reset/${passwordResetToken}` - sendPasswordReset({ - passwordResetUrl, - user, - }, user.email) + sendPasswordReset({ + passwordResetUrl, + user, + }, user.email) - res.json({ - message: 'ok', - }) + res.json({ + message: 'ok', + }) + }) + .catch(err => next(err)) }) - .catch(err => next(err)) }) } diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 452ccf9f..30726785 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -22,6 +22,7 @@ import { import { APIError } from '../helpers/errors' import { formatEventTime } from '../../common/utils/dateFormat' +import { getConfig } from '../config' import { isInFestivalRange } from '../../common/utils/slots' import { translate } from '../../common/services/i18n' @@ -221,50 +222,55 @@ export default { } } - const isInFestival = ( - process.env.NODE_ENV === 'production' ? isInFestivalRange(from) : true - ) + return getConfig(['festivalDateStart, festivalDateEnd']) + .then(config => { + const { festivalDateStart: start, festivalDateEnd: end } = config - if (!isInFestival) { - next( - new APIError( - translate('api.errors.meeting.festivalRange'), - httpStatus.PRECONDITION_FAILED + const isInFestival = ( + process.env.NODE_ENV === 'production' ? isInFestivalRange(from, start, end) : true ) - ) - return null - } - - const to = moment(from).add(DURATION_HOURS, 'hours') - return Meeting.findOne({ - where, - include: [{ - association: MeetingBelongsToConversation, - include: [{ - association: ConversationBelongsToManyAnimal, - }], - }], - }) - .then(meeting => { - if (!meeting) { - return createMeeting(req.user.id, from, to) + if (!isInFestival) { + next( + new APIError( + translate('api.errors.meeting.festivalRange'), + httpStatus.PRECONDITION_FAILED + ) + ) + return null } - const isAlreadyExisting = meeting.conversation.animals.find(animal => { - return animal.userId === req.user.id + const to = moment(from).add(DURATION_HOURS, 'hours') + + return Meeting.findOne({ + where, + include: [{ + association: MeetingBelongsToConversation, + include: [{ + association: ConversationBelongsToManyAnimal, + }], + }], }) + .then(meeting => { + if (!meeting) { + return createMeeting(req.user.id, from, to) + } - if (isAlreadyExisting) { - throw new APIError( - translate('api.errors.meeting.alreadyJoined'), - httpStatus.BAD_REQUEST - ) - } + const isAlreadyExisting = meeting.conversation.animals.find(animal => { + return animal.userId === req.user.id + }) + + if (isAlreadyExisting) { + throw new APIError( + translate('api.errors.meeting.alreadyJoined'), + httpStatus.BAD_REQUEST + ) + } - return joinMeeting(meeting.conversation, req.user.id) + return joinMeeting(meeting.conversation, req.user.id) + }) + .then(() => res.json({ status: 'ok' })) + .catch(err => next(err)) }) - .then(() => res.json({ status: 'ok' })) - .catch(err => next(err)) }, } diff --git a/server/controllers/meta.js b/server/controllers/meta.js index c88b36e7..7530bd8e 100644 --- a/server/controllers/meta.js +++ b/server/controllers/meta.js @@ -1,19 +1,23 @@ -import config from '../../common/config' +import { getConfig } from '../config' import User from '../models/user' function information(req, res, next) { - return User.count({ - where: { - isParticipant: true, - }, - }) - .then(count => { - res.json({ - isRegistrationFull: count >= config.maximumParticipantsCount, + // @TODO Use this endpoint to serve configs + return getConfig('maximumParticipantsCount') + .then(config => { + return User.count({ + where: { + isParticipant: true, + }, }) + .then(count => { + res.json({ + isRegistrationFull: count >= config.maximumParticipantsCount, + }) + }) + .catch(err => next(err)) }) - .catch(err => next(err)) } export default { diff --git a/server/controllers/ticket.js b/server/controllers/ticket.js index 6841577c..f75504f5 100644 --- a/server/controllers/ticket.js +++ b/server/controllers/ticket.js @@ -1,10 +1,10 @@ import httpStatus from 'http-status' +import User from '../models/user' import checkout from '../services/checkout' -import config from '../../common/config' import pick from '../utils/pick' -import User from '../models/user' import { APIError } from '../helpers/errors' +import { getConfig } from '../config' import { sendAdminRegistrationNotification } from '../helpers/mailTemplate' import { translate } from '../../common/services/i18n' @@ -20,44 +20,47 @@ const permittedFields = [ 'street', ] -const product = { - name: config.title, - description: translate('api.products.ticket'), - price: config.festivalTicketPrice, -} - function signup(req, res, next) { const fields = pick(permittedFields, req.body) fields.isVisitor = true const { email, paymentMethod } = fields - return User.findOne({ where: { email } }) - .then(existingUser => { - if (existingUser) { - next( - new APIError( - translate('api.errors.auth.userExistsAlready'), - httpStatus.BAD_REQUEST - ) - ) - return null - } + return getConfig(['title', 'description']) + .then(config => { + return User.findOne({ where: { email } }) + .then(existingUser => { + if (existingUser) { + next( + new APIError( + translate('api.errors.auth.userExistsAlready'), + httpStatus.BAD_REQUEST + ) + ) + return null + } + + const product = { + name: config.title, + description: translate('api.products.ticket'), + price: config.festivalTicketPrice, + } - return User.create(fields, { returning: true }) - .then(user => { - return checkout(paymentMethod, user, product) - .then(data => { - sendAdminRegistrationNotification({ - paymentMethod, - product, - user, - }) - res.json(data) + return User.create(fields, { returning: true }) + .then(user => { + return checkout(paymentMethod, user, product) + .then(data => { + sendAdminRegistrationNotification({ + paymentMethod, + product, + user, + }) + res.json(data) + }) + .catch(err => next(err)) }) .catch(err => next(err)) }) - .catch(err => next(err)) }) } diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js index 9f533311..6af289b3 100644 --- a/server/database/migrations/20190125152302-create-config-table.js +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -11,20 +11,22 @@ function configField(type, allowNull = false) { module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable('configs', { - timezone: configField(Sequelize.STRING), + baseUrl: configField(Sequelize.STRING), currency: configField(Sequelize.STRING), - title: configField(Sequelize.STRING), + defaultCity: configField(Sequelize.STRING), + defaultCounty: configField(Sequelize.CHAR), + defaultLatitude: configField(Sequelize.FLOAT), + defaultLongitude: configField(Sequelize.FLOAT), description: configField(Sequelize.STRING), - baseUrl: configField(Sequelize.STRING), + festivalDateEnd: configField(Sequelize.DATEONLY), + festivalDateStart: configField(Sequelize.DATEONLY), + festivalTicketPrice: configField(Sequelize.FLOAT, true), mailAddressAdmin: configField(Sequelize.STRING), mailAddressRobot: configField(Sequelize.STRING), maximumParticipantsCount: configField(Sequelize.INTEGER, true), - festivalTicketPrice: configField(Sequelize.FLOAT, true), participationPrice: configField(Sequelize.FLOAT, true), - defaultCity: configField(Sequelize.STRING), - defaultCounty: configField(Sequelize.CHAR), - defaultLatitude: configField(Sequelize.FLOAT), - defaultLongitude: configField(Sequelize.FLOAT), + timezone: configField(Sequelize.STRING), + title: configField(Sequelize.STRING), }) }, down: queryInterface => { diff --git a/server/database/seeders/20190125162811-default-config.js b/server/database/seeders/20190125162811-default-config.js index 4aed5055..ea3ccb25 100644 --- a/server/database/seeders/20190125162811-default-config.js +++ b/server/database/seeders/20190125162811-default-config.js @@ -14,6 +14,8 @@ module.exports = { defaultCity: 'Berlin', defaultCounty: 'Germany', defaultLatitude: 52.53647, + festivalDateEnd: '2017-08-27', + festivalDateStart: '2017-08-24', defaultLongitude: 13.40780, }]) }, diff --git a/server/helpers/mailTemplate.js b/server/helpers/mailTemplate.js index 6f000d18..9e3e2013 100644 --- a/server/helpers/mailTemplate.js +++ b/server/helpers/mailTemplate.js @@ -1,9 +1,9 @@ import fs from 'fs' import path from 'path' -import config from '../../common/config' import logger from '../helpers/logger' import mail from '../services/mail' +import { getConfig } from '../config' const TEMPLATES_PATH = 'mails' @@ -18,6 +18,7 @@ function generateTemplateString(template) { } function textTemplate(url, locals) { + // @TODO Load templates from database return new Promise((resolve, reject) => { const filePath = path.join(__dirname, '../', url) @@ -37,19 +38,15 @@ function textTemplate(url, locals) { function sendMail(locals, subject, receiver, templateName, sender) { return new Promise((resolve, reject) => { - const mergedLocals = Object.assign({}, locals, { config }) - textTemplate(`${TEMPLATES_PATH}/${templateName}.txt`, mergedLocals) + textTemplate(`${TEMPLATES_PATH}/${templateName}.txt`, locals) .then(text => { const mailOptions = { subject, text, + from: sender, to: receiver, } - if (sender) { - mailOptions.from = sender - } - // Do not send real emails when in development if (process.env.NODE_ENV === 'development') { logger.info('SEND MAIL', mailOptions) @@ -61,6 +58,7 @@ function sendMail(locals, subject, receiver, templateName, sender) { reject(err) return } + resolve() }) }) @@ -69,31 +67,74 @@ function sendMail(locals, subject, receiver, templateName, sender) { } export function sendWireTransferDetails(locals, receiver) { - const subject = `${config.title} TRANSFER DETAILS` - return sendMail(locals, subject, receiver, 'wireTransferDetails') + return getConfig(['title', 'mailAddressAdmin']) + .then(config => { + const subject = `${config.title} TRANSFER DETAILS` + + return sendMail( + locals, + subject, + receiver, + 'wireTransferDetails', + config.mailAddressAdmin + ) + }) } export function sendRegistrationComplete(locals, receiver) { - const subject = `WELCOME TO ${config.title}` - return sendMail(locals, subject, receiver, 'registrationComplete') + return getConfig(['title', 'mailAddressAdmin']) + .then(config => { + const subject = `WELCOME TO ${config.title}` + + return sendMail( + locals, + subject, + receiver, + 'registrationComplete', + config.mailAddressAdmin + ) + }) } export function sendAdminRegistrationNotification(locals) { - const subject = 'NEW REGISTRATION' - return sendMail( - locals, - subject, - config.mailAddressAdmin, - 'adminRegistrationNotification', - config.mailAddressRobot - ) + return getConfig(['mailAddressAdmin', 'mailAddressRobot']) + .then(config => { + const subject = 'NEW REGISTRATION' + + return sendMail( + locals, + subject, + config.mailAddressAdmin, + 'adminRegistrationNotification', + config.mailAddressRobot + ) + }) } export function sendPasswordReset(locals, receiver) { - const subject = 'PASSWORD RESET' - return sendMail(locals, subject, receiver, 'passwordReset') + return getConfig('mailAddressAdmin') + .then(config => { + const subject = 'PASSWORD RESET' + + return sendMail( + locals, + subject, + receiver, + 'passwordReset', + config.mailAddressAdmin + ) + }) } export function sendActivityNotification(subject, locals, receiver) { - return sendMail(locals, subject, receiver, 'activityNotification') + return getConfig('mailAddressAdmin') + .then(config => { + return sendMail( + locals, + subject, + receiver, + 'activityNotification', + config.mailAddressAdmin + ) + }) } diff --git a/server/models/config.js b/server/models/config.js index 506ecc5d..1d0fa67d 100644 --- a/server/models/config.js +++ b/server/models/config.js @@ -16,20 +16,22 @@ function configField(type, allowNull = false) { // This model holds global configurations which are crucial for // the whole application. Defaults are defined in a database seed. const Config = db.define('config', { - timezone: configField(Sequelize.STRING), + baseUrl: configField(Sequelize.STRING), currency: configField(Sequelize.STRING), - title: configField(Sequelize.STRING), + defaultCity: configField(Sequelize.STRING), + defaultCounty: configField(Sequelize.CHAR), + defaultLatitude: configField(Sequelize.FLOAT), + defaultLongitude: configField(Sequelize.FLOAT), description: configField(Sequelize.STRING), - baseUrl: configField(Sequelize.STRING), + festivalDateEnd: configField(Sequelize.DATEONLY), + festivalDateStart: configField(Sequelize.DATEONLY), + festivalTicketPrice: configField(Sequelize.FLOAT, true), mailAddressAdmin: configField(Sequelize.STRING), mailAddressRobot: configField(Sequelize.STRING), maximumParticipantsCount: configField(Sequelize.INTEGER, true), - festivalTicketPrice: configField(Sequelize.FLOAT, true), participationPrice: configField(Sequelize.FLOAT, true), - defaultCity: configField(Sequelize.STRING), - defaultCounty: configField(Sequelize.CHAR), - defaultLatitude: configField(Sequelize.FLOAT), - defaultLongitude: configField(Sequelize.FLOAT), + timezone: configField(Sequelize.STRING), + title: configField(Sequelize.STRING), }) export default Config diff --git a/server/services/mail.js b/server/services/mail.js index 783ff2de..4a783d5d 100644 --- a/server/services/mail.js +++ b/server/services/mail.js @@ -1,7 +1,5 @@ import nodemailer from 'nodemailer' -import config from '../../common/config' - export default nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, @@ -10,6 +8,4 @@ export default nodemailer.createTransport({ user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, -}, { - from: config.mailAddressAdmin, }) diff --git a/server/services/paypal.js b/server/services/paypal.js index bb15a310..53fd5e86 100644 --- a/server/services/paypal.js +++ b/server/services/paypal.js @@ -1,6 +1,6 @@ import paypal from 'paypal-rest-sdk' -import config from '../../common/config' +import { getConfig } from '../config' function extractLink(links, key) { for (let i = 0; i < links.length; i += 1) { @@ -8,6 +8,7 @@ function extractLink(links, key) { return links[i].href } } + return '' } @@ -20,45 +21,49 @@ export function createPayment(product) { client_secret: process.env.PAYPAL_SECRET, }) - const items = [{ - name, - description, - price, - quantity: 1, - currency: config.currency, - }] + return new Promise((resolve, reject) => { + getConfig('currency') + .then(config => { + const items = [{ + name, + description, + price, + quantity: 1, + currency: config.currency, + }] - const paymentDetails = { - intent: 'sale', - payer: { - payment_method: 'paypal', - }, - redirect_urls: { - return_url: process.env.PAYPAL_RETURN_URL, - cancel_url: process.env.PAYPAL_CANCEL_URL, - }, - transactions: [{ - description: name, - amount: { - currency: config.currency, - total: price, - }, - item_list: { - items, - }, - }], - } + const paymentDetails = { + intent: 'sale', + payer: { + payment_method: 'paypal', + }, + redirect_urls: { + return_url: process.env.PAYPAL_RETURN_URL, + cancel_url: process.env.PAYPAL_CANCEL_URL, + }, + transactions: [{ + description: name, + amount: { + currency: config.currency, + total: price, + }, + item_list: { + items, + }, + }], + } - return new Promise((resolve, reject) => { - paypal.payment.create(paymentDetails, (err, payment) => { - if (err) { - return reject(err) - } - return resolve({ - redirect: extractLink(payment.links, 'approval_url'), - payment, + paypal.payment.create(paymentDetails, (err, payment) => { + if (err) { + return reject(err) + } + + return resolve({ + redirect: extractLink(payment.links, 'approval_url'), + payment, + }) + }) }) - }) }) } @@ -70,6 +75,7 @@ export function executePayment(paymentId, payerId) { if (err) { return reject(err) } + return resolve(payment) }) }) From 0aa907b5a7edb23ec60dd49eddb757a2f6b0ce20 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 17:13:15 +0100 Subject: [PATCH 19/77] Expose config in API meta endpoint --- server/config.js | 11 +++++++---- server/controllers/meta.js | 8 +++++--- server/models/config.js | 4 ++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/server/config.js b/server/config.js index 9024dd43..71d3d720 100644 --- a/server/config.js +++ b/server/config.js @@ -1,12 +1,15 @@ import Config from './models/config' -function getConfig(fields) { +function getConfig(fields = []) { const attributes = (typeof fields === 'string') ? [fields] : fields + const query = (attributes.length > 0) ? { attributes } : {} - return Config.findOne({ - attributes, - }) + return Config.findOne(query) .then(config => { + if (attributes.length === 0) { + return config + } + return attributes.reduce((acc, field) => { acc[field] = config[field] return acc diff --git a/server/controllers/meta.js b/server/controllers/meta.js index 7530bd8e..a9604b4c 100644 --- a/server/controllers/meta.js +++ b/server/controllers/meta.js @@ -3,8 +3,7 @@ import { getConfig } from '../config' import User from '../models/user' function information(req, res, next) { - // @TODO Use this endpoint to serve configs - return getConfig('maximumParticipantsCount') + return getConfig() .then(config => { return User.count({ where: { @@ -13,7 +12,10 @@ function information(req, res, next) { }) .then(count => { res.json({ - isRegistrationFull: count >= config.maximumParticipantsCount, + config, + status: { + isRegistrationFull: count >= config.maximumParticipantsCount, + }, }) }) .catch(err => next(err)) diff --git a/server/models/config.js b/server/models/config.js index 1d0fa67d..8ff951b4 100644 --- a/server/models/config.js +++ b/server/models/config.js @@ -32,6 +32,10 @@ const Config = db.define('config', { participationPrice: configField(Sequelize.FLOAT, true), timezone: configField(Sequelize.STRING), title: configField(Sequelize.STRING), +}, { + timestamps: false, }) +Config.removeAttribute('id') + export default Config From e6243fb71117e8683298f19523393514f96a8d48 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 17:14:05 +0100 Subject: [PATCH 20/77] Update meta reducer, add config field --- app/scripts/reducers/meta.js | 12 ++++++++++-- app/scripts/views/Register.js | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/scripts/reducers/meta.js b/app/scripts/reducers/meta.js index 8370e777..353946b5 100644 --- a/app/scripts/reducers/meta.js +++ b/app/scripts/reducers/meta.js @@ -3,8 +3,12 @@ import update from 'immutability-helper' import ActionTypes from '../actionTypes' const initialState = { - isRegistrationFull: false, + config: {}, + status: { + isRegistrationFull: false, + }, isLoading: false, + isReady: false, } export default (state = initialState, action) => { @@ -15,8 +19,12 @@ export default (state = initialState, action) => { }) case ActionTypes.META_SUCCESS: return update(state, { - isRegistrationFull: { $set: action.payload.isRegistrationFull }, + config: { $set: action.payload.config }, + status: { + isRegistrationFull: { $set: action.payload.status.isRegistrationFull }, + }, isLoading: { $set: false }, + isReady: { $set: true }, }) case ActionTypes.META_FAILURE: return update(state, { diff --git a/app/scripts/views/Register.js b/app/scripts/views/Register.js index 13ff3e7a..9300b316 100644 --- a/app/scripts/views/Register.js +++ b/app/scripts/views/Register.js @@ -39,7 +39,8 @@ class Register extends Component { } function mapStateToProps(state) { - const { isRegistrationFull, isLoading } = state.meta + const { status, isLoading } = state.meta + const { isRegistrationFull } = status return { isLoading, From 76e285b19030065dc49a32fee65768d6a7adf30a Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 17:16:20 +0100 Subject: [PATCH 21/77] Add withConfig container to fetch configurations in app, use it in Home view --- app/scripts/containers/index.js | 1 + app/scripts/containers/withConfig.js | 54 ++++++++++++++++++ app/scripts/index.js | 11 +++- app/scripts/views/Home.js | 83 ++++++++++++---------------- common/locales/views.en.js | 2 +- 5 files changed, 100 insertions(+), 51 deletions(-) create mode 100644 app/scripts/containers/withConfig.js diff --git a/app/scripts/containers/index.js b/app/scripts/containers/index.js index 1ab6a63e..afc4fd48 100644 --- a/app/scripts/containers/index.js +++ b/app/scripts/containers/index.js @@ -4,6 +4,7 @@ export { default as asInfiniteListCalendar } from './asInfiniteListCalendar' export { default as asInfiniteListItem } from './asInfiniteListItem' export { default as withApiState } from './withApiState' export { default as withAuthState } from './withAuthState' +export { default as withConfig } from './withConfig' export { default as withDrawerState } from './withDrawerState' export { default as withFlash } from './withFlash' export { default as withImageUpload } from './withImageUpload' diff --git a/app/scripts/containers/withConfig.js b/app/scripts/containers/withConfig.js new file mode 100644 index 00000000..079ba602 --- /dev/null +++ b/app/scripts/containers/withConfig.js @@ -0,0 +1,54 @@ +import PropTypes from 'prop-types' +import React, { Component } from 'react' +import { connect } from 'react-redux' + +import { updateMetaInformation } from '../actions/meta' + +export default function withConfig(...args) { + let field + let WrappedComponent + + if (args.length === 2 && typeof args[0] === 'string') { + field = args[0] + WrappedComponent = args[1] + } else { + WrappedComponent = args[0] + } + + class ConfigContainer extends Component { + static propTypes = { + config: PropTypes.object.isRequired, + isReady: PropTypes.bool.isRequired, + updateMetaInformation: PropTypes.func.isRequired, + } + + componentWillMount() { + // Fetch configuration from server when not given yet + if (!this.props.isReady) { + this.props.updateMetaInformation() + } + } + + render() { + // Do not render component when config field was not set + if (this.props.isReady && field && !(field in this.props.config)) { + return null + } + + return + } + } + + function mapStateToProps(state) { + const { config, isReady } = state.meta + + return { + config, + isReady, + } + } + + return connect(mapStateToProps, { updateMetaInformation })(props => { + return + }) +} diff --git a/app/scripts/index.js b/app/scripts/index.js index 8fe49d75..b8871748 100644 --- a/app/scripts/index.js +++ b/app/scripts/index.js @@ -1,32 +1,37 @@ import '../styles/app.scss' import React from 'react' -import moment from 'moment-timezone' import { ConnectedRouter } from 'connected-react-router' import { Provider } from 'react-redux' import { createBrowserHistory } from 'history' import { render } from 'react-dom' -import config from '../../common/config' import configureStore from './store' import flash from './actions/flash' import { checkExistingToken } from './actions/auth' import { getItem, hasItem } from './services/storage' import { translate } from '../../common/services/i18n' +import { updateMetaInformation } from './actions/meta' import Routes from './routes' import { App } from './views' -moment.tz.setDefault(config.timezone) +// @TODO +// moment.tz.setDefault(config.timezone) const initialState = {} const history = createBrowserHistory() const store = configureStore(initialState, history) +// Get configuration from server +store.dispatch(updateMetaInformation()) + +// Check auth token validity when given if (hasItem('token')) { store.dispatch(checkExistingToken(getItem('token'))) } +// Show message when user comes from PayPal checkout if (window.location.href.includes('?paypalSuccess')) { store.dispatch( flash({ diff --git a/app/scripts/views/Home.js b/app/scripts/views/Home.js index 5d3b3bde..a8d0b646 100644 --- a/app/scripts/views/Home.js +++ b/app/scripts/views/Home.js @@ -1,61 +1,50 @@ -import PropTypes from 'prop-types' -import React, { Component } from 'react' +import React, { Component, Fragment } from 'react' import YouTube from 'react-youtube' -import config from '../../../common/config' import { StaticPage } from '../components' import { translate } from '../../../common/services/i18n' -import { withAuthState } from '../containers' - -const videoOptions = { - playerVars: { - autoplay: 0, - cc_load_policy: 0, - controls: 1, - disablekb: 1, - fs: 0, - iv_load_policy: 3, - modestbranding: 1, - playsinline: 1, - showinfo: 0, - rel: 0, - }, -} +import { withAuthState, withConfig } from '../containers' + +const HomeVideo = withConfig('videoHomeId', props => { + const videoOptions = { + playerVars: { + autoplay: 0, + cc_load_policy: 0, + controls: 1, + disablekb: 1, + fs: 0, + iv_load_policy: 3, + modestbranding: 1, + playsinline: 1, + showinfo: 0, + rel: 0, + }, + } -const videoId = config.video.tutorial + return ( + +
+

{ translate('views.home.videoTitle') }

+ +
+
+ +
+
+
+ ) +}) class Home extends Component { - static propTypes = { - isAdmin: PropTypes.bool.isRequired, - isAuthenticated: PropTypes.bool.isRequired, - isParticipant: PropTypes.bool.isRequired, - } - render() { - const { isAdmin, isAuthenticated, isParticipant } = this.props - - if (isAuthenticated && (isParticipant || isAdmin)) { - return ( -
- -
-

{ translate('views.home.platformTutorial') }

-
-
- -
-
-
- ) - } - return (
+
) } diff --git a/common/locales/views.en.js b/common/locales/views.en.js index 374eca66..fa49a0a3 100644 --- a/common/locales/views.en.js +++ b/common/locales/views.en.js @@ -3,7 +3,7 @@ export default { imageGalleryTitle: 'Images', }, home: { - platformTutorial: 'Platform tutorial', + videoTitle: 'Platform tutorial', }, login: { title: 'Login', From 9ebbbc4ab7beee42a678e05454ff5a254143e720 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 17:16:32 +0100 Subject: [PATCH 22/77] Remove annoying comment linting --- .eslintrc | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.eslintrc b/.eslintrc index 08cc1b21..97124339 100644 --- a/.eslintrc +++ b/.eslintrc @@ -287,24 +287,6 @@ } ], "space-before-blocks": 2, - "lines-around-comment": [ - "error", - { - "beforeBlockComment": true, - "allowBlockStart": true, - "allowArrayStart": false, - "allowArrayEnd": false, - "afterLineComment": false, - "beforeLineComment": true - } - ], - "capitalized-comments": [ - "error", - "always", - { - "ignoreConsecutiveComments": true - } - ], "space-before-function-paren": [ 2, "never" From 8f667544e625310187568c0f2012e7c6030ccdd4 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 18:24:15 +0100 Subject: [PATCH 23/77] Do not show components with config when it wasnt loaded yet --- app/scripts/containers/withConfig.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/scripts/containers/withConfig.js b/app/scripts/containers/withConfig.js index 079ba602..8269da0e 100644 --- a/app/scripts/containers/withConfig.js +++ b/app/scripts/containers/withConfig.js @@ -30,8 +30,12 @@ export default function withConfig(...args) { } render() { + if (!this.props.isReady) { + return null + } + // Do not render component when config field was not set - if (this.props.isReady && field && !(field in this.props.config)) { + if (field && !(field in this.props.config)) { return null } From 28e825351f7334963f747d046143a8ec5760994c Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 18:24:25 +0100 Subject: [PATCH 24/77] Make sidebar configurable --- app/scripts/components/Sidebar.js | 223 ++++++++++++--------- app/scripts/components/SidebarGifStream.js | 7 +- 2 files changed, 131 insertions(+), 99 deletions(-) diff --git a/app/scripts/components/Sidebar.js b/app/scripts/components/Sidebar.js index 2a50098a..85ee808f 100644 --- a/app/scripts/components/Sidebar.js +++ b/app/scripts/components/Sidebar.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types' -import React, { Component } from 'react' +import React, { Component, Fragment } from 'react' import { Link } from 'react-router-dom' import { @@ -10,15 +10,123 @@ import { SidebarToggle, } from './' -import config from '../../../common/config' import { translate } from '../../../common/services/i18n' import { withAuthState, + withConfig, withDrawerState, withUserStatus, } from '../containers' +const ActivitySection = withConfig('isActivityStreamEnabled', () => { + return ( + +
+ { translate('components.sidebar.activityTitle') } +
+ + + +
+ + { translate('components.sidebar.activityButton') } + +
+
+ ) +}) + +const InboxSection = withConfig('isInboxEnabled', props => { + return ( + +
+ + { + translate('components.sidebar.inboxButton', { + count: props.unreadMessagesCount, + }) + } + +
+ +
+
+ ) +}) + +const GifStreamSection = withConfig('gifStreamServerUrl', props => { + return ( + +
+ { translate('components.sidebar.gifStreamTitle') } +
+ +

+ { translate('components.sidebar.gifStreamDescription' )} +   + + + { translate('components.sidebar.gifStreamLink' )} + +

+ + + +
+
+ ) +}) + +const RandomMeetingSection = withConfig('isRandomMeetingEnabled', () => { + return ( + + +
+ { translate('components.sidebar.randomMeetingTitle') } +
+ +

{ translate('components.sidebar.randomMeetingDescription' )}

+ + + +
+
+ ) +}) + +const SignUpParticipantSection = withConfig('isSignUpParticipantEnabled', () => { + return ( + +

{ translate('components.sidebar.signUpHeader' )}

+ +
+ + { translate('components.sidebar.signUpButton' )} + +
+ +
+
+ ) +}) + +const SignUpVisitorSection = withConfig('isSignUpVisitorEnabled', () => { + return ( + +

{ translate('components.sidebar.visitorHeader' )}

+ +
+ + { translate('components.sidebar.visitorButton' )} + +
+ +
+
+ ) +}) + class Sidebar extends Component { static propTypes = { firstname: PropTypes.string, @@ -45,6 +153,7 @@ class Sidebar extends Component { { translate('components.sidebar.profileButton' )} + @@ -66,86 +175,17 @@ class Sidebar extends Component { ) } - renderActivity() { - return ( -
- -
- - { - translate('components.sidebar.activityButton') - } - -
-
- ) - } - - renderInbox() { - return ( -
- - { - translate('components.sidebar.inboxButton', { - count: this.props.unreadMessagesCount, - }) - } - -
- ) - } - - renderStream() { - if (!config.gifStreamServer) { - return null - } - - return ( -
-
-
- { translate('components.sidebar.gifStreamTitle') } -
-

- { translate('components.sidebar.gifStreamDescription' )} -   - - { translate('components.sidebar.gifStreamLink' )} - -

- -
- ) - } - - renderRandomMeeting() { - return ( -
-
-
- { translate('components.sidebar.randomMeetingTitle') } -
-

{ translate('components.sidebar.randomMeetingDescription' )}

- -
- ) - } - renderAuthenticatedContent() { - const { isActive, isParticipant, isAdmin } = this.props + const { isActive, isParticipant, isAdmin, unreadMessagesCount } = this.props if (isActive && (isParticipant || isAdmin)) { return (
-
- { translate('components.sidebar.activityTitle') } -
- { this.renderActivity() } +
- { this.renderInbox() } - { this.renderStream() } - { this.renderRandomMeeting() } -
+ + +
) } @@ -161,29 +201,16 @@ class Sidebar extends Component { if (!this.props.isAuthenticated) { return (
-
+
+
-

{ translate('components.sidebar.signUpHeader' )}

-
- - { translate('components.sidebar.signUpButton' )} - -
-
-

{ translate('components.sidebar.visitorHeader' )}

-
- - { translate('components.sidebar.visitorButton' )} - -
-
+ + +

{ translate('components.sidebar.loginHeader' )}

+
{ translate('components.sidebar.loginButton' )} @@ -202,6 +229,7 @@ class Sidebar extends Component {
{ this.renderSidebarContent() }
+
{ this.renderSidebarBottom() }
@@ -213,6 +241,7 @@ class Sidebar extends Component { return (
) @@ -252,11 +271,11 @@ class FormLocationSelector extends Component { const { value } = props.input this.state = { - city: value.city || config.defaultCity, + city: value.city || props.config.defaultCity, cityCode: value.cityCode || '', - country: value.country || config.defaultCountry, - latitude: value.latitude || config.defaultLatitude, - longitude: value.longitude || config.defaultLongitude, + country: value.country || props.config.defaultCountry, + latitude: value.latitude || props.config.defaultLatitude, + longitude: value.longitude || props.config.defaultLongitude, mode: value.mode || DEFAULT_MODE, street: value.street || '', } @@ -271,4 +290,4 @@ class FormLocationSelector extends Component { } } -export default asFormField(FormLocationSelector) +export default withConfig(asFormField(FormLocationSelector)) diff --git a/app/scripts/components/LocationMap.js b/app/scripts/components/LocationMap.js index 131f903d..b5246036 100644 --- a/app/scripts/components/LocationMap.js +++ b/app/scripts/components/LocationMap.js @@ -2,12 +2,12 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' -import config from '../../../common/config' import styles from '../utils/googleMapStyle.json' import { translate } from '../../../common/services/i18n' +import { withConfig } from '../containers' + const DEFAULT_ZOOM = 15 -const GOOGLE_MAP_SCRIPT_URL = `https://maps.googleapis.com/maps/api/js?v=3.exp&key=${config.googleMapApiKey}` const MAP_OPTIONS = { disableDefaultUI: true, styles, @@ -28,15 +28,18 @@ const LocationGoogleMap = withScriptjs(withGoogleMap(props => { class LocationMap extends Component { static propTypes = { + config: PropTypes.object.isRequired, latitude: PropTypes.number.isRequired, longitude: PropTypes.number.isRequired, } render() { + const googleMapUrl = `https://maps.googleapis.com/maps/api/js?v=3.exp&key=${this.props.config.googleMapApiKey}` + return ( } - googleMapURL={GOOGLE_MAP_SCRIPT_URL} + googleMapURL={googleMapUrl} loadingElement={
{ translate('common.loading') } @@ -52,4 +55,4 @@ class LocationMap extends Component { } } -export default LocationMap +export default withConfig('googleMapApiKey', true, LocationMap) From 196def492fb1d3e1553822d5a761eccfe2917deb Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Tue, 12 Feb 2019 19:59:43 +0100 Subject: [PATCH 29/77] Make payment buttons in app configurable, remote sensitive configs from response --- app/scripts/actions/auth.js | 2 +- app/scripts/components/NavigationLinks.js | 1 + app/scripts/components/RegistrationWizard.js | 118 +++++++++++++------ app/scripts/components/TicketWizard.js | 71 ++++++++--- app/scripts/routes.js | 2 + server/config.js | 2 +- server/controllers/meta.js | 48 +++++++- server/mails/wireTransferDetails.txt | 8 +- server/services/checkout.js | 1 + 9 files changed, 197 insertions(+), 56 deletions(-) diff --git a/app/scripts/actions/auth.js b/app/scripts/actions/auth.js index 03fbf7f4..df2fcb24 100644 --- a/app/scripts/actions/auth.js +++ b/app/scripts/actions/auth.js @@ -3,9 +3,9 @@ import { routerActions } from 'connected-react-router' import ActionTypes from '../actionTypes' import flash from './flash' import { FLASH } from '../middlewares/flash' +import { REDIRECT } from '../middlewares/redirect' import { jwtDecode } from '../utils/jwt' import { postRequest } from '../services/api' -import { REDIRECT } from '../middlewares/redirect' import { translate } from '../../../common/services/i18n' export function redirectWhenUnauthenticated(location) { diff --git a/app/scripts/components/NavigationLinks.js b/app/scripts/components/NavigationLinks.js index 88202e2c..ee459ec3 100644 --- a/app/scripts/components/NavigationLinks.js +++ b/app/scripts/components/NavigationLinks.js @@ -32,6 +32,7 @@ const VISITOR_NAVIGATION = [ { localeKey: 'stream', url: '/stream' }, ] +// @TODO Hide Ticket link when isSignUpVisitorEnabled is deactivated const DEFAULT_NAVIGATION = [ { localeKey: 'tickets', url: '/tickets' }, ] diff --git a/app/scripts/components/RegistrationWizard.js b/app/scripts/components/RegistrationWizard.js index f901303a..ca30b5b1 100644 --- a/app/scripts/components/RegistrationWizard.js +++ b/app/scripts/components/RegistrationWizard.js @@ -4,11 +4,11 @@ import Scroll from 'react-scroll' import YouTube from 'react-youtube' import { connect } from 'react-redux' -import config from '../../../common/config' -import { register } from '../actions/auth' import { RegistrationForm } from '../forms' import { StaticPage } from './' +import { register } from '../actions/auth' import { translate } from '../../../common/services/i18n' +import { withConfig } from '../containers' const totalSteps = 3 @@ -27,10 +27,9 @@ const videoOptions = { }, } -const videoId = config.video.registration - class RegistrationWizard extends Component { static propTypes = { + config: PropTypes.object.isRequired, errorMessage: PropTypes.string.isRequired, form: PropTypes.object, isLoading: PropTypes.bool.isRequired, @@ -82,29 +81,52 @@ class RegistrationWizard extends Component { return null } + renderPayPalButton() { + if (!this.props.config.isPayPalEnabled) { + return null + } + + return ( + + ) + } + + renderTransferButton() { + if (!this.props.config.isTransferEnabled) { + return null + } + + return ( + + ) + } + renderPaymentButtons() { if (this.state.isCheckoutClicked && this.props.isLoading) { - return ( -

{ translate('common.loading') }

- ) + return

{ translate('common.loading') }

+ } + + if (!this.props.config.isTransferEnabled && + !this.props.config.isPayPalEnabled) { + return

Warning: No payment was configured

} return (
- - + { this.renderPayPalButton() } + { this.renderTransferButton() }
) } @@ -118,8 +140,11 @@ class RegistrationWizard extends Component { return (

{ title }

+ { this.renderErrorMessage() } + +
+
+
{ this.renderPaymentButtons() }
+
+ ) + } + + renderIntroduction() { + const { videoIntroductionId } = this.props.config + const title = translate('components.registrationWizard.stepTitle', { currentStep: 1, totalSteps, @@ -174,19 +224,16 @@ class RegistrationWizard extends Component { return (

{ title }

+ -
- -
+ + { this.renderIntroductionVideo() } +
+ + ) + } + + renderTransferButton() { + if (!this.props.config.isTransferEnabled) { + return null + } + + return ( + + ) + } + renderPaymentButtons() { if (this.state.isCheckoutClicked && this.props.isLoading) { return ( @@ -64,22 +99,15 @@ class TicketWizard extends Component { ) } + if (!this.props.config.isTransferEnabled && + !this.props.config.isPayPalEnabled) { + return

Warning: No payment was configured

+ } + return (
- - + { this.renderPayPalButton() } + { this.renderTransferButton() }
) } @@ -93,8 +121,11 @@ class TicketWizard extends Component { return (

{ title }

+ { this.renderErrorMessage() } + +
+
+
{ this.renderPaymentButtons() }
+ +
{ this.renderForm() }
@@ -192,4 +202,4 @@ export default connect( flash, updateResource, } -)(PlacesEdit) +)(withConfig(PlacesEdit)) diff --git a/app/scripts/views/Stream.js b/app/scripts/views/Stream.js index 8f4e0edb..2f5482f6 100644 --- a/app/scripts/views/Stream.js +++ b/app/scripts/views/Stream.js @@ -3,18 +3,16 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { PreloadImage } from '../components' -import { withFlash } from '../containers' - -import config from '../../../common/config' import { translate } from '../../../common/services/i18n' +import { withFlash, withConfig } from '../containers' const REFRESH_INTERVAL = 60000 -function fetchStream(marker) { +function fetchStream(marker, streamServerUrl) { const markerStr = marker ? `?marker=${marker}` : '' return new Promise((resolve, reject) => { - fetch(`${config.gifStreamServer}/api/stream${markerStr}`) + fetch(`${streamServerUrl}/api/stream${markerStr}`) .then(response => { if (response.status === 200) { response.json().then(json => resolve(json)) @@ -28,6 +26,7 @@ function fetchStream(marker) { class Stream extends Component { static propTypes = { + config: PropTypes.object.isRequired, flash: PropTypes.func.isRequired, } @@ -91,6 +90,7 @@ class Stream extends Component { > { translate('views.stream.loadOlderImagesButton') } +
+ { this.renderButtons() } { this.renderSpinner() } @@ -130,7 +131,7 @@ class Stream extends Component { const marker = ignoreMarker ? null : this.state.nextMarker - fetchStream(marker) + fetchStream(marker, this.props.config.gifStreamServerUrl) .then(stream => { this.setState({ images: this.state.images.concat(stream.data), @@ -163,4 +164,4 @@ class Stream extends Component { } } -export default withFlash(Stream) +export default withFlash(withConfig('gifStreamServerUrl', true, Stream)) diff --git a/common/config.js b/common/config.js deleted file mode 100644 index 809b1703..00000000 --- a/common/config.js +++ /dev/null @@ -1,44 +0,0 @@ -function isDefined(obj) { - return typeof obj !== 'undefined' -} - -function float(str, fallback) { - return isDefined(str) ? parseFloat(str) : fallback -} - -function integer(str, fallback) { - return isDefined(str) ? parseInt(str, 10) : fallback -} - -const config = { - timezone: process.env.CONFIG_TIMEZONE || 'Europe/Berlin', - title: process.env.CONFIG_TITLE, - description: process.env.CONFIG_DESCRIPTION, - basePath: process.env.CONFIG_URL, - mailAddressAdmin: process.env.CONFIG_MAIL_ADMIN, - mailAddressRobot: process.env.CONFIG_MAIL_ROBOT, - maximumParticipantsCount: integer(process.env.CONFIG_MAXMIMUM_PARTICIPATION_COUNT, 30), - festivalTicketPrice: float(process.env.CONFIG_FESTIVAL_TICKET_PRICE, 10.00), - participationPrice: float(process.env.CONFIG_PARTICIPATION_PRICE, 25.00), - currency: process.env.CONFIG_CURRENCY || 'EUR', - transferDetails: { - receiverName: process.env.CONFIG_TRANSFER_NAME, - bankName: process.env.CONFIG_TRANSFER_BANK, - IBAN: process.env.CONFIG_TRANSFER_IBAN, - BIC: process.env.CONFIG_TRANSFER_BIC, - }, - video: { - registration: process.env.CONFIG_VIDEO_REGISTRATION || 'KRYVH7fGa68', - tutorial: process.env.CONFIG_VIDEO_TUTORIAL || 'ux2R9jwEIgw', - }, - googleMapApiKey: process.env.GOOGLE_MAP_API_KEY, - gifStreamServer: process.env.GIF_STREAM_SERVER, - festivalDateStart: process.env.CONFIG_FESTIVAL_DATE_START || '2017-08-24T00:00:00.000+02:00', - festivalDateEnd: process.env.CONFIG_FESTIVAL_DATE_START || '2017-08-27T00:00:00.000+02:00', - defaultCity: process.env.CONFIG_DEFAULT_CITY || 'Berlin', - defaultCountry: process.env.CONFIG_DEFAULT_COUNTRY || 'Germany', - defaultLatitude: float(process.env.CONFIG_DEFAULT_LATITUDE, 52.53647), - defaultLongitude: float(process.env.CONFIG_DEFAULT_LONGITUDE, 13.40780), -} - -export default config diff --git a/common/utils/slots.js b/common/utils/slots.js index 0d39c8a2..535f0e3c 100644 --- a/common/utils/slots.js +++ b/common/utils/slots.js @@ -1,6 +1,5 @@ import moment from 'moment-timezone' -import config from '../config' import { translate } from '../services/i18n' const TIME_FORMAT = 'HH:mm' @@ -69,7 +68,7 @@ export function getSlotWithIndex(slots, slotIndex) { return slots.find(slot => slot.slotIndex === slotIndex) } -export function generateNewSlotItems(slotSize, existingSlots) { +export function generateNewSlotItems(slotSize, existingSlots = [], festivalDateStart) { const slotItems = [] if (!checkSlotSize(slotSize).isValid) { @@ -92,8 +91,7 @@ export function generateNewSlotItems(slotSize, existingSlots) { } let slotIndex = 0 - // @TODO Pass config as a function argument - let from = moment(config.festivalDateStart) + let from = moment(festivalDateStart) let to = addSlotDuration(from, slotSize) while (isInFestivalRange(to)) { @@ -115,12 +113,10 @@ export function generateNewSlotItems(slotSize, existingSlots) { return slotItems } -export function getSlotTimes(slotSize, slotIndex) { - // @TODO Pass config as a function argument - const date = config.festivalDateStart +export function getSlotTimes(slotSize, slotIndex, festivalDateStart) { return { - from: moment(date).add(slotSize * slotIndex, 'minutes'), - to: moment(date).add(slotSize * (slotIndex + 1), 'minutes'), + from: moment(festivalDateStart).add(slotSize * slotIndex, 'minutes'), + to: moment(festivalDateStart).add(slotSize * (slotIndex + 1), 'minutes'), } } @@ -137,10 +133,12 @@ export function isInClosedOrder(arr) { }) } -export function createEventSlots(slotIndexes, placeId, eventId, slotSize) { +export function createEventSlots(slotIndexes, placeId, eventId, slotSize, festivalDateStart) { slotIndexes.sort((slotA, slotB) => slotA - slotB) + return slotIndexes.map(slotIndex => { - const { from, to } = getSlotTimes(slotSize, slotIndex) + const { from, to } = getSlotTimes(slotSize, slotIndex, festivalDateStart) + return { eventId, from, @@ -151,9 +149,10 @@ export function createEventSlots(slotIndexes, placeId, eventId, slotSize) { }) } -export function createDisabledSlots(slotIndexes, placeId, slotSize) { +export function createDisabledSlots(slotIndexes, placeId, slotSize, festivalDateStart) { return slotIndexes.map(slotIndex => { - const { from, to } = getSlotTimes(slotSize, slotIndex) + const { from, to } = getSlotTimes(slotSize, slotIndex, festivalDateStart) + const slot = { from, to, diff --git a/server/controllers/event.js b/server/controllers/event.js index e9874a1b..821437db 100644 --- a/server/controllers/event.js +++ b/server/controllers/event.js @@ -20,6 +20,7 @@ import { import pick from '../utils/pick' import { APIError } from '../helpers/errors' import { createEventSlots, isInClosedOrder } from '../../common/utils/slots' +import { getConfig } from '../config' import { EventBelongsToAnimal, @@ -131,12 +132,13 @@ function areSlotsAvailable(req, fields, existingEventId) { }) } -function areResourcesAvailable(req, existingEventId) { +function areResourcesAvailable(req, existingEventId, festivalDateStart) { const slots = createEventSlots( req.body.slots, null, null, - req.place.slotSize + req.place.slotSize, + festivalDateStart ) const eventFrom = slots[0].from @@ -194,7 +196,7 @@ function areResourcesAvailable(req, existingEventId) { }) } -function createEvent(req, fields) { +function createEvent(req, fields, festivalDateStart) { return new Promise((resolve, reject) => { return Place.findByPk(fields.placeId, { include: [ @@ -231,7 +233,8 @@ function createEvent(req, fields) { req.body.slots, place.id, event.id, - place.slotSize + place.slotSize, + festivalDateStart ) return Slot.bulkCreate(slots) @@ -255,7 +258,7 @@ function createEvent(req, fields) { }) } -function updateEvent(req, fields) { +function updateEvent(req, fields, festivalDateStart) { return new Promise((resolve, reject) => { return Place.findByPk(fields.placeId, { include: [ @@ -307,7 +310,8 @@ function updateEvent(req, fields) { req.body.slots, place.id, event.id, - place.slotSize + place.slotSize, + festivalDateStart ) // Filter out only new resources for notifications @@ -352,7 +356,7 @@ function updateEvent(req, fields) { }) } -function validateEvent(req, fields, eventId) { +function validateEvent(req, fields, eventId, festivalDateStart) { return Place.findByPk(fields.placeId) .then(place => { if (!place) { @@ -368,7 +372,7 @@ function validateEvent(req, fields, eventId) { return Promise.all([ areSlotsInClosedRange(req), areSlotsAvailable(req, fields, eventId), - areResourcesAvailable(req, eventId), + areResourcesAvailable(req, eventId, festivalDateStart), ]) }) } @@ -378,15 +382,18 @@ export default { const fields = pick(permittedFields, req.body) // Check if everything is correct before we do anything - return validateEvent(req, fields) - .then(() => { - // Create event - return createEvent(req, fields) - .then(event => res.json(prepareResponse(event, req))) - }) - .catch(err => { - next(err) - return + return getConfig('festivalDateStart') + .then(config => { + return validateEvent(req, fields, config.festivalDateStart) + .then(() => { + // Create event + return createEvent(req, fields, config.festivalDateStart) + .then(event => res.json(prepareResponse(event, req))) + }) + .catch(err => { + next(err) + return + }) }) }, destroy: (req, res, next) => { @@ -469,15 +476,18 @@ export default { const fields = pick(permittedFields, req.body) // Check if everything is correct before we do anything - return validateEvent(req, fields, req.resourceId) - .then(() => { - // Update event - return updateEvent(req, fields) - .then(event => res.json(prepareResponse(event, req))) - }) - .catch(err => { - next(err) - return + return getConfig('festivalDateStart') + .then(config => { + return validateEvent(req, fields, req.resourceId, config.festivalDateStart) + .then(() => { + // Update event + return updateEvent(req, fields, config.festivalDateStart) + .then(event => res.json(prepareResponse(event, req))) + }) + .catch(err => { + next(err) + return + }) }) }, } diff --git a/server/controllers/place.js b/server/controllers/place.js index e60537c1..5b729856 100644 --- a/server/controllers/place.js +++ b/server/controllers/place.js @@ -21,6 +21,7 @@ import { import pick from '../utils/pick' import { APIError } from '../helpers/errors' import { createDisabledSlots } from '../../common/utils/slots' +import { getConfig } from '../config' import Place from '../models/place' import Slot from '../models/slot' @@ -121,23 +122,26 @@ export default { const body = pick(permittedFieldsCreate, req.body) const values = preparePlaceValues(body) - values.slots = createDisabledSlots( - body.disabledSlots, - null, - body.slotSize - ) - - return Place.create({ - ...values, - animal: { - userId: req.user.id, - }, - }, { - include, - returning: true, + return getConfig('festivalDateStart').then(config => { + values.slots = createDisabledSlots( + body.disabledSlots, + null, + body.slotSize, + config.festivalDateStart + ) + + return Place.create({ + ...values, + animal: { + userId: req.user.id, + }, + }, { + include, + returning: true, + }) + .then(data => res.json(prepareResponse(data, req))) + .catch(err => next(err)) }) - .then(data => res.json(prepareResponse(data, req))) - .catch(err => next(err)) }, destroyWithSlug: (req, res, next) => { return deletePlacesByIds([req.resourceId]) @@ -222,12 +226,15 @@ export default { }) }) .then(() => { - const slots = createDisabledSlots( - body.disabledSlots, - previousPlace.id, - previousPlace.slotSize - ) - return Slot.bulkCreate(slots) + return getConfig('festivalDateStart').then(config => { + const slots = createDisabledSlots( + body.disabledSlots, + previousPlace.id, + previousPlace.slotSize, + config.festivalDateStart + ) + return Slot.bulkCreate(slots) + }) }) .then(() => { return Place.findByPk(previousPlace.id, { include }) From 301b99bd9800cfdcf017f9837f798e3c1f353b89 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:07:53 +0100 Subject: [PATCH 31/77] Remove sponsored field in footer --- app/scripts/components/Footer.js | 14 ++++---------- app/styles/app.scss | 1 - app/styles/components/sponsors.scss | 11 ----------- common/locales/components.en.js | 1 - 4 files changed, 4 insertions(+), 23 deletions(-) delete mode 100644 app/styles/components/sponsors.scss diff --git a/app/scripts/components/Footer.js b/app/scripts/components/Footer.js index bc45d78d..0973a94d 100644 --- a/app/scripts/components/Footer.js +++ b/app/scripts/components/Footer.js @@ -13,37 +13,31 @@ class Footer extends Component { { translate('components.footer.home') } +
  • { translate('components.footer.about') }
  • +
  • { translate('components.footer.information') }
  • +
  • { translate('components.footer.contact') }
  • +
  • { translate('components.footer.imprint') }
  • -
    -

    - { translate('components.footer.supportedBy') } -

    - -
    ) } diff --git a/app/styles/app.scss b/app/styles/app.scss index 3f852dee..d239e75d 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -49,7 +49,6 @@ @import "components/sidebar"; @import "components/sidebar-toggle"; @import "components/slot-editor"; -@import "components/sponsors"; @import "components/value-selector"; @import "components/youtube"; diff --git a/app/styles/components/sponsors.scss b/app/styles/components/sponsors.scss deleted file mode 100644 index baaf6809..00000000 --- a/app/styles/components/sponsors.scss +++ /dev/null @@ -1,11 +0,0 @@ -.sponsors { - margin-top: 50px; -} - -.sponsors__text { - font-size: $font-size-sm; -} - -.sponsors__item { - max-width: 275px; -} diff --git a/common/locales/components.en.js b/common/locales/components.en.js index 6e800836..cb226545 100644 --- a/common/locales/components.en.js +++ b/common/locales/components.en.js @@ -167,6 +167,5 @@ export default { home: 'Home', imprint: 'Imprint', information: 'Information', - supportedBy: 'Supported by', }, } From 47cce7cefc01dc523822cfe50d0ab4d9ee9135d7 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:23:10 +0100 Subject: [PATCH 32/77] Hide navigation links depending on config --- app/scripts/components/NavigationLinks.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/app/scripts/components/NavigationLinks.js b/app/scripts/components/NavigationLinks.js index 53c04a6b..d9744fb0 100644 --- a/app/scripts/components/NavigationLinks.js +++ b/app/scripts/components/NavigationLinks.js @@ -4,6 +4,7 @@ import { connect } from 'react-redux' import { NavLink } from 'react-router-dom' import { translate } from '../../../common/services/i18n' +import { withConfig } from '../containers' const PRIMARY_NAVIGATION = [ { localeKey: 'home', url: '/' }, @@ -19,7 +20,7 @@ const SECONDARY_NAVIGATION = [ const CURATION_NAVIGATION = [ { localeKey: 'places', url: '/places' }, { localeKey: 'resources', url: '/resources' }, - { localeKey: 'stream', url: '/stream' }, + { localeKey: 'stream', url: '/stream', withConfig: 'gifStreamServerUrl' }, ] const ADMIN_NAVIGATION = CURATION_NAVIGATION.concat([ @@ -28,18 +29,17 @@ const ADMIN_NAVIGATION = CURATION_NAVIGATION.concat([ const PARTICIPANT_NAVIGATION = CURATION_NAVIGATION -// @TODO Hide stream link when gifStreamUrl is not given const VISITOR_NAVIGATION = [ - { localeKey: 'stream', url: '/stream' }, + { localeKey: 'stream', url: '/stream', withConfig: 'gifStreamServerUrl' }, ] -// @TODO Hide Ticket link when isSignUpVisitorEnabled is deactivated const DEFAULT_NAVIGATION = [ - { localeKey: 'tickets', url: '/tickets' }, + { localeKey: 'tickets', url: '/tickets', withConfig: 'isSignUpVisitorEnabled' }, ] class NavigationLinks extends Component { static propTypes = { + config: PropTypes.object.isRequired, isAdmin: PropTypes.bool.isRequired, isParticipant: PropTypes.bool.isRequired, isVisitor: PropTypes.bool.isRequired, @@ -47,6 +47,16 @@ class NavigationLinks extends Component { renderNavigationItems(navigation) { return navigation.map((navigationItem, index) => { + // Required config was not given or falsly + if ( + ('withConfig' in navigationItem) && ( + !(navigationItem.withConfig in this.props.config) || + !this.props.config[navigationItem.withConfig] + ) + ) { + return null + } + return (
  • @@ -96,4 +106,4 @@ function mapStateToProps(state) { export default connect( mapStateToProps -)(NavigationLinks) +)(withConfig(NavigationLinks)) From d141db9cb156137234533b98ee9df88289038744 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:31:23 +0100 Subject: [PATCH 33/77] Hide routes depending on config --- app/scripts/routes.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/scripts/routes.js b/app/scripts/routes.js index eb16728b..74fde4df 100644 --- a/app/scripts/routes.js +++ b/app/scripts/routes.js @@ -8,6 +8,8 @@ import { shouldNotBeAuthenticated, } from './auth' +import { withConfig } from './containers' + import { Activity, Admin, @@ -37,8 +39,6 @@ import { Tickets, } from './views' -// @TODO Hide routes when isSignUpVisitorEnabled and isSignUpParticipantEnabled are deactivated - export default class Routes extends Component { render() { return ( @@ -46,15 +46,15 @@ export default class Routes extends Component { - - + + - - + + @@ -65,9 +65,9 @@ export default class Routes extends Component { - - - + + + From 00aaaf6ff48fd0e7c1846e5eebfbed1e811157a5 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:36:36 +0100 Subject: [PATCH 34/77] Clean up .env.example file --- .env.example | 37 +------------------------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/.env.example b/.env.example index 87aa4446..42e236e6 100644 --- a/.env.example +++ b/.env.example @@ -1,32 +1,3 @@ -# configuration -CONFIG_URL=http://localhost:3000 -CONFIG_TIMEZONE=Europe/Berlin - -CONFIG_TITLE=HOFFNUNG 3000 -CONFIG_DESCRIPTION=HOFFNUNG 3000 is a festival for music, art and theory. It is an experiment in social, artistic and theoretical collaboration. - -CONFIG_MAXMIMUM_PARTICIPATION_COUNT=30 -CONFIG_FESTIVAL_TICKET_PRICE=10 -CONFIG_PARTICIPATION_PRICE=25 - -CONFIG_MAIL_ADMIN=HOFFNUNG 3000 -CONFIG_MAIL_ROBOT=ROBOTER 3000 - -CONFIG_CURRENCY=EUR - -CONFIG_TRANSFER_NAME= -CONFIG_TRANSFER_BANK= -CONFIG_TRANSFER_IBAN= -CONFIG_TRANSFER_BIC= - -CONFIG_FESTIVAL_DATE_START=2017-08-24T00:00:00.000+02:00 -CONFIG_FESTIVAL_DATE_START=2017-08-27T00:00:00.000+02:00 - -CONFIG_DEFAULT_CITY= -CONFIG_DEFAULT_COUNTRY= -CONFIG_DEFAULT_LATITUDE= -CONFIG_DEFAULT_LONGITUDE= - # development server PORT=3000 @@ -35,7 +6,7 @@ DATABASE_URL=postgres://username:password@localhost:5432/dbname DATABASE_DIALECT=postgres # authentification -JWT_SECRET=secret +JWT_SECRET= # paypal PAYPAL_ID= @@ -54,9 +25,3 @@ AWS_REGION= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_BUCKET_NAME= - -# google map api -GOOGLE_MAP_API_KEY= - -# gif stream server -GIF_STREAM_SERVER= From b21bc40b8f37878aef9cd2b041e562739f1583d1 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:39:19 +0100 Subject: [PATCH 35/77] Clean ups --- .../seeders/20170803134020-home-video-page.js | 18 ------------------ server/helpers/mailTemplate.js | 1 - 2 files changed, 19 deletions(-) delete mode 100644 server/database/seeders/20170803134020-home-video-page.js diff --git a/server/database/seeders/20170803134020-home-video-page.js b/server/database/seeders/20170803134020-home-video-page.js deleted file mode 100644 index d3aaf1fc..00000000 --- a/server/database/seeders/20170803134020-home-video-page.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - up: queryInterface => { - return queryInterface.bulkInsert('pages', [{ - createdAt: new Date, - isRemovable: false, - slug: 'home-with-video', - title: 'Home', - updatedAt: new Date, - }]) - }, - down: queryInterface => { - return queryInterface.bulkDelete('pages', [{ - slug: [ - 'home-with-video', - ], - }]) - }, -} diff --git a/server/helpers/mailTemplate.js b/server/helpers/mailTemplate.js index 9e3e2013..0536b25c 100644 --- a/server/helpers/mailTemplate.js +++ b/server/helpers/mailTemplate.js @@ -18,7 +18,6 @@ function generateTemplateString(template) { } function textTemplate(url, locals) { - // @TODO Load templates from database return new Promise((resolve, reject) => { const filePath = path.join(__dirname, '../', url) From 871216ace241af9a13a7367cbef9baecee746588 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Wed, 13 Feb 2019 21:54:42 +0100 Subject: [PATCH 36/77] Protect server routes when feature got disabled --- server/controllers/activity.js | 26 +++++--- server/controllers/auth.js | 12 +++- server/controllers/meeting.js | 7 ++- server/controllers/message.js | 112 ++++++++++++++++++--------------- server/controllers/ticket.js | 7 ++- 5 files changed, 103 insertions(+), 61 deletions(-) diff --git a/server/controllers/activity.js b/server/controllers/activity.js index efd81a6c..cf596204 100644 --- a/server/controllers/activity.js +++ b/server/controllers/activity.js @@ -3,19 +3,27 @@ import { DEFAULT_OFFSET, } from './base' +import { APIError } from '../helpers/errors' import { getMyActivities } from '../handlers/activity' export default { findAll: (req, res, next) => { - const { - limit = DEFAULT_LIMIT, - offset = DEFAULT_OFFSET, - } = req.query + return getConfig('isActivityStreamEnabled').then(config => { + if (!config.isActivityStreamEnabled) { + next(new APIError('Activity stream is not available', httpStatus.FORBIDDEN)) + return null + } - return getMyActivities(limit, offset, req.user.id) - .then(result => { - res.json(result) - }) - .catch(err => next(err)) + const { + limit = DEFAULT_LIMIT, + offset = DEFAULT_OFFSET, + } = req.query + + return getMyActivities(limit, offset, req.user.id) + .then(result => { + res.json(result) + }) + .catch(err => next(err)) + }) }, } diff --git a/server/controllers/auth.js b/server/controllers/auth.js index eb60afc0..22477a0a 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -47,8 +47,18 @@ function signup(req, res, next) { const { email, paymentMethod } = fields - return getConfig(['maximumParticipantsCount', 'title', 'description']) + return getConfig([ + 'description', + 'isSignUpParticipantEnabled', + 'maximumParticipantsCount', + 'title', + ]) .then(config => { + if (!config.isSignUpParticipantEnabled) { + next(new APIError('Sign up is not available', httpStatus.FORBIDDEN)) + return null + } + return User.count({ where: { isParticipant: true } }) .then(count => { if (count >= config.maximumParticipantsCount) { diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 30726785..5d177d80 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -222,8 +222,13 @@ export default { } } - return getConfig(['festivalDateStart, festivalDateEnd']) + return getConfig(['festivalDateStart, festivalDateEnd, isRandomMeetingEnabled']) .then(config => { + if (!config.isRandomMeetingEnabled) { + next(new APIError('Random meetings are not available', httpStatus.FORBIDDEN)) + return null + } + const { festivalDateStart: start, festivalDateEnd: end } = config const isInFestival = ( diff --git a/server/controllers/message.js b/server/controllers/message.js index a63994a0..ff39751f 100644 --- a/server/controllers/message.js +++ b/server/controllers/message.js @@ -52,22 +52,29 @@ export default { create: (req, res, next) => { const values = pick(permittedFields, req.body) - // Create a message in that conversation - return Message.create({ - animalId: req.meAnimal.id, - conversationId: req.conversation.id, - text: values.text, - }) - .then(() => { - return addMessageActivity({ - sendingAnimal: req.meAnimal, - receivingAnimals: req.otherAnimals, - }) - }) - .then(() => { - res.json({ status: 'ok' }) + return getConfig('isInboxEnabled').then(config => { + if (!config.isInboxEnabled) { + next(new APIError('Messaging is not available', httpStatus.FORBIDDEN)) + return null + } + + // Create a message in that conversation + return Message.create({ + animalId: req.meAnimal.id, + conversationId: req.conversation.id, + text: values.text, }) - .catch(err => next(err)) + .then(() => { + return addMessageActivity({ + sendingAnimal: req.meAnimal, + receivingAnimals: req.otherAnimals, + }) + }) + .then(() => { + res.json({ status: 'ok' }) + }) + .catch(err => next(err)) + }) }, findAll: (req, res, next) => { const { @@ -75,40 +82,47 @@ export default { offset = DEFAULT_OFFSET, } = req.query - // Find related conversation - return Message.findAndCountAll({ - where: { - conversationId: req.params.resourceId, - }, - include: [ - MessageBelongsToAnimal, - ], - limit, - offset, - order: [ - ['createdAt', 'DESC'], - ], - }) - .then(result => { - // Update last checked at date - return ConversationAnimal.update({ - lastCheckedAt: db.fn('NOW'), - }, { - where: { - animalId: req.meAnimal.id, - conversationId: req.conversation.id, - }, - }) - .then(() => { - // Return messages - res.json({ - data: prepareResponseAll(result.rows, req), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, - }) - }) + return getConfig('isInboxEnabled').then(config => { + if (!config.isInboxEnabled) { + next(new APIError('Messaging is not available', httpStatus.FORBIDDEN)) + return null + } + + // Find related conversation + return Message.findAndCountAll({ + where: { + conversationId: req.params.resourceId, + }, + include: [ + MessageBelongsToAnimal, + ], + limit, + offset, + order: [ + ['createdAt', 'DESC'], + ], }) - .catch(err => next(err)) + .then(result => { + // Update last checked at date + return ConversationAnimal.update({ + lastCheckedAt: db.fn('NOW'), + }, { + where: { + animalId: req.meAnimal.id, + conversationId: req.conversation.id, + }, + }) + .then(() => { + // Return messages + res.json({ + data: prepareResponseAll(result.rows, req), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) + }) + }) + .catch(err => next(err)) + }) }, } diff --git a/server/controllers/ticket.js b/server/controllers/ticket.js index f75504f5..08cd6f7d 100644 --- a/server/controllers/ticket.js +++ b/server/controllers/ticket.js @@ -26,8 +26,13 @@ function signup(req, res, next) { const { email, paymentMethod } = fields - return getConfig(['title', 'description']) + return getConfig(['title', 'description', 'isSignUpVisitorEnabled']) .then(config => { + if (!config.isSignUpVisitorEnabled) { + next(new APIError('Ticket sales are not available', httpStatus.FORBIDDEN)) + return null + } + return User.findOne({ where: { email } }) .then(existingUser => { if (existingUser) { From ae574344959dfd6b1af7627ad799bda78c304a42 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:32:56 +0100 Subject: [PATCH 37/77] Add more fields to config model --- .env.example | 12 +++---- .../20190125152302-create-config-table.js | 18 ++++++++-- .../seeders/20190125162811-default-config.js | 34 +++++++++++++------ server/models/config.js | 18 ++++++++-- 4 files changed, 62 insertions(+), 20 deletions(-) diff --git a/.env.example b/.env.example index 42e236e6..4656bb80 100644 --- a/.env.example +++ b/.env.example @@ -8,12 +8,6 @@ DATABASE_DIALECT=postgres # authentification JWT_SECRET= -# paypal -PAYPAL_ID= -PAYPAL_SECRET= -PAYPAL_RETURN_URL=http://localhost:3000/api/auth/signup/paypal/success -PAYPAL_CANCEL_URL=http://localhost:3000/api/auth/signup/paypal/cancel - # smtp mail SMTP_HOST= SMTP_PORT= @@ -25,3 +19,9 @@ AWS_REGION= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_BUCKET_NAME= + +# paypal (optional) +PAYPAL_ID= +PAYPAL_SECRET= +PAYPAL_RETURN_URL=http://localhost:3000/api/auth/signup/paypal/success +PAYPAL_CANCEL_URL=http://localhost:3000/api/auth/signup/paypal/cancel diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js index 6af289b3..13b0f1d7 100644 --- a/server/database/migrations/20190125152302-create-config-table.js +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -2,7 +2,7 @@ function configField(type, allowNull = false) { return { type, allowNull, - validate: { + validate: allowNull ? {} : { notEmpty: true, }, } @@ -11,10 +11,11 @@ function configField(type, allowNull = false) { module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable('configs', { + app: configField(Sequelize.STRING), baseUrl: configField(Sequelize.STRING), currency: configField(Sequelize.STRING), defaultCity: configField(Sequelize.STRING), - defaultCounty: configField(Sequelize.CHAR), + defaultCountry: configField(Sequelize.CHAR), defaultLatitude: configField(Sequelize.FLOAT), defaultLongitude: configField(Sequelize.FLOAT), description: configField(Sequelize.STRING), @@ -27,6 +28,19 @@ module.exports = { participationPrice: configField(Sequelize.FLOAT, true), timezone: configField(Sequelize.STRING), title: configField(Sequelize.STRING), + transferReceiverName: configField(Sequelize.STRING, true), + transferBankName: configField(Sequelize.STRING, true), + transferIBAN: configField(Sequelize.STRING, true), + transferBIC: configField(Sequelize.STRING, true), + videoHomeId: configField(Sequelize.STRING, true), + videoIntroductionId: configField(Sequelize.STRING, true), + isActivityStreamEnabled: configField(Sequelize.BOOLEAN), + isInboxEnabled: configField(Sequelize.BOOLEAN), + isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), + isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), + isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), + googleMapApiKey: configField(Sequelize.STRING, true), + gifStreamServerUrl: configField(Sequelize.STRING, true), }) }, down: queryInterface => { diff --git a/server/database/seeders/20190125162811-default-config.js b/server/database/seeders/20190125162811-default-config.js index ea3ccb25..13125ff8 100644 --- a/server/database/seeders/20190125162811-default-config.js +++ b/server/database/seeders/20190125162811-default-config.js @@ -1,22 +1,36 @@ module.exports = { up: queryInterface => { return queryInterface.bulkInsert('configs', [{ - timezone: 'Europe/Berlin', + app: 'default', + baseUrl: 'https://domain.com', currency: 'EUR', - title: 'HOFFNUNG 3000', + defaultCity: 'Berlin', + defaultCountry: 'Germany', + defaultLatitude: 52.53647, + defaultLongitude: 13.40780, description: 'HOFFNUNG 3000 is a festival', - baseUrl: 'https://domain.com', + festivalDateEnd: '2017-08-27', + festivalDateStart: '2017-08-24', + festivalTicketPrice: 10.00, + gifStreamServerUrl: '', + googleMapApiKey: '', + isActivityStreamEnabled: true, + isInboxEnabled: true, + isRandomMeetingEnabled: true, + isSignUpParticipantEnabled: true, + isSignUpVisitorEnabled: true, mailAddressAdmin: 'admin@domain.com', mailAddressRobot: 'noreply@domain.com', maximumParticipantsCount: 30, - festivalTicketPrice: 10.00, participationPrice: 25.00, - defaultCity: 'Berlin', - defaultCounty: 'Germany', - defaultLatitude: 52.53647, - festivalDateEnd: '2017-08-27', - festivalDateStart: '2017-08-24', - defaultLongitude: 13.40780, + timezone: 'Europe/Berlin', + title: 'HOFFNUNG 3000', + transferBIC: '', + transferBankName: '', + transferIBAN: '', + transferReceiverName: '', + videoHomeId: '', + videoIntroductionId: '', }]) }, down: queryInterface => { diff --git a/server/models/config.js b/server/models/config.js index 8ff951b4..ea0e4b57 100644 --- a/server/models/config.js +++ b/server/models/config.js @@ -7,7 +7,7 @@ function configField(type, allowNull = false) { return { type, allowNull, - validate: { + validate: allowNull ? {} : { notEmpty: true, }, } @@ -16,10 +16,11 @@ function configField(type, allowNull = false) { // This model holds global configurations which are crucial for // the whole application. Defaults are defined in a database seed. const Config = db.define('config', { + app: configField(Sequelize.STRING), baseUrl: configField(Sequelize.STRING), currency: configField(Sequelize.STRING), defaultCity: configField(Sequelize.STRING), - defaultCounty: configField(Sequelize.CHAR), + defaultCountry: configField(Sequelize.CHAR), defaultLatitude: configField(Sequelize.FLOAT), defaultLongitude: configField(Sequelize.FLOAT), description: configField(Sequelize.STRING), @@ -32,6 +33,19 @@ const Config = db.define('config', { participationPrice: configField(Sequelize.FLOAT, true), timezone: configField(Sequelize.STRING), title: configField(Sequelize.STRING), + transferReceiverName: configField(Sequelize.STRING, true), + transferBankName: configField(Sequelize.STRING, true), + transferIBAN: configField(Sequelize.STRING, true), + transferBIC: configField(Sequelize.STRING, true), + videoHomeId: configField(Sequelize.STRING, true), + videoIntroductionId: configField(Sequelize.STRING, true), + isActivityStreamEnabled: configField(Sequelize.BOOLEAN), + isInboxEnabled: configField(Sequelize.BOOLEAN), + isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), + isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), + isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), + googleMapApiKey: configField(Sequelize.STRING, true), + gifStreamServerUrl: configField(Sequelize.STRING, true), }, { timestamps: false, }) From b730fc01d6e91749a5880cb3b1e59f3c8b8cbf63 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:36:07 +0100 Subject: [PATCH 38/77] Introduce a config endpoint for admins to read sensitive fields and update them --- server/controllers/meta.js | 40 +++++++++++++++++++++++++++++-------- server/routes/config.js | 18 +++++++++++++++++ server/routes/index.js | 4 +++- server/validation/config.js | 37 ++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 server/routes/config.js create mode 100644 server/validation/config.js diff --git a/server/controllers/meta.js b/server/controllers/meta.js index 40415c9e..ae025680 100644 --- a/server/controllers/meta.js +++ b/server/controllers/meta.js @@ -1,7 +1,10 @@ import { getConfig } from '../config' +import Config from '../models/config' import User from '../models/user' +const CONFIG_NAME = 'default' + const TRANSFER_CONFIG = [ 'transferReceiverName', 'transferBankName', @@ -31,7 +34,7 @@ function hasRequiredFields(fields, config) { }) } -function information(req, res, next) { +function getStatusAndConfig(req, res, next, hasSensitiveFields = false) { // Check if all variables are set to enable PayPal payment const isPayPalEnabled = hasRequiredFields([ 'PAYPAL_ID', @@ -52,15 +55,22 @@ function information(req, res, next) { }, }) .then(count => { + const { maximumParticipantsCount } = config + const isRegistrationFull = maximumParticipantsCount ? count >= maximumParticipantsCount : false + + const mergedConfig = { + ...config, + isPayPalEnabled, + isTransferEnabled, + } + + const filteredConfig = hasSensitiveFields ? mergedConfig : removeSensitive(mergedConfig) + // Return all gathered statuses and (filtered) configs res.json({ - config: removeSensitive({ - ...config, - isPayPalEnabled, - isTransferEnabled, - }), + config: filteredConfig, status: { - isRegistrationFull: count >= config.maximumParticipantsCount, + isRegistrationFull, }, }) }) @@ -68,6 +78,20 @@ function information(req, res, next) { }) } +function updateConfig(req, res, next) { + return Config.update(req.body, { limit: 1, where: { + app: CONFIG_NAME, + } }) + .then(() => { + return getStatusAndConfig(req, res, next, true) + }) + .catch(err => next(err)) +} + export default { - information, + getStatusAndConfig, + getStatusAndSensitiveConfig: (req, res, next) => { + return getStatusAndConfig(req, res, next, true) + }, + updateConfig, } diff --git a/server/routes/config.js b/server/routes/config.js new file mode 100644 index 00000000..d3fad8c8 --- /dev/null +++ b/server/routes/config.js @@ -0,0 +1,18 @@ +import express from 'express' +import validate from 'express-validation' + +import metaController from '../controllers/meta' +import configValidation from '../validation/config' + +const router = express.Router() // eslint-disable-line new-cap + +router.route('/') + .get(metaController.getStatusAndSensitiveConfig) + +router.route('/') + .put( + validate(configValidation.updateConfig), + metaController.updateConfig + ) + +export default router diff --git a/server/routes/index.js b/server/routes/index.js index e2efb954..bde602c4 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -16,6 +16,7 @@ import pageController from '../controllers/page' import userStatusController from '../controllers/userStatus' import authRoutes from './auth' +import configRoutes from './config' import conversationRoutes from './conversation' import eventRoutes from './event' import meetingRoutes from './meeting' @@ -39,7 +40,7 @@ router.route('/pages/:resourceSlug(\\D+)/') .get(pageController.findOneWithSlug) router.route('/meta') - .get(metaController.information) + .get(metaController.getStatusAndConfig) router.route('/preview') .get(eventPreviewController.findAll) @@ -79,6 +80,7 @@ router.route('/activity') // Admin API routes router.use(onlyAdmin) +router.use('/config', configRoutes) router.use('/pages', pageRoutes) router.use('/users', userRoutes) diff --git a/server/validation/config.js b/server/validation/config.js new file mode 100644 index 00000000..4788a68e --- /dev/null +++ b/server/validation/config.js @@ -0,0 +1,37 @@ +import Joi from 'joi' + +export default { + updateConfig: { + body: { + baseUrl: Joi.string().uri({ scheme: ['http', 'https'] }).required(), + currency: Joi.string().uppercase().length(3).required(), + defaultCity: Joi.string().required(), + defaultCountry: Joi.string().required(), + defaultLatitude: Joi.number().required(), + defaultLongitude: Joi.number().required(), + description: Joi.string().required(), + festivalDateEnd: Joi.string().isoDate().required(), + festivalDateStart: Joi.string().isoDate().required(), + festivalTicketPrice: Joi.number(), + mailAddressAdmin: Joi.string().email().required(), + mailAddressRobot: Joi.string().email().required(), + maximumParticipantsCount: Joi.number(), + participationPrice: Joi.number(), + timezone: Joi.string().required(), + title: Joi.string().required(), + transferReceiverName: Joi.string(), + transferBankName: Joi.string(), + transferIBAN: Joi.string(), + transferBIC: Joi.string(), + videoHomeId: Joi.string(), + videoIntroductionId: Joi.string(), + isActivityStreamEnabled: Joi.boolean().required(), + isInboxEnabled: Joi.boolean().required(), + isRandomMeetingEnabled: Joi.boolean().required(), + isSignUpParticipantEnabled: Joi.boolean().required(), + isSignUpVisitorEnabled: Joi.boolean().required(), + googleMapApiKey: Joi.string().token(), + gifStreamServerUrl: Joi.string().uri({ scheme: ['http', 'https'] }), + }, + }, +} From 0e566af1883c3fe6d0b5c07c19118f33c03b1441 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:37:16 +0100 Subject: [PATCH 39/77] Consider config as unset when its empty --- app/scripts/containers/withConfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/containers/withConfig.js b/app/scripts/containers/withConfig.js index 0fe568b9..8b581c40 100644 --- a/app/scripts/containers/withConfig.js +++ b/app/scripts/containers/withConfig.js @@ -52,7 +52,7 @@ export default function withConfig(...args) { return null } - if (field && !(field in this.props.config)) { + if (field && (!(field in this.props.config) || !this.props.config[field])) { if (isRequired) { return

    Warning! { field } is not set. Please check your configuration.

    } From 679700f918f61f428d81d250f98d55da334af6e5 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:37:45 +0100 Subject: [PATCH 40/77] Fix missing config in FormSlotSizeEditor --- app/scripts/components/FormSlotSizeEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/scripts/components/FormSlotSizeEditor.js b/app/scripts/components/FormSlotSizeEditor.js index 547eaa2b..ed72fabf 100644 --- a/app/scripts/components/FormSlotSizeEditor.js +++ b/app/scripts/components/FormSlotSizeEditor.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import ReactSlider from 'react-slider' -import { asFormField } from '../containers' +import { asFormField, withConfig } from '../containers' import { checkSlotSize, generateNewSlotItems, @@ -195,4 +195,4 @@ class FormSlotSizeEditor extends Component { } } -export default asFormField(FormSlotSizeEditor) +export default asFormField(withConfig(FormSlotSizeEditor)) From df3963767476370c19ba4c22444df813c6d28c4d Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:38:13 +0100 Subject: [PATCH 41/77] Fix wrong reference --- app/scripts/components/FormCheckbox.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/components/FormCheckbox.js b/app/scripts/components/FormCheckbox.js index 20c4536b..3ef647c9 100644 --- a/app/scripts/components/FormCheckbox.js +++ b/app/scripts/components/FormCheckbox.js @@ -25,7 +25,7 @@ class FormCheckbox extends Component { checked={this.props.input.value} className="form__field-input form__field-checkbox" disabled={disabled} - ref={c => { this._refCheckbox = c }} + ref={c => { this._checkboxElem = c }} type="checkbox" {...input} onBlur={this.onBlur} From c0c7559cd037aa0bd7eca31fe2e3eddb5e148222 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:39:10 +0100 Subject: [PATCH 42/77] Add a config editor for admins --- app/scripts/actions/meta.js | 34 +- app/scripts/components/AdminConfigField.js | 41 +++ app/scripts/components/AdminConfigPanel.js | 72 ++++ app/scripts/components/index.js | 1 + app/scripts/forms/AdminConfigForm.js | 384 +++++++++++++++++++++ app/scripts/forms/index.js | 1 + app/scripts/reducers/meta.js | 4 + app/scripts/views/Admin.js | 9 + app/scripts/views/AdminConfig.js | 16 + app/scripts/views/index.js | 1 + common/locales/flash.en.js | 2 + common/locales/forms.en.js | 59 ++++ 12 files changed, 621 insertions(+), 3 deletions(-) create mode 100644 app/scripts/components/AdminConfigField.js create mode 100644 app/scripts/components/AdminConfigPanel.js create mode 100644 app/scripts/forms/AdminConfigForm.js create mode 100644 app/scripts/views/AdminConfig.js diff --git a/app/scripts/actions/meta.js b/app/scripts/actions/meta.js index ff6772d0..455bb021 100644 --- a/app/scripts/actions/meta.js +++ b/app/scripts/actions/meta.js @@ -1,8 +1,36 @@ import ActionTypes from '../actionTypes' -import { getRequest } from '../services/api' +import { FLASH } from '../middlewares/flash' +import { getRequest, putRequest } from '../services/api' +import { translate } from '../../../common/services/i18n' -export function updateMetaInformation() { - return getRequest(['meta'], {}, { +export function saveConfiguration(config) { + return putRequest(['config'], config, { + request: { + type: ActionTypes.META_REQUEST, + }, + success: { + type: ActionTypes.META_SUCCESS, + [FLASH]: { + lifetime: 5000, + text: translate('flash.updateAdminConfigSuccess'), + type: 'rainbow', + }, + }, + failure: { + type: ActionTypes.META_FAILURE, + [FLASH]: { + text: translate('flash.updateAdminConfigFailure'), + type: 'error', + }, + }, + }) +} + +export function updateMetaInformation(isSensitive = false) { + // Users with admin rights can request sensitive fields in config + const resource = isSensitive ? 'config' : 'meta' + + return getRequest([resource], {}, { request: { type: ActionTypes.META_REQUEST, }, diff --git a/app/scripts/components/AdminConfigField.js b/app/scripts/components/AdminConfigField.js new file mode 100644 index 00000000..e0d872d5 --- /dev/null +++ b/app/scripts/components/AdminConfigField.js @@ -0,0 +1,41 @@ +import PropTypes from 'prop-types' +import React, { Component } from 'react' + +class AdminConfigField extends Component { + static propTypes = { + value: PropTypes.string.isRequired, + disabled: PropTypes.boolean.isRequired, + saveConfiguration: PropTypes.func.isRequired, + updateMetaInformation: PropTypes.func.isRequired, + } + + componentWillMount() { + this.props.updateMetaInformation() + } + + onSave(key, value) { + this.props.onSave(key, value) + } + + render() { + return Object.keys(this.props.config).map(configKey => { + return ( + + ) + }) + } + + constructor(props) { + super(props) + + this.onSave = this.onSave.bind(this) + } +} + +export default AdminConfigField diff --git a/app/scripts/components/AdminConfigPanel.js b/app/scripts/components/AdminConfigPanel.js new file mode 100644 index 00000000..d11af3a1 --- /dev/null +++ b/app/scripts/components/AdminConfigPanel.js @@ -0,0 +1,72 @@ +import PropTypes from 'prop-types' +import React, { Component } from 'react' +import { connect } from 'react-redux' + +import { AdminConfigForm } from '../forms' +import { saveConfiguration, updateMetaInformation } from '../actions/meta' + +class AdminConfigPanel extends Component { + static propTypes = { + config: PropTypes.object.isRequired, + errorMessage: PropTypes.string.isRequired, + form: PropTypes.object, + isLoading: PropTypes.bool.isRequired, + saveConfiguration: PropTypes.func.isRequired, + updateMetaInformation: PropTypes.func.isRequired, + } + + static defaultProps = { + form: {}, + } + + componentWillMount() { + this.props.updateMetaInformation(true) + } + + onSave() { + const { values } = this.props.form + + this.props.saveConfiguration(Object.keys(values).reduce((acc, key) => { + if (values[key]) { + acc[key] = values[key] + } + + return acc + }, {})) + } + + render() { + return ( + + ) + } + + constructor(props) { + super(props) + + this.onSave = this.onSave.bind(this) + } +} + +function mapStateToProps(state) { + const { config, isLoading, errorMessage } = state.meta + + return { + config, + errorMessage, + form: state.form.config, + isLoading, + } +} + +export default connect( + mapStateToProps, { + saveConfiguration, + updateMetaInformation, + } +)(AdminConfigPanel) diff --git a/app/scripts/components/index.js b/app/scripts/components/index.js index 47202a2f..863792d7 100644 --- a/app/scripts/components/index.js +++ b/app/scripts/components/index.js @@ -1,4 +1,5 @@ export { default as ActivityListItem } from './ActivityListItem' +export { default as AdminConfigPanel } from './AdminConfigPanel' export { default as AnimalLink } from './AnimalLink' export { default as ConversationListItem } from './ConversationListItem' export { default as CuratedEventListItem } from './CuratedEventListItem' diff --git a/app/scripts/forms/AdminConfigForm.js b/app/scripts/forms/AdminConfigForm.js new file mode 100644 index 00000000..706877d9 --- /dev/null +++ b/app/scripts/forms/AdminConfigForm.js @@ -0,0 +1,384 @@ +import PropTypes from 'prop-types' +import React, { Component } from 'react' +import { Field, reduxForm } from 'redux-form' + +import { FormInput, FormCheckbox } from '../components' + +import { translate } from '../../../common/services/i18n' + +const validate = values => { + const errors = {} + + if (!values.mailAddressAdmin) { + errors.mailAddressAdmin = translate('forms.auth.errors.mailRequired') + } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.mailAddressAdmin)) { + errors.mailAddressAdmin = translate('forms.auth.errors.invalidMail') + } + + if (!values.mailAddressRobot) { + errors.mailAddressRobot = translate('forms.auth.errors.mailRequired') + } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.mailAddressRobot)) { + errors.mailAddressRobot = translate('forms.auth.errors.invalidMail') + } + + if (!values.title) { + errors.title = translate('forms.common.errors.required') + } + + if (!values.description) { + errors.description = translate('forms.common.errors.required') + } + + if (!values.baseUrl) { + errors.baseUrl = translate('forms.common.errors.required') + } + + if (!values.currency) { + errors.currency = translate('forms.common.errors.required') + } + + if (!values.timezone) { + errors.timezone = translate('forms.common.errors.required') + } + + if (!values.defaultCity) { + errors.defaultCity = translate('forms.common.errors.required') + } + + if (!values.defaultCountry) { + errors.defaultCountry = translate('forms.common.errors.required') + } + + if (!values.defaultLatitude) { + errors.defaultLatitude = translate('forms.common.errors.required') + } + + if (!values.defaultLongitude) { + errors.defaultLongitude = translate('forms.common.errors.required') + } + + if (!values.festivalDateStart) { + errors.festivalDateStart = translate('forms.common.errors.required') + } + + if (!values.festivalDateEnd) { + errors.festivalDateEnd = translate('forms.common.errors.required') + } + + return errors +} + +class AdminConfigForm extends Component { + static propTypes = { + errorMessage: PropTypes.string, + handleSubmit: PropTypes.func.isRequired, + isLoading: PropTypes.bool, + } + + static defaultProps = { + errorMessage: undefined, + isLoading: false, + } + + renderErrorMessage() { + if (this.props.errorMessage) { + return ( +
    + { this.props.errorMessage } +
    + ) + } + + return null + } + + render() { + return ( +
    + { this.renderErrorMessage() } + +

    { translate('forms.config.basicInformation') }

    + + + + + + + +
    + +

    { translate('forms.config.mails') }

    + + + + + +

    { translate('forms.config.localization') }

    + + + + + + + + + + + + + +
    + +

    { translate('forms.config.festivalDuration') }

    + + + + + +
    + +

    { translate('forms.config.festivalTickets') }

    + + + + + + + +
    + +

    { translate('forms.config.wireTransfer') }

    + + + + + + + + + +
    + +

    { translate('forms.config.videos') }

    + + + + + +
    + +

    { translate('forms.config.features') }

    + + + + + + + + + + + +
    + +

    { translate('forms.config.services') }

    + + + + + +
    + + + + ) + } +} + +export default reduxForm({ + destroyOnUnmount: false, + enableReinitialize: true, + forceUnregisterOnUnmount: true, + form: 'config', + validate, +})(AdminConfigForm) diff --git a/app/scripts/forms/index.js b/app/scripts/forms/index.js index 380c356c..caa6c7fb 100644 --- a/app/scripts/forms/index.js +++ b/app/scripts/forms/index.js @@ -1,3 +1,4 @@ +export { default as AdminConfigForm } from './AdminConfigForm' export { default as EventForm } from './EventForm' export { default as ForgotPasswordForm } from './ForgotPasswordForm' export { default as LoginForm } from './LoginForm' diff --git a/app/scripts/reducers/meta.js b/app/scripts/reducers/meta.js index 353946b5..cbd58f11 100644 --- a/app/scripts/reducers/meta.js +++ b/app/scripts/reducers/meta.js @@ -4,6 +4,7 @@ import ActionTypes from '../actionTypes' const initialState = { config: {}, + errorMessage: '', status: { isRegistrationFull: false, }, @@ -15,11 +16,13 @@ export default (state = initialState, action) => { switch (action.type) { case ActionTypes.META_REQUEST: return update(state, { + errorMessage: { $set: '' }, isLoading: { $set: true }, }) case ActionTypes.META_SUCCESS: return update(state, { config: { $set: action.payload.config }, + errorMessage: { $set: '' }, status: { isRegistrationFull: { $set: action.payload.status.isRegistrationFull }, }, @@ -28,6 +31,7 @@ export default (state = initialState, action) => { }) case ActionTypes.META_FAILURE: return update(state, { + errorMessage: { $set: action.error.message }, isLoading: { $set: false }, }) default: diff --git a/app/scripts/views/Admin.js b/app/scripts/views/Admin.js index e2833838..67575ed1 100644 --- a/app/scripts/views/Admin.js +++ b/app/scripts/views/Admin.js @@ -3,6 +3,7 @@ import { NavLink } from 'react-router-dom' import { Route } from 'react-router' import { + AdminConfig, AdminPages, AdminPagesEditForm, AdminPagesNewForm, @@ -21,18 +22,26 @@ class Admin extends Component { + +

    • Admin
    • +
    • Users
    • +
    • Pages
    • + +
    • + Config +
    diff --git a/app/scripts/views/AdminConfig.js b/app/scripts/views/AdminConfig.js new file mode 100644 index 00000000..09dd2742 --- /dev/null +++ b/app/scripts/views/AdminConfig.js @@ -0,0 +1,16 @@ +import React, { Component } from 'react' + +import { AdminConfigPanel } from '../components' + +class AdminConfig extends Component { + render() { + return ( +
    +

    Config

    + +
    + ) + } +} + +export default AdminConfig diff --git a/app/scripts/views/index.js b/app/scripts/views/index.js index 6dfa9c72..52c77c68 100644 --- a/app/scripts/views/index.js +++ b/app/scripts/views/index.js @@ -1,5 +1,6 @@ export { default as Activity } from './Activity' export { default as Admin } from './Admin' +export { default as AdminConfig } from './AdminConfig' export { default as AdminPages } from './AdminPages' export { default as AdminPagesEditForm } from './AdminPagesEditForm' export { default as AdminPagesNewForm } from './AdminPagesNewForm' diff --git a/common/locales/flash.en.js b/common/locales/flash.en.js index f9968eba..ac5cf488 100644 --- a/common/locales/flash.en.js +++ b/common/locales/flash.en.js @@ -27,6 +27,7 @@ export default { resetPassword: 'Yes! Your password has been reset!', resourceCreateFailure: 'Ouch, I couldn\'t create this, please check your fields again.', resourceUpdateFailure: 'Ouch, I couldn\'t update this, please check your fields again.', + updateAdminConfigFailure: 'Could not save the configuration. Please check your fields and the documentation.', signUpPaypalSuccess: 'Thank you and welcome to HOFFNUNG 3000! You successfully created your account!', signUpTransferFailure: 'Something with the registration went wrong', signUpTransferSuccess: 'Thank you for your registration! We just sent you an email with our bank account details! Please contact us if you didn\'t receive the mail in the next minutes or you have any questions.', @@ -36,4 +37,5 @@ export default { updatePlaceSuccess: 'Your place was successfully updated.', updateProfileSuccess: 'Your profile has been successfully updated!', updateResourceSuccess: 'Your resource was successfully updated.', + updateAdminConfigSuccess: 'Your configuration was saved successfully. You might need to refresh the page to see some changes.', } diff --git a/common/locales/forms.en.js b/common/locales/forms.en.js index 7e586b03..fb33cc59 100644 --- a/common/locales/forms.en.js +++ b/common/locales/forms.en.js @@ -7,6 +7,7 @@ export default { }, basicInformation: 'Basic information', uploadImages: 'Upload images', + submit: 'Save', }, auth: { errors: { @@ -50,6 +51,64 @@ export default { yourAddress: 'Your address', yourPassword: 'Your password', }, + config: { + errors: { + cityCodeRequired: 'Please enter your city code', + cityRequired: 'Please enter your city', + countryRequired: 'Please enter your country', + firstnameRequired: 'Please enter your first name', + invalidMail: 'Invalid email address', + lastnameRequired: 'Please enter your last name', + mailRequired: 'Please enter your email address', + maxLength: 'This field can\'t be longer than {len} characters', + minLength: 'This field needs a minimum of {len} characters', + passwordLength: 'Must be {len} characters or more', + passwordMatch: 'The given passwords do not match', + passwordRepeat: 'Please repeat your password', + passwordRequired: 'Please enter your password', + phoneRequired: 'Please enter your mobile number', + required: 'This field is required', + streetRequired: 'Please enter your street and number', + }, + basicInformation: 'General', + mails: 'Mails', + localization: 'Localization', + festivalDuration: 'Festival duration', + festivalTickets: 'Festival tickets', + wireTransfer: 'Wire transfer', + videos: 'YouTube Videos', + features: 'Feature Flags', + services: 'External Services / Features', + baseUrl: 'URL', + title: 'Title', + description: 'Short description', + mailAddressAdmin: 'Email-address of admin / website owner', + mailAddressRobot: 'Email-address of automated mail sender', + currency: 'Currency', + timezone: 'Timezone', + defaultCity: 'Default city name', + defaultCountry: 'Default country name', + defaultLatitude: 'Default GPS position: Latitude', + defaultLongitude: 'Default GPS position: Longitude', + festivalDateStart: 'Start of festival', + festivalDateEnd: 'End of festival', + maximumParticipantsCount: 'Maximum number of participants', + festivalTicketPrice: 'Visitor ticket price', + participationPrice: 'Participant ticket price', + transferReceiverName: 'Receiver name', + transferBankName: 'Bank name', + transferIBAN: 'IBAN', + transferBIC: 'BIC', + videoHomeId: 'Homepage video ID', + videoIntroductionId: 'Sign up video ID', + isActivityStreamEnabled: 'Use activity stream', + isInboxEnabled: 'Use messaging', + isRandomMeetingEnabled: 'Use random meetings', + isSignUpParticipantEnabled: 'Activate partipant ticket sales', + isSignUpVisitorEnabled: 'Activate visitor ticket sales', + googleMapApiKey: 'Google Maps API key', + gifStreamServerUrl: 'gif-stream Server URL', + }, place: { errors: { cityCodeRequired: 'The given address is incomplete. Please fill in the city code field', From 656db44a0aa80beea0435a8260ee617746b061ab Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:44:26 +0100 Subject: [PATCH 43/77] Fix image paths --- app/scripts/components/FormLocationSelector.js | 2 +- server/index.pug | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/scripts/components/FormLocationSelector.js b/app/scripts/components/FormLocationSelector.js index 6d32d13a..951dbd0c 100644 --- a/app/scripts/components/FormLocationSelector.js +++ b/app/scripts/components/FormLocationSelector.js @@ -211,7 +211,7 @@ class FormLocationSelector extends Component {
    ) diff --git a/server/index.pug b/server/index.pug index 1a0d1bc5..fd904306 100644 --- a/server/index.pug +++ b/server/index.pug @@ -16,7 +16,7 @@ html meta(property='og:url' content=config.baseUrl) meta(name='description' content=config.description) title= config.title - link(type='image/x-icon' rel='shortcut icon' href=`${assets.basePath}/favicon.ico`) + link(type='image/x-icon' rel='shortcut icon' href=`/${assets.basePath}/favicon.ico`) +asset('app', 'css') body #app From 23fbc0fe1950e0163b9c2d4255e89ffab5ba6a8f Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 19:53:18 +0100 Subject: [PATCH 44/77] Fix typos in activity and meeting controllers --- server/controllers/activity.js | 1 + server/controllers/meeting.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/server/controllers/activity.js b/server/controllers/activity.js index cf596204..b3e472a2 100644 --- a/server/controllers/activity.js +++ b/server/controllers/activity.js @@ -4,6 +4,7 @@ import { } from './base' import { APIError } from '../helpers/errors' +import { getConfig } from '../config' import { getMyActivities } from '../handlers/activity' export default { diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 5d177d80..6b351d54 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -222,7 +222,7 @@ export default { } } - return getConfig(['festivalDateStart, festivalDateEnd, isRandomMeetingEnabled']) + return getConfig(['festivalDateStart', 'festivalDateEnd', 'isRandomMeetingEnabled']) .then(config => { if (!config.isRandomMeetingEnabled) { next(new APIError('Random meetings are not available', httpStatus.FORBIDDEN)) From 5e3e8ad19ebd6d4f278a33f7f2f2938c044850f8 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Fri, 15 Feb 2019 20:06:19 +0100 Subject: [PATCH 45/77] Update dependencies --- package-lock.json | 835 ++++++++++++++++++++++++---------------------- package.json | 38 +-- 2 files changed, 457 insertions(+), 416 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a686aac..c81bdeab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -388,9 +388,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.1.tgz", - "integrity": "sha512-Nmmv1+3LqxJu/V5jU9vJmxR/KIRWFk2qLHmbB56yRRRFhlaSuOVXscX3gUmhaKgUhzA3otOHVubbIEVYsZ0eZg==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", + "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1171,175 +1171,175 @@ } }, "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.2.tgz", + "integrity": "sha512-5LLqqVsXZAhAJN0S7fTi11jwMJOjfR8290V0V7BWKgmZ36VVE6ZGuH4BN3eLt7LvNMIgyuYwyrPwiz6f3SGlBQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@webassemblyjs/helper-module-context": "1.8.2", + "@webassemblyjs/helper-wasm-bytecode": "1.8.2", + "@webassemblyjs/wast-parser": "1.8.2" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.2.tgz", + "integrity": "sha512-5WIj+pSzbs8ao7NM31xFcGeOSnXgpCikmCFRYkXygVDqVaXTq/Hr9roqarUVMNfAegNc61oKEhe3pi+HUCXJEw==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.2.tgz", + "integrity": "sha512-TJBDJPXO9DSC4qf5FZT0VFlTdJSm4DKxzcoyWwVike1aQQQEbCk167MJxYLi0SuHeOtULLtDDSZL7yDL3XXMKA==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.2.tgz", + "integrity": "sha512-6fTynU6b0bC+yBH7+M6/BBRZId4F1fIuX00G1ZX45EAQOrB8p4TK5bccAEPG2vuyvnd4tgB1/4cYXq5GpszMGA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.2.tgz", + "integrity": "sha512-5beYTZS4Wsscu8ys2cLZ0SiToEe1wNitzrV/jCr02wGPOcpPHf0ERImR6iBGe/LX0O2cV9Pgi78hFp5WfNKeAg==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/wast-printer": "1.8.2" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.2.tgz", + "integrity": "sha512-7xRO1lFNj1fGm+ik73n8TuWXKeAqTuqeApqnxWnW+nI2lPyj4awrt+n1XkQr8OwmVK7mFJSRuTZc568qtgOyzQ==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.2.tgz", + "integrity": "sha512-EBr+n9M2F7PQ02s0f87KnSPva0KlT2S4IGDP+7aYqt2FCaMZzCtXcVahGSGg3ESZBSD0gzFU4486zD7SUsSD0Q==", "dev": true }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.2.tgz", + "integrity": "sha512-gS0trUUPYevbs5Rsv9E+VbzDuZ9KB4Tu/QymTfHtnSDpX4wxhs9u9/y/KiH84r0Z4xvm8/pqWnGvM77oxSPHYw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.2.tgz", + "integrity": "sha512-HLHOR6/Vc+f5UziOUNQ3f5YedCMCuU46BdMEhjQBQwlOWqVAxgwqUn/KJkuhMvvjQ2FkASaDup8ohZrjyCKDKg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-buffer": "1.8.2", + "@webassemblyjs/helper-wasm-bytecode": "1.8.2", + "@webassemblyjs/wasm-gen": "1.8.2" } }, "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.2.tgz", + "integrity": "sha512-v9RtqGJ+z8UweiRh47DheXVtV0d/o9sQfXzAX1/1n/nw5G85yEQJdHcmwiRdu+SXmqlZQeymsnmve2oianzW4g==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.2.tgz", + "integrity": "sha512-41zX+6xpo6G2bkq3mdr+K5nXx5OOL6V979ucbLyq1ra5dFI3ReLiw6+HOCF5ih0t5HMQVIQBhInZIdxqcpc/Qg==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "long": "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69" } }, "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.2.tgz", + "integrity": "sha512-fP2Q4igo9/R82xeVra+zIQOjnmknSiAhykg//fz7c1UjghzoutQtldcbKOaL0+0j31RRFMDHgrUL+12RQExOYg==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.2.tgz", + "integrity": "sha512-rM1sgdLQrXQs4ZapglK86mW8QMml0FJ+jwZ5961sEmHISTkJRvheILuzA9jcKy5vwhWgkPf/nIhO2I6A9rkGww==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-buffer": "1.8.2", + "@webassemblyjs/helper-wasm-bytecode": "1.8.2", + "@webassemblyjs/helper-wasm-section": "1.8.2", + "@webassemblyjs/wasm-gen": "1.8.2", + "@webassemblyjs/wasm-opt": "1.8.2", + "@webassemblyjs/wasm-parser": "1.8.2", + "@webassemblyjs/wast-printer": "1.8.2" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.2.tgz", + "integrity": "sha512-WTBesrMydDwJbbB48OZGcMq6zDsT6CJd1UalvGuXtHJLargazOron+JBdmt8Nnd+Z2s3TPfCPP54EpQBsDVR7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-wasm-bytecode": "1.8.2", + "@webassemblyjs/ieee754": "1.8.2", + "@webassemblyjs/leb128": "1.8.2", + "@webassemblyjs/utf8": "1.8.2" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.2.tgz", + "integrity": "sha512-tzXn0xNQNyoUBr1+O1rwYXZd2bcUdXSOUTu0fLAIPl01dcTY6hjIi2B2DXYqk9OVQRnjPyX2Ew6rkeCTxfaYaQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-buffer": "1.8.2", + "@webassemblyjs/wasm-gen": "1.8.2", + "@webassemblyjs/wasm-parser": "1.8.2" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.2.tgz", + "integrity": "sha512-uc6nVjvUjZzHa8fSl0ko684puuw0ujfCYn19v5tTu0DQ7tXx9jlZXzYw0aW7fmROxyez7BcbJloYLmXg723vVQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-api-error": "1.8.2", + "@webassemblyjs/helper-wasm-bytecode": "1.8.2", + "@webassemblyjs/ieee754": "1.8.2", + "@webassemblyjs/leb128": "1.8.2", + "@webassemblyjs/utf8": "1.8.2" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.2.tgz", + "integrity": "sha512-idk8cCqM+T6/iIxoQCOz85vKvWhyHghJbICob/H1AN8byN1O6a2Jxk+g1ZJA7sZDc6/q8pYV6dVkHKgm8y1oUA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/floating-point-hex-parser": "1.8.2", + "@webassemblyjs/helper-api-error": "1.8.2", + "@webassemblyjs/helper-code-frame": "1.8.2", + "@webassemblyjs/helper-fsm": "1.8.2", + "long": "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.2.tgz", + "integrity": "sha512-TENFBgf5bKKfs2LbW8fd/0xvamccbEHoR83lQlEP7Qi0nkpXAP77VpvIITy0J+UZAa/Y3j6K6MPw1tNMbdjf4A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/wast-parser": "1.8.2", + "long": "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69" } }, "@xtuc/ieee754": { @@ -1348,12 +1348,6 @@ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1370,9 +1364,9 @@ } }, "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", + "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", "dev": true }, "acorn-dynamic-import": { @@ -1468,9 +1462,9 @@ } }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-regex": { @@ -1674,11 +1668,11 @@ "dev": true }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "async-each": { @@ -1706,23 +1700,57 @@ "dev": true }, "autoprefixer": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz", - "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==", + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.7.tgz", + "integrity": "sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA==", "dev": true, "requires": { "browserslist": "^4.4.1", - "caniuse-lite": "^1.0.30000929", + "caniuse-lite": "^1.0.30000932", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.13", + "postcss": "^7.0.14", "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30000938", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz", + "integrity": "sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw==", + "dev": true + }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "aws-sdk": { - "version": "2.392.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.392.0.tgz", - "integrity": "sha512-mwIJj0u8XGXepJJ66kFG6uXrZOrcPauESoHAHZfr28i2qRAnemM4B3FlWleHy6Y8pxfW6UBe2++/j2+Q+LuJhg==", + "version": "2.403.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.403.0.tgz", + "integrity": "sha512-ftLAVadIjlLQiMWwbFgjaL2u5vmFCP5IDrJ+aIkrmfbzQsxTq2ze7slxgFpXP5eRtRF4/HVspzr0PS2MnsZMRA==", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -1733,37 +1761,6 @@ "url": "0.10.3", "uuid": "3.3.2", "xml2js": "0.4.19" - }, - "dependencies": { - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - } } }, "aws-sign2": { @@ -1945,9 +1942,9 @@ } }, "bcrypt": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.3.tgz", - "integrity": "sha512-4EuzUo6K790QC3uq/ogzy9w2Hc7XDIBoEndU5y7l7YaEAwQF8vyFqv6tC30+gOBZvyxk3F632xzKBQoLNz2pjg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-3.0.4.tgz", + "integrity": "sha512-XqmCym97kT6l+jFEKeFvGuNE9aVEFDGsLMv+tIBTXkJI1sHS0g8s7VQEPJagSMPwWiB5Vpr2kVzVKc/YfwWthA==", "requires": { "nan": "2.12.1", "node-pre-gyp": "0.12.0" @@ -3299,9 +3296,9 @@ } }, "connected-react-router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.2.2.tgz", - "integrity": "sha512-tPI3s7yYtnTt/XLoQFsQqIEQxdQCrsZltEdozjG7LPkOTNglJJ7WqUqnlnh9thC6ebavfaJoTtPa9G2EibuJbg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/connected-react-router/-/connected-react-router-6.3.1.tgz", + "integrity": "sha512-nhuQiLOAQlCgkCypGSUhycgaqqTh2IUwVFvzw2y13v8JqB92yTk3yeAKG6X1b0IcD7S4gQizYbjgejf7DJjbyw==", "requires": { "immutable": "^3.8.1", "seamless-immutable": "^7.1.3" @@ -3368,9 +3365,9 @@ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" }, "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz", + "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==", "requires": { "cookie": "0.3.1", "cookie-signature": "1.0.6" @@ -3816,9 +3813,9 @@ "dev": true }, "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, "cssesc": { @@ -3828,52 +3825,52 @@ "dev": true }, "cssnano": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz", - "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.6", + "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" } }, "cssnano-preset-default": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz", - "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", "cssnano-util-raw-cache": "^4.0.1", "postcss": "^7.0.0", - "postcss-calc": "^7.0.0", - "postcss-colormin": "^4.0.2", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.1", + "postcss-discard-comments": "^4.0.2", "postcss-discard-duplicates": "^4.0.2", "postcss-discard-empty": "^4.0.1", "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.10", - "postcss-merge-rules": "^4.0.2", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.1", - "postcss-minify-params": "^4.0.1", - "postcss-minify-selectors": "^4.0.1", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.1", - "postcss-normalize-positions": "^4.0.1", - "postcss-normalize-repeat-style": "^4.0.1", - "postcss-normalize-string": "^4.0.1", - "postcss-normalize-timing-functions": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", "postcss-normalize-unicode": "^4.0.1", "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.1", - "postcss-ordered-values": "^4.1.1", - "postcss-reduce-initial": "^4.0.2", - "postcss-reduce-transforms": "^4.0.1", - "postcss-svgo": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" } }, @@ -3995,8 +3992,7 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress-response": { "version": "3.3.0", @@ -4546,9 +4542,9 @@ "dev": true }, "eslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", - "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.13.0.tgz", + "integrity": "sha512-nqD5WQMisciZC5EHZowejLKQjWGuFS5c70fxqSKlnDME+oz9zmE8KTlX+lHSg+/5wsC/kf9Q9eMkC8qS3oM2fg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -4580,7 +4576,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^5.5.1", @@ -4624,9 +4619,9 @@ } }, "eslint-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", - "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", + "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", "dev": true, "requires": { "loader-fs-cache": "^1.0.0", @@ -4735,10 +4730,9 @@ } }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "evp_bytestokey": { "version": "1.0.3", @@ -6058,12 +6052,6 @@ "resolve-dir": "^1.0.0" } }, - "global-modules-path": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.1.tgz", - "integrity": "sha512-y+shkf4InI7mPRHSo2b/k6ix6+NLDtyccYv86whhxrSGX9wjPX1VMITmrDbE1eh7zkzhiWtW2sHklJYoQ62Cxg==", - "dev": true - }, "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", @@ -6289,10 +6277,11 @@ } }, "helmet": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.0.tgz", - "integrity": "sha512-j9JjtAnWJj09lqe/PEICrhuDaX30TeokXJ9tW6ZPhVH0+LMoihDeJ58CdWeTGzM66p6EiIODmgAaWfdeIWI4Gg==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.1.tgz", + "integrity": "sha512-hgoNe/sjKlKNvJ3g9Gz149H14BjMMWOCmW/DTXl7IfyKGtIK37GePwZrHNfr4aPXdKVyXcTj26RgRFbPKDy9lw==", "requires": { + "depd": "2.0.0", "dns-prefetch-control": "0.1.0", "dont-sniff-mimetype": "1.0.0", "expect-ct": "0.1.1", @@ -6307,6 +6296,13 @@ "nocache": "2.0.0", "referrer-policy": "1.1.0", "x-xss-protection": "1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, "helmet-crossdomain": { @@ -6511,9 +6507,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, "ienoopen": { "version": "1.0.0", @@ -6539,11 +6535,11 @@ "dev": true }, "immutability-helper": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.9.0.tgz", - "integrity": "sha512-2LYtDuGugMLyoFV0qGvblnq39E2VVQ9m4dDktlRLVBBVV1LnUMK0rlqkbtlUjfT1UJO876OobtPlNZTEbOOYVQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.0.0.tgz", + "integrity": "sha512-Ww7oOSnBIRb9ihT9UH9eHz0uhie0rw9bpqGYCb7qD5VpsdOLv+fx/KCRgHqvX/13LgSM5sDfsLpeSIM6kodUxQ==", "requires": { - "invariant": "^2.2.0" + "invariant": "^2.2.4" } }, "immutable": { @@ -6654,21 +6650,21 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", + "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", "strip-ansi": "^5.0.0", "through": "^2.3.6" @@ -7426,12 +7422,6 @@ "type-check": "~0.3.2" } }, - "lightercollective": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lightercollective/-/lightercollective-0.1.0.tgz", - "integrity": "sha512-J9tg5uraYoQKaWbmrzDDexbG6hHnMcWS1qLYgJSWE+mpA3U5OCSeMUhb+K55otgZJ34oFdR0ECvdIb3xuO5JOQ==", - "dev": true - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -7663,15 +7653,15 @@ } }, "logform": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", - "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", "requires": { "colors": "^1.2.1", "fast-safe-stringify": "^2.0.4", "fecha": "^2.3.3", "ms": "^2.1.1", - "triple-beam": "^1.2.0" + "triple-beam": "^1.3.0" }, "dependencies": { "colors": { @@ -7686,6 +7676,11 @@ } } }, + "long": { + "version": "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69", + "from": "git://github.com/dcodeIO/long.js.git#8181a6b50a2a230f0b2a1e4c4093f9b9d19c8b69", + "dev": true + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -8347,11 +8342,35 @@ "vm-browserify": "0.0.4" }, "dependencies": { + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } } } }, @@ -8471,12 +8490,12 @@ "integrity": "sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ==" }, "nodemon": { - "version": "1.18.9", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.9.tgz", - "integrity": "sha512-oj/eEVTEI47pzYAjGkpcNw0xYwTl4XSTUQv2NPQI6PpN3b75PhpuYk3Vb3U80xHCyM2Jm+1j68ULHXl4OR3Afw==", + "version": "1.18.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz", + "integrity": "sha512-we51yBb1TfEvZamFchRgcfLbVYgg0xlGbyXmOtbBzDwxwgewYS/YbZ5tnlnsH51+AoSTTsT3A2E/FloUbtH8cQ==", "dev": true, "requires": { - "chokidar": "^2.0.4", + "chokidar": "^2.1.0", "debug": "^3.1.0", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", @@ -8488,6 +8507,26 @@ "update-notifier": "^2.5.0" }, "dependencies": { + "chokidar": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.1.tgz", + "integrity": "sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -8502,6 +8541,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true } } }, @@ -8919,9 +8964,9 @@ } }, "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { "asn1.js": "^4.0.0", @@ -9204,12 +9249,6 @@ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -9257,9 +9296,9 @@ } }, "postcss-colormin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz", - "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -9280,9 +9319,9 @@ } }, "postcss-discard-comments": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz", - "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { "postcss": "^7.0.0" @@ -9408,9 +9447,9 @@ "dev": true }, "postcss-merge-longhand": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz", - "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", "dev": true, "requires": { "css-color-names": "0.0.4", @@ -9420,9 +9459,9 @@ } }, "postcss-merge-rules": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz", - "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -9457,9 +9496,9 @@ } }, "postcss-minify-gradients": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz", - "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -9469,9 +9508,9 @@ } }, "postcss-minify-params": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz", - "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -9483,9 +9522,9 @@ } }, "postcss-minify-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz", - "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { "alphanum-sort": "^1.0.0", @@ -9557,9 +9596,9 @@ } }, "postcss-normalize-display-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz", - "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -9568,9 +9607,9 @@ } }, "postcss-normalize-positions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz", - "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -9580,9 +9619,9 @@ } }, "postcss-normalize-repeat-style": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz", - "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -9592,9 +9631,9 @@ } }, "postcss-normalize-string": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz", - "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { "has": "^1.0.0", @@ -9603,9 +9642,9 @@ } }, "postcss-normalize-timing-functions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz", - "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -9637,9 +9676,9 @@ } }, "postcss-normalize-whitespace": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz", - "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { "postcss": "^7.0.0", @@ -9647,9 +9686,9 @@ } }, "postcss-ordered-values": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz", - "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { "cssnano-util-get-arguments": "^4.0.0", @@ -9658,9 +9697,9 @@ } }, "postcss-reduce-initial": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz", - "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -9670,9 +9709,9 @@ } }, "postcss-reduce-transforms": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz", - "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { "cssnano-util-get-match": "^4.0.0", @@ -9757,9 +9796,9 @@ } }, "postcss-svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz", - "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dev": true, "requires": { "is-svg": "^3.0.0", @@ -10171,10 +10210,11 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { + "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", "strict-uri-encode": "^1.0.0" } @@ -10258,25 +10298,25 @@ } }, "react": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz", - "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.2.tgz", + "integrity": "sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.2" } }, "react-dom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz", - "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.2.tgz", + "integrity": "sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.12.0" + "scheduler": "^0.13.2" } }, "react-google-maps": { @@ -10384,9 +10424,9 @@ } }, "react-scroll": { - "version": "1.7.10", - "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.7.10.tgz", - "integrity": "sha512-7K1caXF19PQ/jck+QRCdRMytqWei1ktv7jtcsgMap2s55pGOUc/a5phr4loajZRFRx3qKj9Tz12KDtELp91xMg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/react-scroll/-/react-scroll-1.7.11.tgz", + "integrity": "sha512-MCWtt8KWTBzBlo9oFE7xgAhGcgbslsfQAuGZAfYlBTt3Pxi2CX+kh8OoTUVAuOwNlt9XkoWcvDTWQwtHzm2uOg==", "requires": { "lodash.throttle": "^4.1.1", "prop-types": "^15.5.8" @@ -10512,28 +10552,23 @@ } }, "redux-auth-wrapper": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/redux-auth-wrapper/-/redux-auth-wrapper-2.0.3.tgz", - "integrity": "sha1-SVwRIyt9sRXm0VINJlQcDAOXyu4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/redux-auth-wrapper/-/redux-auth-wrapper-2.1.0.tgz", + "integrity": "sha512-UtU64cJk2pWcMMfgWIVoyBVG0p8ZiGJ++vqrvQ5r5ghZZOLRq+M5aTS0RRNneiB+aCCZBzI+txFSaKYVRrv8qQ==", "requires": { - "hoist-non-react-statics": "2.5.0", - "invariant": "2.2.2", - "lodash.isempty": "4.4.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash.isempty": "^4.4.0", "prop-types": "^15.5.0", - "query-string": "4.3.4" + "query-string": "^5.1.1" }, "dependencies": { "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", "requires": { - "loose-envify": "^1.0.0" + "react-is": "^16.7.0" } } } @@ -11104,9 +11139,9 @@ } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -11278,26 +11313,27 @@ } }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "scheduler": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz", - "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.2.tgz", + "integrity": "sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } }, @@ -11941,9 +11977,9 @@ } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -12062,9 +12098,9 @@ "dev": true }, "stylehacks": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", - "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -12527,6 +12563,14 @@ "stable": "~0.1.6", "unquote": "~1.1.1", "util.promisify": "~1.0.0" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } } }, "symbol-observable": { @@ -12676,14 +12720,14 @@ } }, "terser": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", - "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", + "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", "dev": true, "requires": { "commander": "~2.17.1", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.9" }, "dependencies": { "source-map": { @@ -12695,9 +12739,9 @@ } }, "terser-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -12705,22 +12749,11 @@ "schema-utils": "^1.0.0", "serialize-javascript": "^1.4.0", "source-map": "^0.6.1", - "terser": "^3.8.1", + "terser": "^3.16.1", "webpack-sources": "^1.1.0", "worker-farm": "^1.5.2" }, "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13370,10 +13403,9 @@ "dev": true }, "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -13382,8 +13414,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, @@ -13562,15 +13593,15 @@ } }, "webpack": { - "version": "4.29.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz", - "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==", + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.4.tgz", + "integrity": "sha512-Uu/QgPFZG+w+5wjWIFBgIy+g9vOF3QiLmT2Bl783MQSLjRF/K+GMv2TH3TVNFyPQVEHY8rVnPoQtcqrnqK2H7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/ast": "1.8.2", + "@webassemblyjs/helper-module-context": "1.8.2", + "@webassemblyjs/wasm-edit": "1.8.2", + "@webassemblyjs/wasm-parser": "1.8.2", "acorn": "^6.0.5", "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", @@ -13586,7 +13617,7 @@ "mkdirp": "~0.5.0", "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", + "schema-utils": "^1.0.0", "tapable": "^1.1.0", "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", @@ -13594,9 +13625,9 @@ } }, "webpack-cli": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.1.tgz", - "integrity": "sha512-jeJveHwz/vwpJ3B8bxEL5a/rVKIpRNJDsKggfKnxuYeohNDW4Y/wB9N/XHJA093qZyS0r6mYL+/crLsIol4WKA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", + "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", "dev": true, "requires": { "chalk": "^2.4.1", @@ -13604,10 +13635,8 @@ "enhanced-resolve": "^4.1.0", "findup-sync": "^2.0.0", "global-modules": "^1.0.0", - "global-modules-path": "^2.3.0", "import-local": "^2.0.0", "interpret": "^1.1.0", - "lightercollective": "^0.1.0", "loader-utils": "^1.1.0", "supports-color": "^5.5.0", "v8-compile-cache": "^2.0.2", @@ -13680,19 +13709,31 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "winston": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz", - "integrity": "sha512-FsQfEE+8YIEeuZEYhHDk5cILo1HOcWkGwvoidLrDgPog0r4bser1lEIOco2dN9zpDJ1M88hfDgZvxe5z4xNcwg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", "requires": { - "async": "^2.6.0", + "async": "^2.6.1", "diagnostics": "^1.1.1", "is-stream": "^1.1.0", - "logform": "^1.9.1", + "logform": "^2.1.1", "one-time": "0.0.4", - "readable-stream": "^2.3.6", + "readable-stream": "^3.1.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.2.0" + "winston-transport": "^4.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "winston-transport": { @@ -13804,9 +13845,9 @@ } }, "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", + "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", "dev": true, "requires": { "graceful-fs": "^4.1.11", diff --git a/package.json b/package.json index 72b29ed5..19e9a4af 100644 --- a/package.json +++ b/package.json @@ -38,26 +38,26 @@ "@babel/core": "^7.2.2", "@babel/node": "^7.2.2", "@babel/plugin-proposal-class-properties": "^7.3.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", + "@babel/plugin-proposal-object-rest-spread": "^7.3.2", "@babel/plugin-transform-react-jsx": "^7.3.0", "@babel/polyfill": "^7.2.5", "@babel/preset-env": "^7.3.1", "@babel/preset-react": "^7.0.0", "assets-webpack-plugin": "^3.9.7", - "autoprefixer": "^9.4.6", + "autoprefixer": "^9.4.7", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", "babel-plugin-add-module-exports": "^1.0.0", "copy-webpack-plugin": "^4.6.0", "cross-env": "^5.2.0", "css-loader": "^2.1.0", - "cssnano": "^4.1.8", - "eslint": "^5.12.1", - "eslint-loader": "^2.1.1", + "cssnano": "^4.1.10", + "eslint": "^5.13.0", + "eslint-loader": "^2.1.2", "eslint-plugin-react": "^7.12.4", "mini-css-extract-plugin": "^0.5.0", "node-sass": "^4.11.0", - "nodemon": "^1.18.9", + "nodemon": "^1.18.10", "optimize-css-assets-webpack-plugin": "^5.0.1", "postcss-loader": "^3.0.0", "rimraf": "^2.6.3", @@ -67,26 +67,26 @@ "stylelint-config-standard": "^18.2.0", "stylelint-order": "^2.0.0", "uglifyjs-webpack-plugin": "^2.1.1", - "webpack": "^4.29.0", - "webpack-cli": "^3.2.1" + "webpack": "^4.29.4", + "webpack-cli": "^3.2.3" }, "dependencies": { - "aws-sdk": "^2.392.0", - "bcrypt": "^3.0.3", + "aws-sdk": "^2.403.0", + "bcrypt": "^3.0.4", "body-parser": "^1.18.3", "classnames": "^2.2.6", "compression": "^1.7.3", - "connected-react-router": "^6.2.2", - "cookie-parser": "^1.4.3", + "connected-react-router": "^6.3.1", + "cookie-parser": "^1.4.4", "cors": "^2.8.5", "create-react-class": "^15.6.3", "dotenv": "^6.2.0", "express": "^4.16.4", "express-validation": "^1.0.2", "gif-stream": "git+https://github.com/adzialocha/gif-stream.git#0.2.0", - "helmet": "^3.15.0", + "helmet": "^3.15.1", "http-status": "^1.3.1", - "immutability-helper": "^2.9.0", + "immutability-helper": "^3.0.0", "isomorphic-fetch": "^2.2.1", "joi": "^14.3.1", "jsonwebtoken": "^8.4.0", @@ -106,24 +106,24 @@ "pg": "^7.8.0", "pug": "^2.0.3", "random-animal-name-generator": "^0.1.0", - "react": "^16.7.0", - "react-dom": "^16.7.0", + "react": "^16.8.2", + "react-dom": "^16.8.2", "react-google-maps": "^9.4.5", "react-modal": "^3.8.1", "react-redux": "^6.0.0", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", - "react-scroll": "^1.7.10", + "react-scroll": "^1.7.11", "react-slider": "^0.11.2", "react-youtube": "^7.9.0", "redux": "^4.0.1", - "redux-auth-wrapper": "^2.0.3", + "redux-auth-wrapper": "^2.1.0", "redux-form": "^8.1.0", "redux-logger": "^3.0.6", "redux-thunk": "^2.3.0", "sequelize": "^4.42.0", "sequelize-slugify": "^0.6.1", "sharp": "^0.21.3", - "winston": "^3.1.0" + "winston": "^3.2.1" } } From 1d44697799b58738a6b7f9c54c823ab934f3803a Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Mon, 11 Mar 2019 17:37:16 +0100 Subject: [PATCH 46/77] Fix broken Place forms --- .../components/FormLocationSelector.js | 80 +++++++------- .../components/FormPlaceSlotSelector.js | 5 +- .../components/FormResourceSelectorList.js | 6 +- app/scripts/components/FormSlotSizeEditor.js | 101 ++++++++---------- app/scripts/forms/PlaceForm.js | 18 ++++ app/scripts/index.js | 3 + app/scripts/views/PlacesEdit.js | 25 +++-- app/scripts/views/PlacesNew.js | 45 ++++++-- app/styles/components/slot-editor.scss | 2 + common/utils/slots.js | 4 +- 10 files changed, 167 insertions(+), 122 deletions(-) diff --git a/app/scripts/components/FormLocationSelector.js b/app/scripts/components/FormLocationSelector.js index 951dbd0c..5c7f2660 100644 --- a/app/scripts/components/FormLocationSelector.js +++ b/app/scripts/components/FormLocationSelector.js @@ -2,12 +2,10 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' -import { asFormField, withConfig } from '../containers' - import styles from '../utils/googleMapStyle.json' +import { asFormField, withConfig } from '../containers' import { translate } from '../../../common/services/i18n' -const DEFAULT_MODE = 'address' const DEFAULT_ZOOM = 17 const MAP_OPTIONS = { disableDefaultUI: true, zoomControl: true, styles } @@ -41,58 +39,62 @@ const LocationSelectorMapContainer = withConfig('googleMapApiKey', true, props = class FormLocationSelector extends Component { static propTypes = { - config: PropTypes.object.isRequired, disabled: PropTypes.bool.isRequired, input: PropTypes.object.isRequired, } - componentDidUpdate() { - this.props.input.onChange(this.state) + onChange(values) { + this.props.input.onChange(this.currentValue(values)) } onBlur() { - this.props.input.onBlur(this.state) + this.props.input.onBlur(this.currentValue()) } onFocus() { - this.props.input.onFocus(this.state) + this.props.input.onFocus(this.currentValue()) } onMapClick(event) { - this.setState({ + this.onChange({ latitude: event.latLng.lat(), longitude: event.latLng.lng(), }) } onAddressChange(event) { - this.setState({ + this.onChange({ [event.target.name]: event.target.value, }) } onGpsSelect(event) { event.preventDefault() - this.setState({ + + this.onChange({ mode: 'gps', }) } onAddressSelect(event) { event.preventDefault() - this.setState({ + + this.onChange({ mode: 'address', }) } onVirtualSelect(event) { event.preventDefault() - this.setState({ + + this.onChange({ mode: 'virtual', }) } renderGpsSelector() { + const { latitude, longitude } = this.props.input.value + return (
    @@ -121,8 +123,8 @@ class FormLocationSelector extends Component { } mapElement={
    } markerPosition={ { - lat: this.state.latitude, - lng: this.state.longitude, + lat: latitude, + lng: longitude, } } onMapClick={this.onMapClick} /> @@ -131,6 +133,8 @@ class FormLocationSelector extends Component { } renderAddressSelector() { + const { street, cityCode, city, country } = this.props.input.value + return (
    @@ -144,7 +148,7 @@ class FormLocationSelector extends Component { disabled={this.props.disabled} name="street" type="text" - value={this.state.street} + value={street} onBlur={this.onBlur} onChange={this.onAddressChange} onFocus={this.onFocus} @@ -161,7 +165,7 @@ class FormLocationSelector extends Component { disabled={this.props.disabled} name="cityCode" type="text" - value={this.state.cityCode} + value={cityCode} onBlur={this.onBlur} onChange={this.onAddressChange} onFocus={this.onFocus} @@ -178,7 +182,7 @@ class FormLocationSelector extends Component { disabled={this.props.disabled} name="city" type="text" - value={this.state.city} + value={city} onBlur={this.onBlur} onChange={this.onAddressChange} onFocus={this.onFocus} @@ -195,7 +199,7 @@ class FormLocationSelector extends Component { disabled={this.props.disabled} name="country" type="text" - value={this.state.country} + value={country} onBlur={this.onBlur} onChange={this.onAddressChange} onFocus={this.onFocus} @@ -218,9 +222,11 @@ class FormLocationSelector extends Component { } renderSelector() { - if (this.state.mode === 'gps') { + const { mode } = this.props.input.value + + if (mode === 'gps') { return this.renderGpsSelector() - } else if (this.state.mode === 'address') { + } else if (mode === 'address') { return this.renderAddressSelector() } @@ -228,12 +234,14 @@ class FormLocationSelector extends Component { } render() { + const { mode } = this.props.input.value + return (
    ) @@ -116,12 +91,14 @@ class FormSlotSizeEditor extends Component {

    { translate('components.slotEditor.title') }

    +
    +
    ) } + return null } @@ -88,7 +89,9 @@ class PlaceForm extends Component { return (
    { this.renderErrorMessage() } +

    { translate('forms.common.basicInformation') }

    + + +
    +

    { translate('forms.common.uploadImages') }

    + +
    +

    { translate('forms.place.where') }

    + +
    +

    { translate('forms.place.publicOrPrivate') }

    + +
    +

    { translate('forms.place.slots') }

    + +
    +
    + { this.renderDate() } +

    { this.previewText() }

    diff --git a/app/scripts/components/MessageListItem.js b/app/scripts/components/MessageListItem.js index c6213c50..0214d0a1 100644 --- a/app/scripts/components/MessageListItem.js +++ b/app/scripts/components/MessageListItem.js @@ -1,6 +1,6 @@ -import moment from 'moment-timezone' import PropTypes from 'prop-types' import React, { Component } from 'react' +import moment from 'moment-timezone' import { AnimalLink } from './' import { asInfiniteListItem } from '../containers' @@ -28,6 +28,7 @@ class MessageListItem extends Component { return (
    { this.renderDateAndSender() } +
    { translate('components.common.emptyList') }

    } @@ -108,6 +115,10 @@ export default function asInfiniteList(WrappedListItemComponent) { } render() { + if (this.props.isLoading) { + return null + } + const listClasses = classnames( 'infinite-list-container', { 'infinite-list-container--in-modal': this.props.isInModal, @@ -130,8 +141,10 @@ export default function asInfiniteList(WrappedListItemComponent) { } } - function mapStateToProps(state) { - return state.infiniteList + function mapStateToProps(state, props) { + return { + ...state.infiniteList[props.resourceName], + } } return connect( diff --git a/app/scripts/containers/asInfiniteListCalendar.js b/app/scripts/containers/asInfiniteListCalendar.js index 0d2e7e7d..24d18f9c 100644 --- a/app/scripts/containers/asInfiniteListCalendar.js +++ b/app/scripts/containers/asInfiniteListCalendar.js @@ -1,6 +1,6 @@ -import moment from 'moment-timezone' import PropTypes from 'prop-types' import React, { Component } from 'react' +import moment from 'moment-timezone' import { connect } from 'react-redux' import { fetchList, clearList } from '../actions/infiniteList' @@ -10,10 +10,10 @@ export default function asInfiniteListCalendar(WrappedListItemComponent) { class InfiniteListContainer extends Component { static propTypes = { clearList: PropTypes.func.isRequired, - currentPageIndex: PropTypes.number.isRequired, + currentPageIndex: PropTypes.number, fetchList: PropTypes.func.isRequired, - isLoading: PropTypes.bool.isRequired, - listItems: PropTypes.array.isRequired, + isLoading: PropTypes.bool, + listItems: PropTypes.array, onClick: PropTypes.func, onEditClick: PropTypes.func, resourceName: PropTypes.string.isRequired, @@ -21,6 +21,9 @@ export default function asInfiniteListCalendar(WrappedListItemComponent) { } static defaultProps = { + currentPageIndex: 0, + isLoading: true, + listItems: [], onClick: undefined, onEditClick: undefined, totalPageCount: undefined, @@ -34,7 +37,7 @@ export default function asInfiniteListCalendar(WrappedListItemComponent) { } componentWillUnmount() { - this.props.clearList() + this.props.clearList(this.props.resourceName) } onLoadMoreClick() { @@ -125,6 +128,7 @@ export default function asInfiniteListCalendar(WrappedListItemComponent) {

    { moment(item.slots[0].from).format('DD.MM.YY') }

    + { index > 0 ?
    : null }
    ) @@ -158,8 +162,10 @@ export default function asInfiniteListCalendar(WrappedListItemComponent) { } } - function mapStateToProps(state) { - return state.infiniteList + function mapStateToProps(state, props) { + return { + ...state.infiniteList[props.resourceName], + } } return connect( diff --git a/app/scripts/containers/asInfiniteListItem.js b/app/scripts/containers/asInfiniteListItem.js index 32a340ba..7baf0a0f 100644 --- a/app/scripts/containers/asInfiniteListItem.js +++ b/app/scripts/containers/asInfiniteListItem.js @@ -1,6 +1,6 @@ -import classnames from 'classnames' import PropTypes from 'prop-types' import React, { Component } from 'react' +import classnames from 'classnames' import { translate } from '../../../common/services/i18n' @@ -83,6 +83,7 @@ export default function asInfiniteListItem(WrappedListItemComponent) { return (
    { this.renderCoverImage() } + { const errors = {} + if (!values.title) { errors.title = 'Required' } + if (!values.slug) { errors.slug = 'Required' } + if (!values.content) { errors.content = 'Required' } + return errors } @@ -38,6 +42,7 @@ class PageForm extends Component {
    ) } + return null } @@ -45,6 +50,7 @@ class PageForm extends Component { return ( { this.renderErrorMessage() } + + + +
    ) diff --git a/app/scripts/components/FormPlaceSlotSelector.js b/app/scripts/components/FormPlaceSlotSelector.js index fae4ff9d..696a16d8 100644 --- a/app/scripts/components/FormPlaceSlotSelector.js +++ b/app/scripts/components/FormPlaceSlotSelector.js @@ -1,6 +1,5 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import moment from 'moment-timezone' import { connect } from 'react-redux' import { asFormField, withConfig } from '../containers' @@ -24,40 +23,26 @@ class FormPlaceSlotSelector extends Component { slots: PropTypes.array.isRequired, } - componentDidMount() { - this.generateIsoEventTimeframe(this.state.selectedSlotsIndexes) - } - - componentDidUpdate(prevProps, prevState) { - if ( - this.state.place && ( - !prevState.place || - this.state.place.id !== prevState.place.id - ) - ) { - this.props.fetchSlots(this.state.place.slug) - } - - this.props.input.onChange(this.state) - } - onPlaceChange(place) { - this.setState({ - eventFromStr: undefined, - eventToStr: undefined, + this.props.input.onChange({ place, selectedSlotsIndexes: [], }) + + this.props.fetchSlots(place.slug) } onSlotChange(selectedSlotsIndexes) { - this.generateIsoEventTimeframe(selectedSlotsIndexes) + this.props.input.onChange({ + place: this.props.input.value.place, + selectedSlotsIndexes, + }) } renderSelectedSlots() { - const slotIndexes = this.state.selectedSlotsIndexes + const slotIndexes = this.props.input.value.selectedSlotsIndexes - if (slotIndexes.length === 0) { + if (!slotIndexes || slotIndexes.length === 0) { return null } @@ -79,7 +64,7 @@ class FormPlaceSlotSelector extends Component { ) } - if (!this.state.place) { + if (!this.props.input.value.place) { return (

    { translate('components.formPlaceSlotSelector.selectAPlaceFirst') } @@ -90,7 +75,7 @@ class FormPlaceSlotSelector extends Component { return ( @@ -98,18 +83,18 @@ class FormPlaceSlotSelector extends Component { } renderSelectedPlace() { - if (!this.state.place) { + if (!this.props.input.value.place) { return null } - return + return } renderPlaceSelector() { return ( ) @@ -133,45 +118,18 @@ class FormPlaceSlotSelector extends Component { constructor(props) { super(props) - const { place, selectedSlotsIndexes } = props.input.value - - this.state = { - eventFromStr: undefined, - eventToStr: undefined, - place, - selectedSlotsIndexes: selectedSlotsIndexes || [], - } - this.onSlotChange = this.onSlotChange.bind(this) this.onPlaceChange = this.onPlaceChange.bind(this) } generateSlots() { return generateNewSlotItems( - this.state.place.slotSize, + this.props.input.value.place.slotSize, this.props.slots, this.props.config.festivalDateStart, this.props.config.festivalDateEnd ) } - - generateIsoEventTimeframe(slotIndexes) { - if (slotIndexes.length === 0) { - return - } - - const slots = this.generateSlots() - const firstSlot = getSlotWithIndex(slots, slotIndexes[0]) - const lastSlot = getSlotWithIndex( - slots, slotIndexes[slotIndexes.length - 1] - ) - - this.setState({ - eventFromStr: moment(firstSlot.from).format(), - eventToStr: moment(lastSlot.to).format(), - selectedSlotsIndexes: slotIndexes, - }) - } } function mapStateToProps(state) { diff --git a/app/scripts/components/FormPlaceSlotSelectorPlace.js b/app/scripts/components/FormPlaceSlotSelectorPlace.js index dfabf55b..badbbe1f 100644 --- a/app/scripts/components/FormPlaceSlotSelectorPlace.js +++ b/app/scripts/components/FormPlaceSlotSelectorPlace.js @@ -2,8 +2,8 @@ import Modal from 'react-modal' import PropTypes from 'prop-types' import React, { Component } from 'react' -import { asInfiniteList } from '../containers' import { CuratedPlaceListItem } from './' +import { asInfiniteList } from '../containers' import { translate } from '../../../common/services/i18n' const WrappedInfiniteList = asInfiniteList(CuratedPlaceListItem) @@ -52,7 +52,9 @@ class FormPlaceSlotSelectorPlace extends Component {

    { translate('components.placeSelector.title') }

    + { this.renderPlacesList() } +
    +
    +
    + { this.renderModalContainer() } +
    +
    { this.renderAllItemsList() }
    @@ -113,6 +114,7 @@ class FormResourceSelectorList extends Component { if (item.isAvailable === undefined) { return true } + return item.isAvailable } diff --git a/app/scripts/forms/AdminConfigForm.js b/app/scripts/forms/AdminConfigForm.js index 706877d9..0897f0fe 100644 --- a/app/scripts/forms/AdminConfigForm.js +++ b/app/scripts/forms/AdminConfigForm.js @@ -309,6 +309,14 @@ class AdminConfigForm extends Component { name="isActivityStreamEnabled" /> + + { const errors = {} @@ -47,6 +51,7 @@ const validate = values => { class EventForm extends Component { static propTypes = { + config: PropTypes.object.isRequired, errorMessage: PropTypes.string, eventId: PropTypes.number, handleSubmit: PropTypes.func.isRequired, @@ -69,6 +74,7 @@ class EventForm extends Component {
    ) } + return null } @@ -97,7 +103,7 @@ class EventForm extends Component { return

    { translate('forms.event.selectPlaceAndSlotsFirst') }

    } - const { eventFromStr, eventToStr } = this.props.placeSlots + const { eventFromStr, eventToStr } = this.generateIsoEventTimeframe(selectedSlotsIndexes) return ( { this.renderErrorMessage() } +

    { translate('forms.event.what') }

    + + +

    { translate('forms.common.uploadImages') }

    + +
    + +
    +

    { translate('forms.event.publicOrPrivate') }

    { this.renderPrivateField() } +
    +

    { translate('forms.event.pickResources') }

    { this.renderResourcesSelector() } +
    + +
    + { this.renderForm() } ) diff --git a/common/locales/forms.en.js b/common/locales/forms.en.js index fb33cc59..3328e44d 100644 --- a/common/locales/forms.en.js +++ b/common/locales/forms.en.js @@ -102,6 +102,7 @@ export default { videoHomeId: 'Homepage video ID', videoIntroductionId: 'Sign up video ID', isActivityStreamEnabled: 'Use activity stream', + isAnonymizationEnabled: 'Use anonymized animal avatars for users', isInboxEnabled: 'Use messaging', isRandomMeetingEnabled: 'Use random meetings', isSignUpParticipantEnabled: 'Activate partipant ticket sales', diff --git a/server/controllers/base.js b/server/controllers/base.js index 0ee77ad6..2536ca10 100644 --- a/server/controllers/base.js +++ b/server/controllers/base.js @@ -13,24 +13,33 @@ const include = [{ model: Animal, }] -export function prepareAnimalResponse(animal) { +export function prepareAnimalResponse(animal, isAnonymous = true) { if (!animal) { return null } const { id, name } = animal - return { + const data = { id, name, } + + if (!isAnonymous) { + const { user } = animal + + data.userId = user.id + data.userName = `${user.firstname} ${user.lastname}` + } + + return data } -export function prepareAnimalResponseAll(animals) { - return animals.map(animal => prepareAnimalResponse(animal)) +export function prepareAnimalResponseAll(animals, isAnonymous) { + return animals.map(animal => prepareAnimalResponse(animal, isAnonymous)) } -export function prepareResponse(data, req) { +export function prepareResponse(data, req, isAnonymous) { const response = data.toJSON() // Set owner flag for frontend ui @@ -42,7 +51,7 @@ export function prepareResponse(data, req) { // Remove userId from animal to stay anonymous if (response.animal) { - response.animal = prepareAnimalResponse(response.animal) + response.animal = prepareAnimalResponse(response.animal, isAnonymous) } // Convert markdown to html @@ -51,8 +60,8 @@ export function prepareResponse(data, req) { return response } -export function prepareResponseAll(rows, req) { - return rows.map(row => prepareResponse(row, req)) +export function prepareResponseAll(rows, req, isAnonymous) { + return rows.map(row => prepareResponse(row, req, isAnonymous)) } export function lookup(model, req, res, next) { diff --git a/server/controllers/conversation.js b/server/controllers/conversation.js index 165de216..4b4de886 100644 --- a/server/controllers/conversation.js +++ b/server/controllers/conversation.js @@ -3,8 +3,9 @@ import moment from 'moment-timezone' import { Op } from 'sequelize' import pick from '../utils/pick' -import { addMessageActivity } from '../services/activity' import { APIError } from '../helpers/errors' +import { addMessageActivity } from '../services/activity' +import { getConfig } from '../config' import { DEFAULT_LIMIT, @@ -13,6 +14,7 @@ import { } from './base' import { + AnimalBelongsToUser, ConversationBelongsToManyAnimal, ConversationHasManyMessage, } from '../database/associations' @@ -26,11 +28,11 @@ const permittedFields = [ 'title', ] -function prepareResponse(conversation, req) { +function prepareResponse(conversation, req, isAnonymous) { const response = conversation.toJSON() if (response.animals) { - response.animals = prepareAnimalResponseAll(response.animals) + response.animals = prepareAnimalResponseAll(response.animals, isAnonymous) } if (response.messages) { @@ -53,8 +55,8 @@ function prepareResponse(conversation, req) { return response } -function prepareResponseAll(rows, req) { - return rows.map(row => prepareResponse(row, req)) +function prepareResponseAll(rows, req, isAnonymous) { + return rows.map(row => prepareResponse(row, req, isAnonymous)) } export default { @@ -148,6 +150,7 @@ export default { include: [ { association: ConversationBelongsToManyAnimal, + include: AnimalBelongsToUser, where: { userId: req.user.id, }, @@ -163,11 +166,17 @@ export default { ], }) .then(result => { - res.json({ - data: prepareResponseAll(result.rows, req), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, + return getConfig('isAnonymizationEnabled').then(config => { + res.json({ + data: prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) }) }) .catch(err => next(err)) @@ -204,12 +213,21 @@ export default { }, findOne: (req, res, next) => { return Conversation.findByPk(req.params.resourceId, { - include: [ - ConversationBelongsToManyAnimal, - ], + include: [{ + association: ConversationBelongsToManyAnimal, + include: AnimalBelongsToUser, + }], rejectOnEmpty: true, }) - .then(conversation => res.json(prepareResponse(conversation, req))) + .then(conversation => { + return getConfig('isAnonymizationEnabled').then(config => { + return res.json(prepareResponse( + conversation, + req, + config.isAnonymizationEnabled + )) + }) + }) .catch(err => next(err)) }, } diff --git a/server/controllers/event.js b/server/controllers/event.js index 821437db..cc0a6f29 100644 --- a/server/controllers/event.js +++ b/server/controllers/event.js @@ -23,6 +23,7 @@ import { createEventSlots, isInClosedOrder } from '../../common/utils/slots' import { getConfig } from '../config' import { + AnimalBelongsToUser, EventBelongsToAnimal, EventBelongsToManyImage, EventBelongsToManyResource, @@ -48,6 +49,7 @@ const permittedFields = [ const belongsToAnimal = { association: EventBelongsToAnimal, attributes: ['name', 'id', 'userId'], + include: AnimalBelongsToUser, } const belongsToManyResources = { @@ -377,6 +379,39 @@ function validateEvent(req, fields, eventId, festivalDateStart) { }) } +function findOneWithSlug(slug, req, res, next) { + return Event.findOne({ + include, + rejectOnEmpty: true, + where: { + slug, + }, + order: [ + [EventHasManySlots, 'from', 'ASC'], + ], + }) + .then(data => { + if (!data.isPublic && req.user.isVisitor) { + next( + new APIError( + 'Requested resource is not public', + httpStatus.FORBIDDEN + ) + ) + return null + } + + return getConfig('isAnonymizationEnabled').then(config => { + return res.json(prepareResponse( + data, + req, + config.isAnonymizationEnabled + )) + }) + }) + .catch(err => next(err)) +} + export default { create: (req, res, next) => { const fields = pick(permittedFields, req.body) @@ -384,11 +419,13 @@ export default { // Check if everything is correct before we do anything return getConfig('festivalDateStart') .then(config => { - return validateEvent(req, fields, config.festivalDateStart) + return validateEvent(req, fields, null, config.festivalDateStart) .then(() => { // Create event return createEvent(req, fields, config.festivalDateStart) - .then(event => res.json(prepareResponse(event, req))) + .then(event => { + return findOneWithSlug(event.slug, req, res, next) + }) }) .catch(err => { next(err) @@ -434,40 +471,23 @@ export default { where: req.user.isVisitor ? { isPublic: true } : {}, }) .then(result => { - res.json({ - data: prepareResponseAll(result.rows, req), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, + return getConfig('isAnonymizationEnabled').then(config => { + res.json({ + data: prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) }) }) .catch(err => next(err)) }, findOneWithSlug: (req, res, next) => { - return Event.findOne({ - include, - rejectOnEmpty: true, - where: { - slug: req.params.resourceSlug, - }, - order: [ - [EventHasManySlots, 'from', 'ASC'], - ], - }) - .then(data => { - if (!data.isPublic && req.user.isVisitor) { - next( - new APIError( - 'Requested resource is not public', - httpStatus.FORBIDDEN - ) - ) - return null - } - - return res.json(prepareResponse(data, req)) - }) - .catch(err => next(err)) + return findOneWithSlug(req.params.resourceSlug, req, res, next) }, lookup: (req, res, next) => { return lookupWithSlug(Event, req, res, next) @@ -476,13 +496,19 @@ export default { const fields = pick(permittedFields, req.body) // Check if everything is correct before we do anything - return getConfig('festivalDateStart') + return getConfig(['festivalDateStart', 'isAnonymizationEnabled']) .then(config => { return validateEvent(req, fields, req.resourceId, config.festivalDateStart) .then(() => { // Update event return updateEvent(req, fields, config.festivalDateStart) - .then(event => res.json(prepareResponse(event, req))) + .then(event => { + res.json(prepareResponse( + event, + req, + config.isAnonymizationEnabled + )) + }) }) .catch(err => { next(err) diff --git a/server/controllers/meeting.js b/server/controllers/meeting.js index 6b351d54..addd0b3e 100644 --- a/server/controllers/meeting.js +++ b/server/controllers/meeting.js @@ -30,10 +30,10 @@ const DURATION_HOURS = 1 const DATE_MINIMUM_TO_NOW_HOURS = 1 const ANY_DATE_FROM_NOW_MIN_HOURS = 2 -function createConversation(place, from, to, userId) { +function createConversation(place, from, to, user, isAnonymous) { return new Promise((resolve, reject) => { Animal.create({ - userId, + userId: user.id, }, { returning: true, }) @@ -49,7 +49,7 @@ function createConversation(place, from, to, userId) { const text = translate('api.meeting.createMessageText', { date, - name: sendingAnimal.name, + name: isAnonymous ? sendingAnimal.name : user.firstname, placeTitle, }) @@ -131,12 +131,12 @@ function getRandomPlace(from, to) { }) } -function createMeeting(userId, from, to) { +function createMeeting(user, from, to, isAnonymous) { return getRandomPlace(from, to) .then(place => { const placeId = place.id - return createConversation(place, from, to, userId) + return createConversation(place, from, to, user, isAnonymous) .then(data => { const { conversation, animalId } = data const conversationId = conversation.id @@ -151,22 +151,22 @@ function createMeeting(userId, from, to) { return addCreateMeetingActivity({ animalId, place, - userId, + userId: user.id, }) }) }) }) } -function joinMeeting(conversation, userId) { +function joinMeeting(user, conversation, isAnonymous) { return Animal.create({ - userId, + userId: user.id, }, { returning: true, }) .then(joiningAnimal => { const text = translate('api.meeting.joinMessageText', { - name: joiningAnimal.name, + name: isAnonymous ? joiningAnimal.name : user.firstname, }) return conversation.addAnimal(joiningAnimal) @@ -222,7 +222,12 @@ export default { } } - return getConfig(['festivalDateStart', 'festivalDateEnd', 'isRandomMeetingEnabled']) + return getConfig([ + 'festivalDateStart', + 'festivalDateEnd', + 'isRandomMeetingEnabled', + 'isAnonymizationEnabled', + ]) .then(config => { if (!config.isRandomMeetingEnabled) { next(new APIError('Random meetings are not available', httpStatus.FORBIDDEN)) @@ -258,7 +263,12 @@ export default { }) .then(meeting => { if (!meeting) { - return createMeeting(req.user.id, from, to) + return createMeeting( + req.user, + from, + to, + config.isAnonymizationEnabled + ) } const isAlreadyExisting = meeting.conversation.animals.find(animal => { @@ -272,7 +282,11 @@ export default { ) } - return joinMeeting(meeting.conversation, req.user.id) + return joinMeeting( + req.user, + meeting.conversation, + config.isAnonymizationEnabled + ) }) .then(() => res.json({ status: 'ok' })) .catch(err => next(err)) diff --git a/server/controllers/message.js b/server/controllers/message.js index cdd64a83..ba8595f9 100644 --- a/server/controllers/message.js +++ b/server/controllers/message.js @@ -12,7 +12,7 @@ import pick from '../utils/pick' import ConversationAnimal from '../models/conversationAnimal' import Message from '../models/message' -import { MessageBelongsToAnimal } from '../database/associations' +import { MessageBelongsToAnimal, AnimalBelongsToUser } from '../database/associations' import { addMessageActivity } from '../services/activity' import { getConfig } from '../config' @@ -20,7 +20,7 @@ const permittedFields = [ 'text', ] -function prepareResponse(message, req) { +function prepareResponse(message, req, isAnonymous) { const response = message.toJSON() const animalMe = req.meAnimal @@ -39,14 +39,14 @@ function prepareResponse(message, req) { response.textHtml = marked(response.text) if (response.animal) { - response.animal = prepareAnimalResponse(response.animal) + response.animal = prepareAnimalResponse(response.animal, isAnonymous) } return response } -function prepareResponseAll(rows, req) { - return rows.map(row => prepareResponse(row, req)) +function prepareResponseAll(rows, req, isAnonymous) { + return rows.map(row => prepareResponse(row, req, isAnonymous)) } export default { @@ -83,7 +83,10 @@ export default { offset = DEFAULT_OFFSET, } = req.query - return getConfig('isInboxEnabled').then(config => { + return getConfig([ + 'isInboxEnabled', + 'isAnonymizationEnabled', + ]).then(config => { if (!config.isInboxEnabled) { next(new APIError('Messaging is not available', httpStatus.FORBIDDEN)) return null @@ -95,7 +98,10 @@ export default { conversationId: req.params.resourceId, }, include: [ - MessageBelongsToAnimal, + { + association: MessageBelongsToAnimal, + include: AnimalBelongsToUser, + }, ], limit, offset, @@ -116,7 +122,11 @@ export default { .then(() => { // Return messages res.json({ - data: prepareResponseAll(result.rows, req), + data: prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ), limit: parseInt(limit, 10), offset: parseInt(offset, 10), total: result.count, diff --git a/server/controllers/place.js b/server/controllers/place.js index 5b729856..d32f9bde 100644 --- a/server/controllers/place.js +++ b/server/controllers/place.js @@ -13,6 +13,7 @@ import { deletePlacesByIds } from '../handlers/place' import { updateImagesForObject } from '../handlers/image' import { + AnimalBelongsToUser, PlaceBelongsToAnimal, PlaceBelongsToManyImage, PlaceHasManySlots, @@ -30,6 +31,7 @@ const include = [ { association: PlaceBelongsToAnimal, attributes: ['name', 'id', 'userId'], + include: AnimalBelongsToUser, }, PlaceHasManySlots, PlaceBelongsToManyImage, @@ -117,6 +119,32 @@ function preparePlaceValues(body) { } } +function findOneWithSlug(slug, req, res, next) { + return Place.findOne({ + include, + rejectOnEmpty: true, + where: { + slug, + }, + }) + .then(data => { + return getConfig('isAnonymizationEnabled').then(config => { + const response = prepareResponse( + data, + req, + config.isAnonymizationEnabled + ) + + if (!response.isOwnerMe) { + delete response.slots + } + + res.json(response) + }) + }) + .catch(err => next(err)) +} + export default { create: (req, res, next) => { const body = pick(permittedFieldsCreate, req.body) @@ -139,7 +167,9 @@ export default { include, returning: true, }) - .then(data => res.json(prepareResponse(data, req))) + .then(data => { + return findOneWithSlug(data.slug, req, res, next) + }) .catch(err => next(err)) }) }, @@ -166,31 +196,23 @@ export default { ], }) .then(result => { - res.json({ - data: prepareResponseAll(result.rows, req), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, + return getConfig('isAnonymizationEnabled').then(config => { + res.json({ + data: prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) }) }) .catch(err => next(err)) }, findOneWithSlug: (req, res, next) => { - return Place.findOne({ - include, - rejectOnEmpty: true, - where: { - slug: req.params.resourceSlug, - }, - }) - .then(data => { - const response = prepareResponse(data, req) - if (!response.isOwnerMe) { - delete response.slots - } - res.json(response) - }) - .catch(err => next(err)) + return findOneWithSlug(req.params.resourceSlug, req, res, next) }, lookupWithSlug: (req, res, next) => { return lookupWithSlug(Place, req, res, next) @@ -213,20 +235,23 @@ export default { }, }) .then(data => { - const previousPlace = data[1][0] - - return updateImagesForObject(previousPlace, req.body.images) - .then(() => { - // Clean up all slot before - return Slot.destroy({ - where: { - isDisabled: true, - placeId: previousPlace.id, - }, + return getConfig([ + 'festivalDateStart', + 'isAnonymizationEnabled', + ]).then(config => { + const previousPlace = data[1][0] + + return updateImagesForObject(previousPlace, req.body.images) + .then(() => { + // Clean up all slot before + return Slot.destroy({ + where: { + isDisabled: true, + placeId: previousPlace.id, + }, + }) }) - }) - .then(() => { - return getConfig('festivalDateStart').then(config => { + .then(() => { const slots = createDisabledSlots( body.disabledSlots, previousPlace.id, @@ -235,13 +260,17 @@ export default { ) return Slot.bulkCreate(slots) }) - }) - .then(() => { - return Place.findByPk(previousPlace.id, { include }) - .then(place => { - res.json(prepareResponse(place, req)) - }) - }) + .then(() => { + return Place.findByPk(previousPlace.id, { include }) + .then(place => { + res.json(prepareResponse( + place, + req, + config.isAnonymizationEnabled + )) + }) + }) + }) }) }) .catch(err => next(err)) diff --git a/server/controllers/resource.js b/server/controllers/resource.js index 3b4d1f63..2c6ef893 100644 --- a/server/controllers/resource.js +++ b/server/controllers/resource.js @@ -14,6 +14,7 @@ import { deleteResourcesByIds } from '../handlers/resource' import pick from '../utils/pick' import { + AnimalBelongsToUser, ResourceBelongsToAnimal, ResourceBelongsToManyImage, } from '../database/associations' @@ -22,6 +23,8 @@ import Event from '../models/event' import Resource from '../models/resource' import Slot from '../models/slot' +import { getConfig } from '../config' + const permittedFields = [ 'description', 'images', @@ -29,7 +32,10 @@ const permittedFields = [ ] const include = [ - ResourceBelongsToAnimal, + { + association: ResourceBelongsToAnimal, + include: AnimalBelongsToUser, + }, ResourceBelongsToManyImage, ] @@ -44,53 +50,90 @@ function findAllWithAvailability(req, res, next) { eventId = { [Op.and]: [eventId, { [Op.not]: req.query.eventId }] } } - return Resource.findAndCountAll({ - distinct: true, - limit, - offset, - order: [ - ['createdAt', 'DESC'], - ], - include: [ - ResourceBelongsToManyImage, - ResourceBelongsToAnimal, { - model: Event, - as: 'events', - include: [{ - model: Slot, - as: 'slots', - where: { - [Op.and]: [{ - eventId, - }, { - from: { - [Op.lt]: req.query.to, - }, - }, { - to: { - [Op.gt]: req.query.from, + return getConfig('isAnonymizationEnabled').then(config => { + return Resource.findAndCountAll({ + distinct: true, + limit, + offset, + order: [ + ['createdAt', 'DESC'], + ], + include: [ + ...include, + { + model: Event, + as: 'events', + required: false, + include: [ + { + model: Slot, + as: 'slots', + required: false, + where: { + [Op.and]: [{ + eventId, + }, { + from: { + [Op.lt]: req.query.to, + }, + }, { + to: { + [Op.gt]: req.query.from, + }, + }], }, - }], - }, - }], - }, - ], - }) - .then(result => { - const extendedReponse = prepareResponseAll(result.rows, req).map(row => { - row.isAvailable = (row.events.length === 0) - delete row.events - return row - }) + }, + ], + }, + ], + }) + .then(result => { + const extendedReponse = prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ).map(row => { + // Resources are available when we could not find any + // slot from another event being associated with it + row.isAvailable = row.events.find(events => { + return events.slots.length > 0 + }) === undefined + + // Do not expose the events, it is not needed + delete row.events + + return row + }) - res.json({ - data: extendedReponse, - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, + res.json({ + data: extendedReponse, + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) }) + .catch(err => next(err)) + }) +} + +function findOneWithSlug(slug, req, res, next) { + return getConfig('isAnonymizationEnabled').then(config => { + return Resource.findOne({ + include, + rejectOnEmpty: true, + where: { + slug, + }, }) - .catch(err => next(err)) + .then(data => res.json( + prepareResponse( + data, + req, + config.isAnonymizationEnabled, + ) + )) + .catch(err => next(err)) + }) } export default { @@ -102,10 +145,9 @@ export default { }, }, { include, - returning: true, }) .then(resource => { - res.json(prepareResponse(resource, req)) + return findOneWithSlug(resource.slug, req, res, next) }) .catch(err => next(err)) }, @@ -127,35 +169,33 @@ export default { offset = DEFAULT_OFFSET, } = req.query - return Resource.findAndCountAll({ - distinct: true, - include, - limit, - offset, - order: [ - ['createdAt', 'DESC'], - ], - }) - .then(result => { - res.json({ - data: prepareResponseAll(result.rows, req), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, - }) + return getConfig('isAnonymizationEnabled').then(config => { + return Resource.findAndCountAll({ + distinct: true, + include, + limit, + offset, + order: [ + ['createdAt', 'DESC'], + ], }) - .catch(err => next(err)) + .then(result => { + res.json({ + data: prepareResponseAll( + result.rows, + req, + config.isAnonymizationEnabled + ), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) + }) + .catch(err => next(err)) + }) }, findOneWithSlug: (req, res, next) => { - return Resource.findOne({ - include, - rejectOnEmpty: true, - where: { - slug: req.params.resourceSlug, - }, - }) - .then(data => res.json(prepareResponse(data, req))) - .catch(err => next(err)) + return findOneWithSlug(req.params.resourceSlug, req, res, next) }, lookup: (req, res, next) => { return lookupWithSlug(Resource, req, res, next) @@ -175,13 +215,19 @@ export default { .then(data => { const previousResource = data[1][0] - return updateImagesForObject(previousResource, req.body.images) - .then(() => { - return Resource.findByPk(previousResource.id, { include }) - .then(resource => { - res.json(prepareResponse(resource, req)) - }) - }) + return getConfig('isAnonymizationEnabled').then(config => { + return updateImagesForObject(previousResource, req.body.images) + .then(() => { + return Resource.findByPk(previousResource.id, { include }) + .then(resource => { + res.json(prepareResponse( + resource, + req, + config.isAnonymizationEnabled + )) + }) + }) + }) }) .catch(err => next(err)) }, diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js index 13b0f1d7..a576a260 100644 --- a/server/database/migrations/20190125152302-create-config-table.js +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -22,25 +22,26 @@ module.exports = { festivalDateEnd: configField(Sequelize.DATEONLY), festivalDateStart: configField(Sequelize.DATEONLY), festivalTicketPrice: configField(Sequelize.FLOAT, true), + gifStreamServerUrl: configField(Sequelize.STRING, true), + googleMapApiKey: configField(Sequelize.STRING, true), + isActivityStreamEnabled: configField(Sequelize.BOOLEAN), + isAnonymizationEnabled: configField(Sequelize.BOOLEAN), + isInboxEnabled: configField(Sequelize.BOOLEAN), + isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), + isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), + isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), mailAddressAdmin: configField(Sequelize.STRING), mailAddressRobot: configField(Sequelize.STRING), maximumParticipantsCount: configField(Sequelize.INTEGER, true), participationPrice: configField(Sequelize.FLOAT, true), timezone: configField(Sequelize.STRING), title: configField(Sequelize.STRING), - transferReceiverName: configField(Sequelize.STRING, true), + transferBIC: configField(Sequelize.STRING, true), transferBankName: configField(Sequelize.STRING, true), transferIBAN: configField(Sequelize.STRING, true), - transferBIC: configField(Sequelize.STRING, true), + transferReceiverName: configField(Sequelize.STRING, true), videoHomeId: configField(Sequelize.STRING, true), videoIntroductionId: configField(Sequelize.STRING, true), - isActivityStreamEnabled: configField(Sequelize.BOOLEAN), - isInboxEnabled: configField(Sequelize.BOOLEAN), - isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), - isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), - isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), - googleMapApiKey: configField(Sequelize.STRING, true), - gifStreamServerUrl: configField(Sequelize.STRING, true), }) }, down: queryInterface => { diff --git a/server/database/seeders/20190125162811-default-config.js b/server/database/seeders/20190125162811-default-config.js index 13125ff8..c7395454 100644 --- a/server/database/seeders/20190125162811-default-config.js +++ b/server/database/seeders/20190125162811-default-config.js @@ -15,6 +15,7 @@ module.exports = { gifStreamServerUrl: '', googleMapApiKey: '', isActivityStreamEnabled: true, + isAnonymizationEnabled: true, isInboxEnabled: true, isRandomMeetingEnabled: true, isSignUpParticipantEnabled: true, diff --git a/server/handlers/activity.js b/server/handlers/activity.js index 4688cadb..e6f8a2c4 100644 --- a/server/handlers/activity.js +++ b/server/handlers/activity.js @@ -8,11 +8,14 @@ import { ActivityBelongsToPlace, ActivityBelongsToResource, ActivityRequestBelongsToEvent, + AnimalBelongsToUser, } from '../database/associations' import Activity from '../models/activity' -function prepareResponse(conversation) { +import { getConfig } from '../config' + +function prepareResponse(conversation, isAnonymous) { const response = conversation.toJSON() const { id, createdAt, type, objectTitle, objectType } = response @@ -38,7 +41,7 @@ function prepareResponse(conversation) { title: response.requestedEvent.title, }) : null - const animal = prepareAnimalResponse(response.animal) + const animal = prepareAnimalResponse(response.animal, isAnonymous) return Object.assign({}, { animal, @@ -52,42 +55,50 @@ function prepareResponse(conversation) { }) } -export function prepareResponseAll(rows) { - return rows.map(row => prepareResponse(row)) +export function prepareResponseAll(rows, isAnonymous) { + return rows.map(row => prepareResponse(row, isAnonymous)) } export function getMyActivities(limit, offset, userId) { return new Promise((resolve, reject) => { - Activity.findAndCountAll({ - include: [ - ActivityBelongsToAnimal, - ActivityBelongsToEvent, - ActivityBelongsToPlace, - ActivityBelongsToResource, - ActivityRequestBelongsToEvent, - ], - limit, - offset, - order: [ - ['createdAt', 'DESC'], - ], - where: { - userId: { - [Op.or]: [ - null, - userId, - ], + return getConfig('isAnonymizationEnabled').then(config => { + Activity.findAndCountAll({ + include: [ + { + association: ActivityBelongsToAnimal, + include: AnimalBelongsToUser, + }, + ActivityBelongsToEvent, + ActivityBelongsToPlace, + ActivityBelongsToResource, + ActivityRequestBelongsToEvent, + ], + limit, + offset, + order: [ + ['createdAt', 'DESC'], + ], + where: { + userId: { + [Op.or]: [ + null, + userId, + ], + }, }, - }, - }) - .then(result => { - resolve({ - data: prepareResponseAll(result.rows), - limit: parseInt(limit, 10), - offset: parseInt(offset, 10), - total: result.count, - }) }) - .catch(err => reject(err)) + .then(result => { + resolve({ + data: prepareResponseAll( + result.rows, + config.isAnonymizationEnabled + ), + limit: parseInt(limit, 10), + offset: parseInt(offset, 10), + total: result.count, + }) + }) + .catch(err => reject(err)) + }) }) } diff --git a/server/helpers/mailTemplate.js b/server/helpers/mailTemplate.js index 0a3f98e4..a20e4334 100644 --- a/server/helpers/mailTemplate.js +++ b/server/helpers/mailTemplate.js @@ -48,7 +48,7 @@ function sendMail(locals, subject, receiver, templateName, sender) { // Do not send real emails when in development if (process.env.NODE_ENV === 'development') { - logger.info('SEND MAIL', mailOptions) + logger.info(`Send mail: ${JSON.stringify(mailOptions)}`) return resolve() } diff --git a/server/models/config.js b/server/models/config.js index ea0e4b57..ca0bf5f0 100644 --- a/server/models/config.js +++ b/server/models/config.js @@ -27,25 +27,26 @@ const Config = db.define('config', { festivalDateEnd: configField(Sequelize.DATEONLY), festivalDateStart: configField(Sequelize.DATEONLY), festivalTicketPrice: configField(Sequelize.FLOAT, true), + gifStreamServerUrl: configField(Sequelize.STRING, true), + googleMapApiKey: configField(Sequelize.STRING, true), + isActivityStreamEnabled: configField(Sequelize.BOOLEAN), + isAnonymizationEnabled: configField(Sequelize.BOOLEAN), + isInboxEnabled: configField(Sequelize.BOOLEAN), + isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), + isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), + isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), mailAddressAdmin: configField(Sequelize.STRING), mailAddressRobot: configField(Sequelize.STRING), maximumParticipantsCount: configField(Sequelize.INTEGER, true), participationPrice: configField(Sequelize.FLOAT, true), timezone: configField(Sequelize.STRING), title: configField(Sequelize.STRING), - transferReceiverName: configField(Sequelize.STRING, true), + transferBIC: configField(Sequelize.STRING, true), transferBankName: configField(Sequelize.STRING, true), transferIBAN: configField(Sequelize.STRING, true), - transferBIC: configField(Sequelize.STRING, true), + transferReceiverName: configField(Sequelize.STRING, true), videoHomeId: configField(Sequelize.STRING, true), videoIntroductionId: configField(Sequelize.STRING, true), - isActivityStreamEnabled: configField(Sequelize.BOOLEAN), - isInboxEnabled: configField(Sequelize.BOOLEAN), - isRandomMeetingEnabled: configField(Sequelize.BOOLEAN), - isSignUpParticipantEnabled: configField(Sequelize.BOOLEAN), - isSignUpVisitorEnabled: configField(Sequelize.BOOLEAN), - googleMapApiKey: configField(Sequelize.STRING, true), - gifStreamServerUrl: configField(Sequelize.STRING, true), }, { timestamps: false, }) diff --git a/server/validation/config.js b/server/validation/config.js index 4788a68e..fe033d64 100644 --- a/server/validation/config.js +++ b/server/validation/config.js @@ -13,25 +13,26 @@ export default { festivalDateEnd: Joi.string().isoDate().required(), festivalDateStart: Joi.string().isoDate().required(), festivalTicketPrice: Joi.number(), + gifStreamServerUrl: Joi.string().uri({ scheme: ['http', 'https'] }), + googleMapApiKey: Joi.string().token(), + isActivityStreamEnabled: Joi.boolean().required(), + isAnonymizationEnabled: Joi.boolean().required(), + isInboxEnabled: Joi.boolean().required(), + isRandomMeetingEnabled: Joi.boolean().required(), + isSignUpParticipantEnabled: Joi.boolean().required(), + isSignUpVisitorEnabled: Joi.boolean().required(), mailAddressAdmin: Joi.string().email().required(), mailAddressRobot: Joi.string().email().required(), maximumParticipantsCount: Joi.number(), participationPrice: Joi.number(), timezone: Joi.string().required(), title: Joi.string().required(), - transferReceiverName: Joi.string(), + transferBIC: Joi.string(), transferBankName: Joi.string(), transferIBAN: Joi.string(), - transferBIC: Joi.string(), + transferReceiverName: Joi.string(), videoHomeId: Joi.string(), videoIntroductionId: Joi.string(), - isActivityStreamEnabled: Joi.boolean().required(), - isInboxEnabled: Joi.boolean().required(), - isRandomMeetingEnabled: Joi.boolean().required(), - isSignUpParticipantEnabled: Joi.boolean().required(), - isSignUpVisitorEnabled: Joi.boolean().required(), - googleMapApiKey: Joi.string().token(), - gifStreamServerUrl: Joi.string().uri({ scheme: ['http', 'https'] }), }, }, } From 7a79a316157571a8a3507adc25b11507246417cd Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Sun, 17 Mar 2019 19:26:53 +0100 Subject: [PATCH 58/77] Fix config validation --- server/validation/config.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/server/validation/config.js b/server/validation/config.js index fe033d64..d990c661 100644 --- a/server/validation/config.js +++ b/server/validation/config.js @@ -13,8 +13,8 @@ export default { festivalDateEnd: Joi.string().isoDate().required(), festivalDateStart: Joi.string().isoDate().required(), festivalTicketPrice: Joi.number(), - gifStreamServerUrl: Joi.string().uri({ scheme: ['http', 'https'] }), - googleMapApiKey: Joi.string().token(), + gifStreamServerUrl: Joi.string().empty('').uri({ scheme: ['http', 'https'] }), + googleMapApiKey: Joi.string().empty('').token(), isActivityStreamEnabled: Joi.boolean().required(), isAnonymizationEnabled: Joi.boolean().required(), isInboxEnabled: Joi.boolean().required(), @@ -27,12 +27,12 @@ export default { participationPrice: Joi.number(), timezone: Joi.string().required(), title: Joi.string().required(), - transferBIC: Joi.string(), - transferBankName: Joi.string(), - transferIBAN: Joi.string(), - transferReceiverName: Joi.string(), - videoHomeId: Joi.string(), - videoIntroductionId: Joi.string(), + transferBIC: Joi.string().empty(''), + transferBankName: Joi.string().empty(''), + transferIBAN: Joi.string().empty(''), + transferReceiverName: Joi.string().empty(''), + videoHomeId: Joi.string().empty(''), + videoIntroductionId: Joi.string().empty(''), }, }, } From a2c0b9edfe662f34a04ce4ef5089d23416953510 Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Sun, 17 Mar 2019 19:27:08 +0100 Subject: [PATCH 59/77] Add option to have free registration and tickets --- app/scripts/actions/auth.js | 6 +-- app/scripts/components/AdminConfigPanel.js | 10 +---- app/scripts/components/RegistrationWizard.js | 35 ++++++++++++++++- app/scripts/components/TicketWizard.js | 35 ++++++++++++++++- common/locales/components.en.js | 1 + server/controllers/auth.js | 13 ++++++- server/controllers/ticket.js | 17 +++++++- server/services/checkout.js | 41 ++++++++++++++++++-- 8 files changed, 136 insertions(+), 22 deletions(-) diff --git a/app/scripts/actions/auth.js b/app/scripts/actions/auth.js index df2fcb24..2bd84bb8 100644 --- a/app/scripts/actions/auth.js +++ b/app/scripts/actions/auth.js @@ -66,7 +66,7 @@ export function logout() { } } -export function register(paymentMethod = 'paypal', data) { +export function register(paymentMethod, data) { const meta = { paymentMethod, } @@ -81,7 +81,7 @@ export function register(paymentMethod = 'paypal', data) { meta, } - if (paymentMethod === 'transfer') { + if (paymentMethod !== 'paypal') { success[FLASH] = { lifetime: 30000, text: translate('flash.signUpTransferSuccess'), @@ -120,7 +120,7 @@ export function buyTicket(paymentMethod = 'paypal', data) { meta, } - if (paymentMethod === 'transfer') { + if (paymentMethod !== 'paypal') { success[FLASH] = { lifetime: 30000, text: translate('flash.signUpTransferTicketSuccess'), diff --git a/app/scripts/components/AdminConfigPanel.js b/app/scripts/components/AdminConfigPanel.js index d11af3a1..7715bba7 100644 --- a/app/scripts/components/AdminConfigPanel.js +++ b/app/scripts/components/AdminConfigPanel.js @@ -24,15 +24,7 @@ class AdminConfigPanel extends Component { } onSave() { - const { values } = this.props.form - - this.props.saveConfiguration(Object.keys(values).reduce((acc, key) => { - if (values[key]) { - acc[key] = values[key] - } - - return acc - }, {})) + this.props.saveConfiguration(this.props.form.values) } render() { diff --git a/app/scripts/components/RegistrationWizard.js b/app/scripts/components/RegistrationWizard.js index ca30b5b1..9694cee8 100644 --- a/app/scripts/components/RegistrationWizard.js +++ b/app/scripts/components/RegistrationWizard.js @@ -40,6 +40,14 @@ class RegistrationWizard extends Component { form: {}, } + onFreeCheckout() { + this.setState({ + isCheckoutClicked: true, + }) + + this.props.register('free', this.props.form.values) + } + onPayPalCheckout() { this.setState({ isCheckoutClicked: true, @@ -81,6 +89,18 @@ class RegistrationWizard extends Component { return null } + renderFreeButton() { + return ( + + ) + } + renderPayPalButton() { if (!this.props.config.isPayPalEnabled) { return null @@ -118,8 +138,18 @@ class RegistrationWizard extends Component { return

    { translate('common.loading') }

    } - if (!this.props.config.isTransferEnabled && - !this.props.config.isPayPalEnabled) { + if (this.props.config.participationPrice === 0) { + return ( +
    + { this.renderFreeButton() } +
    + ) + } + + if ( + !this.props.config.isTransferEnabled && + !this.props.config.isPayPalEnabled + ) { return

    Warning: No payment was configured

    } @@ -285,6 +315,7 @@ class RegistrationWizard extends Component { } this.nextStep = this.nextStep.bind(this) + this.onFreeCheckout = this.onFreeCheckout.bind(this) this.onPayPalCheckout = this.onPayPalCheckout.bind(this) this.onTermsAcceptedChanged = this.onTermsAcceptedChanged.bind(this) this.onTransferCheckout = this.onTransferCheckout.bind(this) diff --git a/app/scripts/components/TicketWizard.js b/app/scripts/components/TicketWizard.js index 4c9dd2d9..5ce14a39 100644 --- a/app/scripts/components/TicketWizard.js +++ b/app/scripts/components/TicketWizard.js @@ -24,6 +24,14 @@ class TicketWizard extends Component { form: {}, } + onFreeCheckout() { + this.setState({ + isCheckoutClicked: true, + }) + + this.props.buyTicket('free', this.props.form.values) + } + onPayPalCheckout() { this.setState({ isCheckoutClicked: true, @@ -46,6 +54,18 @@ class TicketWizard extends Component { }) } + renderFreeButton() { + return ( + + ) + } + renderErrorMessage() { if (this.props.errorMessage) { Scroll.animateScroll.scrollToTop() @@ -99,8 +119,18 @@ class TicketWizard extends Component { ) } - if (!this.props.config.isTransferEnabled && - !this.props.config.isPayPalEnabled) { + if (this.props.config.festivalTicketPrice === 0) { + return ( +
    + { this.renderFreeButton() } +
    + ) + } + + if ( + !this.props.config.isTransferEnabled && + !this.props.config.isPayPalEnabled + ) { return

    Warning: No payment was configured

    } @@ -215,6 +245,7 @@ class TicketWizard extends Component { } this.nextStep = this.nextStep.bind(this) + this.onFreeCheckout = this.onFreeCheckout.bind(this) this.onPayPalCheckout = this.onPayPalCheckout.bind(this) this.onTermsAcceptedChanged = this.onTermsAcceptedChanged.bind(this) this.onTransferCheckout = this.onTransferCheckout.bind(this) diff --git a/common/locales/components.en.js b/common/locales/components.en.js index cb226545..337aa8d1 100644 --- a/common/locales/components.en.js +++ b/common/locales/components.en.js @@ -2,6 +2,7 @@ export default { common: { agreeWithTerms: 'I agree with the terms', emptyList: 'Nothing to do here yet ...', + freeCheckout: 'Register', nextStep: 'Next step', payViaPayPal: 'Pay via PayPal', payViaTransfer: 'Pay via transfer', diff --git a/server/controllers/auth.js b/server/controllers/auth.js index 22477a0a..ea805ed7 100644 --- a/server/controllers/auth.js +++ b/server/controllers/auth.js @@ -51,6 +51,7 @@ function signup(req, res, next) { 'description', 'isSignUpParticipantEnabled', 'maximumParticipantsCount', + 'participationPrice', 'title', ]) .then(config => { @@ -59,9 +60,19 @@ function signup(req, res, next) { return null } + if (paymentMethod === 'free' && config.participationPrice !== 0) { + next( + new APIError( + translate('api.errors.auth.paymentMethodError'), + httpStatus.BAD_REQUEST + ) + ) + return null + } + return User.count({ where: { isParticipant: true } }) .then(count => { - if (count >= config.maximumParticipantsCount) { + if (config.maximumParticipantsCount !== 0 && count >= config.maximumParticipantsCount) { next( new APIError( translate('api.errors.auth.registrationLimitExceeded'), diff --git a/server/controllers/ticket.js b/server/controllers/ticket.js index 08cd6f7d..383b3e89 100644 --- a/server/controllers/ticket.js +++ b/server/controllers/ticket.js @@ -26,13 +26,28 @@ function signup(req, res, next) { const { email, paymentMethod } = fields - return getConfig(['title', 'description', 'isSignUpVisitorEnabled']) + return getConfig([ + 'description', + 'festivalTicketPrice', + 'isSignUpVisitorEnabled', + 'title', + ]) .then(config => { if (!config.isSignUpVisitorEnabled) { next(new APIError('Ticket sales are not available', httpStatus.FORBIDDEN)) return null } + if (paymentMethod === 'free' && config.festivalTicketPrice !== 0) { + next( + new APIError( + translate('api.errors.auth.unknownPaymentMethod'), + httpStatus.BAD_REQUEST + ) + ) + return null + } + return User.findOne({ where: { email } }) .then(existingUser => { if (existingUser) { diff --git a/server/services/checkout.js b/server/services/checkout.js index 1b31a6cc..0696fdfd 100644 --- a/server/services/checkout.js +++ b/server/services/checkout.js @@ -4,7 +4,8 @@ import User from '../models/user' import { APIError } from '../helpers/errors' import { createPayment } from '../services/paypal' import { generateRandomString } from '../utils/randomHash' -import { sendWireTransferDetails } from '../helpers/mailTemplate' +import { sendWireTransferDetails, sendRegistrationComplete } from '../helpers/mailTemplate' +import { translate } from '../../common/services/i18n' function generateRandomPaymentId() { return generateRandomString(5).toUpperCase() @@ -32,7 +33,10 @@ function paypalCheckout(user, product) { return User.destroy({ where: { id: user.id }, limit: 1 }) .then(() => { reject( - new APIError('Payment error', httpStatus.INTERNAL_SERVER_ERROR) + new APIError( + translate('api.errors.auth.paymentError'), + httpStatus.INTERNAL_SERVER_ERROR + ) ) }) .catch(userDestroyError => reject(userDestroyError)) @@ -64,7 +68,31 @@ function transferCheckout(user, product) { message: 'ok', }) }) - .catch(userUpdateError => reject(userUpdateError)) + .catch(err => reject(err)) + }) +} + +function freeCheckout(user) { + return new Promise((resolve, reject) => { + User.update({ + isActive: true, + }, { + where: { id: user.id }, + limit: 1, + returning: true, + }) + .then(data => { + const updatedUser = data[1][0] + + sendRegistrationComplete({ + user: updatedUser, + }, updatedUser.email) + + resolve({ + message: 'ok', + }) + }) + .catch(err => reject(err)) }) } @@ -73,9 +101,14 @@ export default function checkout(paymentMethod, user, product) { return paypalCheckout(user, product) } else if (paymentMethod === 'transfer') { return transferCheckout(user, product) + } else if (paymentMethod === 'free') { + return freeCheckout(user) } return Promise.reject( - new APIError('Unknown payment method', httpStatus.BAD_REQUEST) + new APIError( + translate('api.errors.auth.paymentMethodError'), + httpStatus.BAD_REQUEST + ) ) } From 18504e62f76ddb9eab4b12ea77b8dcaa31d25b2d Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Sun, 17 Mar 2019 21:29:39 +0100 Subject: [PATCH 60/77] Use leaflet instead of GoogleMaps --- app/images/marker-icon-2x.png | Bin 0 -> 2464 bytes app/images/marker-icon.png | Bin 0 -> 1466 bytes app/images/marker-shadow.png | Bin 0 -> 618 bytes .../components/FormLocationSelector.js | 59 +- app/scripts/components/LocationMap.js | 121 ++- app/scripts/utils/googleMapStyle.json | 217 ----- app/scripts/views/PlacesShow.js | 15 +- app/styles/app.scss | 1 + app/styles/components/location-selector.scss | 4 +- app/styles/vendors/react-leaflet.scss | 779 ++++++++++++++++++ package-lock.json | 100 +-- package.json | 3 +- 12 files changed, 917 insertions(+), 382 deletions(-) create mode 100644 app/images/marker-icon-2x.png create mode 100644 app/images/marker-icon.png create mode 100644 app/images/marker-shadow.png delete mode 100644 app/scripts/utils/googleMapStyle.json create mode 100644 app/styles/vendors/react-leaflet.scss diff --git a/app/images/marker-icon-2x.png b/app/images/marker-icon-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..88f9e501888c9c6cb29ad340d9a888627dd1b6d8 GIT binary patch literal 2464 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 e-I|>x8~*?ZhF3snGbtJX0000cOl4 literal 0 HcmV?d00001 diff --git a/app/images/marker-icon.png b/app/images/marker-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..950edf24677ded147df13b26f91baa2b0fa70513 GIT binary patch literal 1466 zcmV;r1x5OaP)P001cn1^@s6z>|W`000GnNklGNuHDcIX17Zdjl&3`L?0sTjIws<{((Dh&g-s0<@jYQyl?D*X^?%13;ml^gy> ziMrY_^1WI=(g@LMizu=zCoA>C`6|QEq1eV92k*7m>G65*&@&6)aC&e}G zI)pf-Za|N`DT&Cn1J|o`19mumxW~hiKiKyc-P`S@q)rdTo84@QI@;0yXrG%9uhI>A zG5QHb6s4=<6xy{1 z@NMxEkryp{LS44%z$3lP^cX!9+2-;CTt3wM4(k*#C{aiIiLuB>jJj;KPhPzIC00bL zU3a#;aJld94lCW=`4&aAy8M7PY=HQ>O%$YEP4c4UY#CRxfgbE~(|uiI=YS8q;O9y6 zmIkXzR`}p7ti|PrM3a}WMnR=3NVnWdAAR>b9X@)DKL6=YsvmH%?I24wdq?Gh54_;# z$?_LvgjEdspdQlft#4CQ z`2Zyvy?*)N1Ftw|{_hakhG9WjS?Az@I@+IZ8JbWewR!XUK4&6346+d#~gsE0SY(LX8&JfY>Aj)RxGy96nwhs2rv zzW6pTnMpFkDSkT*a*6Dx|u@ds6ISVn0@^RmIsKZ5Y;bazbc;tTSq(kg(=481ODrPyNB6n z-$+U}(w$m6U6H$w17Bw+wDaFIe~GvNMYvnw31MpY0eQKT9l>SU``8k7w4)z!GZKMI z#_cEKq7k~i%nlK@6c-K?+R;B#5$?T#YpKD`t_4bAs^#E+@5QW$@OX3*`;(#{U^d-vY)&xEE>n5lYl&T?Amke9$Lam@{1K@O ze*LXqlKQHiv=gx+V^Cbb2?z@ISBQ*3amF;9UJ3SBg(N|710TLamQmYZ&Qjn2LuO<* zCZlB4n%@pc&7NNnY1}x+NWpHlq`OJEo|`aYN9<`RBUB+79g;>dgb6YlfN#kGL?lO_ z!6~M^7sOnbsUkKk<@Ysie&`G>ruxH&Mgy&8;i=A zB9OO!xR{AyODw>DS-q5YM{0ExFEAzt zm>RdS+ssW(-8|?xr0(?$vBVB*%(xDLtq3Hf0I5yFm<_g=W2`QWAax{1rWVH=I!VrP zs(rTFX@W#t$hXNvbgX`gK&^w_YD;CQ!B@e0QbLIWaKAXQe2-kkloo;{iF#6}z!4=W zi$giRj1{ zt;2w`VSCF#WE&*ev7jpsC=6175@(~nTE2;7M-L((0bH@yG}-TB$R~WXd?tA$s3|%y zA`9$sA(>F%J3ioz<-LJl*^o1|w84l>HBR`>3l9c8$5Xr@xCiIQ7{x$fMCzOk_-M=% z+{a_Q#;42`#KfUte@$NT77uaTz?b-fBe)1s5XE$yA79fm?KqM^VgLXD07*qoM6N<$ Ef<_J(9smFU literal 0 HcmV?d00001 diff --git a/app/scripts/components/FormLocationSelector.js b/app/scripts/components/FormLocationSelector.js index 5c7f2660..adb65070 100644 --- a/app/scripts/components/FormLocationSelector.js +++ b/app/scripts/components/FormLocationSelector.js @@ -1,42 +1,10 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' -import styles from '../utils/googleMapStyle.json' -import { asFormField, withConfig } from '../containers' +import { LocationMap } from './' +import { asFormField } from '../containers' import { translate } from '../../../common/services/i18n' -const DEFAULT_ZOOM = 17 -const MAP_OPTIONS = { disableDefaultUI: true, zoomControl: true, styles } - -const LocationSelectorMap = withScriptjs(withGoogleMap(props => { - const defaultCenter = { - lat: props.config.defaultLatitude, - lng: props.config.defaultLongitude, - } - const center = props.markerPosition ? props.markerPosition : defaultCenter - - return ( - - - - ) -})) - -const LocationSelectorMapContainer = withConfig('googleMapApiKey', true, props => { - const googleMapURL = `https://maps.googleapis.com/maps/api/js?v=3.exp&key=${props.config.googleMapApiKey}` - - return -}) - class FormLocationSelector extends Component { static propTypes = { disabled: PropTypes.bool.isRequired, @@ -56,9 +24,11 @@ class FormLocationSelector extends Component { } onMapClick(event) { + const { latitude, longitude } = event + this.onChange({ - latitude: event.latLng.lat(), - longitude: event.latLng.lng(), + latitude, + longitude, }) } @@ -114,19 +84,10 @@ class FormLocationSelector extends Component {
    - } - loadingElement={ -
    - { translate('common.loading') } -
    - } - mapElement={
    } - markerPosition={ { - lat: latitude, - lng: longitude, - } } - onMapClick={this.onMapClick} +
    ) diff --git a/app/scripts/components/LocationMap.js b/app/scripts/components/LocationMap.js index b5246036..9e0e297e 100644 --- a/app/scripts/components/LocationMap.js +++ b/app/scripts/components/LocationMap.js @@ -1,58 +1,93 @@ +import L from 'leaflet' import PropTypes from 'prop-types' import React, { Component } from 'react' -import { GoogleMap, Marker, withGoogleMap, withScriptjs } from 'react-google-maps' +import { Map, TileLayer, Marker } from 'react-leaflet' -import styles from '../utils/googleMapStyle.json' -import { translate } from '../../../common/services/i18n' +const DEFAULT_ZOOM = 13 -import { withConfig } from '../containers' - -const DEFAULT_ZOOM = 15 -const MAP_OPTIONS = { - disableDefaultUI: true, - styles, - zoomControl: true, -} - -const LocationGoogleMap = withScriptjs(withGoogleMap(props => { - return ( - - - - ) -})) +const markerIcon = new L.Icon.Default({ + imagePath: '/static/', +}) class LocationMap extends Component { static propTypes = { - config: PropTypes.object.isRequired, - latitude: PropTypes.number.isRequired, - longitude: PropTypes.number.isRequired, + className: PropTypes.string, + initialCenter: PropTypes.shape({ + lat: PropTypes.number.isRequired, + lng: PropTypes.number.isRequired, + }).isRequired, + onClick: PropTypes.func, } - render() { - const googleMapUrl = `https://maps.googleapis.com/maps/api/js?v=3.exp&key=${this.props.config.googleMapApiKey}` + static defaultProps = { + className: undefined, + onClick: undefined, + } + + onClick(event) { + if (!this.props.onClick) { + return + } + + const { lat, lng } = event.latlng + + this.props.onClick({ + latitude: lat, + longitude: lng, + }) + + this.setState({ + position: { + lat, + lng, + }, + }) + } + onZoom(event) { + this.setState({ + zoom: event.target._zoom, + }) + } + + render() { return ( - } - googleMapURL={googleMapUrl} - loadingElement={ -
    - { translate('common.loading') } -
    - } - mapElement={
    } - markerPosition={ { - lat: this.props.latitude, - lng: this.props.longitude, - } } - /> + + + + + ) } + + constructor(props) { + super(props) + + const { lat, lng } = props.initialCenter + + this.state = { + position: { + lat, + lng, + }, + zoom: DEFAULT_ZOOM, + } + + this.onClick = this.onClick.bind(this) + this.onZoom = this.onZoom.bind(this) + } } -export default withConfig('googleMapApiKey', true, LocationMap) +export default LocationMap diff --git a/app/scripts/utils/googleMapStyle.json b/app/scripts/utils/googleMapStyle.json deleted file mode 100644 index df927566..00000000 --- a/app/scripts/utils/googleMapStyle.json +++ /dev/null @@ -1,217 +0,0 @@ -[ - { - "elementType": "geometry", - "stylers": [ - { - "color": "#f5f5f5" - } - ] - }, - { - "elementType": "labels.icon", - "stylers": [ - { - "visibility": "off" - } - ] - }, - { - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#616161" - } - ] - }, - { - "elementType": "labels.text.stroke", - "stylers": [ - { - "color": "#f5f5f5" - } - ] - }, - { - "featureType": "administrative", - "elementType": "labels.text", - "stylers": [ - { - "color": "#ffffff" - }, - { - "weight": 8 - } - ] - }, - { - "featureType": "administrative", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#000000" - } - ] - }, - { - "featureType": "landscape.man_made", - "elementType": "geometry.stroke", - "stylers": [ - { - "color": "#666666" - } - ] - }, - { - "featureType": "landscape.natural", - "elementType": "geometry.fill", - "stylers": [ - { - "color": "#00ff00" - } - ] - }, - { - "featureType": "poi", - "stylers": [ - { - "visibility": "off" - } - ] - }, - { - "featureType": "poi", - "elementType": "geometry", - "stylers": [ - { - "color": "#eeeeee" - } - ] - }, - { - "featureType": "poi", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#757575" - } - ] - }, - { - "featureType": "poi.park", - "stylers": [ - { - "color": "#00ff00" - }, - { - "visibility": "on" - } - ] - }, - { - "featureType": "road", - "elementType": "geometry", - "stylers": [ - { - "color": "#000000" - }, - { - "weight": 2.5 - } - ] - }, - { - "featureType": "road", - "elementType": "labels.text", - "stylers": [ - { - "color": "#ffffff" - }, - { - "weight": 8 - } - ] - }, - { - "featureType": "road", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#000000" - } - ] - }, - { - "featureType": "road.arterial", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#757575" - } - ] - }, - { - "featureType": "road.highway", - "elementType": "geometry", - "stylers": [ - { - "color": "#dadada" - } - ] - }, - { - "featureType": "road.highway", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#616161" - } - ] - }, - { - "featureType": "road.local", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#9e9e9e" - } - ] - }, - { - "featureType": "transit", - "stylers": [ - { - "color": "#0000ff" - } - ] - }, - { - "featureType": "transit.station", - "elementType": "geometry", - "stylers": [ - { - "color": "#0000ff" - } - ] - }, - { - "featureType": "water", - "elementType": "geometry", - "stylers": [ - { - "color": "#0000ff" - }, - { - "lightness": 85 - } - ] - }, - { - "featureType": "water", - "elementType": "labels.text.fill", - "stylers": [ - { - "color": "#9e9e9e" - } - ] - } -] diff --git a/app/scripts/views/PlacesShow.js b/app/scripts/views/PlacesShow.js index 1b021036..1fd39c90 100644 --- a/app/scripts/views/PlacesShow.js +++ b/app/scripts/views/PlacesShow.js @@ -1,11 +1,11 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' -import { connect } from 'react-redux' import { Link } from 'react-router-dom' +import { connect } from 'react-redux' +import { LocationMap, ImageGallery, AnimalLink } from '../components' import { cachedResource } from '../services/resources' import { fetchResource } from '../actions/resources' -import { LocationMap, ImageGallery, AnimalLink } from '../components' import { numberToSlotSizeStrHuman } from '../../../common/utils/slots' import { translate } from '../../../common/services/i18n' @@ -54,6 +54,7 @@ class PlacesShow extends Component { { translate('views.places.slotSizeHeader') } +

    { numberToSlotSizeStrHuman(this.props.resourceData.slotSize) }

    ) @@ -76,8 +77,10 @@ class PlacesShow extends Component { { translate('views.places.locationHeader') } +

    @ { latitude }, { longitude }

    - + +
    ) } else if (mode === 'address') { @@ -86,6 +89,7 @@ class PlacesShow extends Component { { translate('views.places.locationHeader') } +

    { street }
    { `${cityCode} ${city}` }
    @@ -99,6 +103,7 @@ class PlacesShow extends Component { { translate('views.places.locationHeader') } +

    { translate('views.places.virtualLocation') }

    ) @@ -129,9 +134,11 @@ class PlacesShow extends Component { return (

    + { translate('views.common.imageGalleryTitle') } +
    ) @@ -172,9 +179,11 @@ class PlacesShow extends Component { return (
    { this.renderTitle() } + { translate('common.backToOverview') } + { this.renderActionButton() }
    { this.renderContent() } diff --git a/app/styles/app.scss b/app/styles/app.scss index d239e75d..7a3a3b69 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -55,6 +55,7 @@ // Vendors @import "vendors/react-modal"; @import "vendors/react-slider"; +@import "vendors/react-leaflet"; // Layout @import "layout/footer"; diff --git a/app/styles/components/location-selector.scss b/app/styles/components/location-selector.scss index fd890785..1047ee27 100644 --- a/app/styles/components/location-selector.scss +++ b/app/styles/components/location-selector.scss @@ -10,10 +10,8 @@ $_location-selector-height: 300px; } .location-selector__container { - height: $_location-selector-height; -} + overflow: hidden; -.location-selector__map { height: $_location-selector-height; } diff --git a/app/styles/vendors/react-leaflet.scss b/app/styles/vendors/react-leaflet.scss new file mode 100644 index 00000000..9f22fb71 --- /dev/null +++ b/app/styles/vendors/react-leaflet.scss @@ -0,0 +1,779 @@ +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + + top: 0; + left: 0; +} + +.leaflet-zoom-box { + z-index: 800; + + -moz-box-sizing: border-box; + box-sizing: border-box; + + width: 0; + height: 0; + + border: 2px dotted #38f; + + background: rgba($white, .5); +} + +.leaflet-container { + overflow: hidden; + + background: $gray-lighter; + + font: 12px/1.5 Arial, Helvetica, sans-serif; + + outline: 0; + + -webkit-tap-highlight-color: transparent; + + a { + color: $blue; + + -webkit-tap-highlight-color: rgba($blue, .4); + } +} + +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; +} + +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; +} + +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; +} + +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; +} + +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ + +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; +} + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; +} + +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} + +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} + +.leaflet-tile { + filter: inherit; + + visibility: hidden; +} + +.leaflet-tile-loaded { + visibility: inherit; +} + +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; +} + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; +} + +.lvml { + position: absolute; + + display: inline-block; + behavior: url(#default#VML); +} + +/* control positioning */ + +.leaflet-control { + position: relative; + + z-index: 800; + + float: left; + clear: both; + + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; +} + +.leaflet-top, +.leaflet-bottom { + position: absolute; + + z-index: 1000; + + pointer-events: none; +} + +.leaflet-top { + top: 0; +} + +.leaflet-right { + right: 0; +} + +.leaflet-bottom { + bottom: 0; +} + +.leaflet-left { + left: 0; +} + +.leaflet-right .leaflet-control { + float: right; + + margin-right: 10px; +} + +.leaflet-top .leaflet-control { + margin-top: 10px; +} + +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; +} + +.leaflet-left .leaflet-control { + margin-left: 10px; +} + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; +} + +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + + -webkit-transition: opacity .2s linear; + -moz-transition: opacity .2s linear; + transition: opacity .2s linear; +} + +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; +} + +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; +} + +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; + + -webkit-transition: -webkit-transform .25s cubic-bezier(0, 0, .25, 1); + -moz-transition: -moz-transform .25s cubic-bezier(0, 0, .25, 1); + transition: transform .25s cubic-bezier(0, 0, .25, 1); +} + +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; +} + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; +} + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; +} + +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} + +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; +} + +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; +} + +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; +} + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; +} + +/* visual tweaks */ + +.leaflet-container a.leaflet-active { + outline: 2px solid orange; +} + +/* general toolbar styles */ + +.leaflet-bar { + border-radius: 4px; + + box-shadow: 0 1px 5px rgba(0, 0, 0, .65); +} + +.leaflet-bar a, +.leaflet-bar a:hover { + display: block; + + width: 26px; + height: 26px; + + border-bottom: 1px solid #ccc; + + color: black; + + background-color: #fff; + + line-height: 26px; + + text-align: center; + text-decoration: none; +} + +.leaflet-bar a, +.leaflet-control-layers-toggle { + display: block; + + background-repeat: no-repeat; + background-position: 50% 50%; +} + +.leaflet-bar a:hover { + background-color: #f4f4f4; +} + +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.leaflet-bar a:last-child { + border-bottom: none; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.leaflet-bar a.leaflet-disabled { + color: #bbb; + + background-color: #f4f4f4; + + cursor: default; +} + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + + line-height: 30px; +} + +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} + +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-right-radius: 2px; + border-bottom-left-radius: 2px; +} + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px "Lucida Console", Monaco, monospace; + + text-indent: 1px; +} + +.leaflet-touch .leaflet-control-zoom-in, +.leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; +} + +/* layers control */ + +.leaflet-control-layers { + border-radius: 5px; + + background: #fff; + + box-shadow: 0 1px 5px rgba(0, 0, 0, .4); +} + +.leaflet-control-layers-toggle { + width: 36px; + height: 36px; +} + +.leaflet-retina .leaflet-control-layers-toggle { + background-size: 26px 26px; +} + +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; +} + +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; +} + +.leaflet-control-layers-expanded .leaflet-control-layers-list { + position: relative; + + display: block; +} + +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + + color: #333; + + background: #fff; +} + +.leaflet-control-layers-scrollbar { + overflow-x: hidden; + overflow-y: scroll; + + padding-right: 5px; +} + +.leaflet-control-layers-selector { + position: relative; + + top: 1px; + + margin-top: 2px; +} + +.leaflet-control-layers label { + display: block; +} + +.leaflet-control-layers-separator { + height: 0; + + margin: 5px -10px 5px -6px; + + border-top: 1px solid #ddd; +} + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + margin: 0; + + background: #fff; + background: rgba(255, 255, 255, .7); +} + +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + + color: #333; +} + +.leaflet-control-attribution a { + text-decoration: none; +} + +.leaflet-control-attribution a:hover { + text-decoration: underline; +} + +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; +} + +.leaflet-left .leaflet-control-scale { + margin-left: 5px; +} + +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; +} + +.leaflet-control-scale-line { + overflow: hidden; + + -moz-box-sizing: border-box; + box-sizing: border-box; + + padding: 2px 5px 1px; + + border: 2px solid #777; + border-top: none; + + white-space: nowrap; + + background: #fff; + background: rgba(255, 255, 255, .5); + + font-size: 11px; + + line-height: 1.1; +} + +.leaflet-control-scale-line:not(:first-child) { + margin-top: -2px; + + border-top: 2px solid #777; + border-bottom: none; +} + +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; +} + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; +} + +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0, 0, 0, .2); + background-clip: padding-box; +} + +/* popup */ + +.leaflet-popup { + position: absolute; + + margin-bottom: 20px; + + text-align: center; +} + +.leaflet-popup-content-wrapper { + padding: 1px; + + border-radius: 12px; + + text-align: left; +} + +.leaflet-popup-content { + margin: 13px 19px; + + line-height: 1.4; +} + +.leaflet-popup-content p { + margin: 18px 0; +} + +.leaflet-popup-tip-container { + position: absolute; + + left: 50%; + + overflow: hidden; + + width: 40px; + height: 20px; + + margin-left: -20px; + + pointer-events: none; +} + +.leaflet-popup-tip { + width: 17px; + height: 17px; + + margin: -10px auto 0; + padding: 1px; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + color: #333; + + background: white; + + box-shadow: 0 3px 14px rgba(0, 0, 0, .4); +} + +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + + top: 0; + right: 0; + + width: 18px; + height: 14px; + + padding: 4px 4px 0 0; + + border: none; + + color: #c3c3c3; + + background: transparent; + + font: 16px/14px Tahoma, Verdana, sans-serif; + font-weight: bold; + + text-align: center; + text-decoration: none; +} + +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; +} + +.leaflet-popup-scrolled { + overflow: auto; + + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; +} + +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:dximagetransform.microsoft.matrix(M11=.70710678, M12=.70710678, M21=-.70710678, M22=.70710678); +} + +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; +} + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; +} + +/* div icon */ + +.leaflet-div-icon { + border: 1px solid #666; + + background: #fff; +} + +/* Tooltip */ + +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + + padding: 6px; + + border: 1px solid #fff; + border-radius: 3px; + + white-space: nowrap; + + color: #222; + + background-color: #fff; + + box-shadow: 0 1px 3px rgba(0, 0, 0, .4); + + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.leaflet-tooltip.leaflet-clickable { + cursor: pointer; + pointer-events: auto; +} + +.leaflet-tooltip-top::before, +.leaflet-tooltip-bottom::before, +.leaflet-tooltip-left::before, +.leaflet-tooltip-right::before { + position: absolute; + + border: 6px solid transparent; + + content: ""; + + background: transparent; + + pointer-events: none; +} + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} + +.leaflet-tooltip-top { + margin-top: -6px; +} + +.leaflet-tooltip-bottom::before, +.leaflet-tooltip-top::before { + left: 50%; + + margin-left: -6px; +} + +.leaflet-tooltip-top::before { + bottom: 0; + + margin-bottom: -12px; + + border-top-color: #fff; +} + +.leaflet-tooltip-bottom::before { + top: 0; + + margin-top: -12px; + margin-left: -6px; + + border-bottom-color: #fff; +} + +.leaflet-tooltip-left { + margin-left: -6px; +} + +.leaflet-tooltip-right { + margin-left: 6px; +} + +.leaflet-tooltip-left::before, +.leaflet-tooltip-right::before { + top: 50%; + + margin-top: -6px; +} + +.leaflet-tooltip-left::before { + right: 0; + + margin-right: -12px; + + border-left-color: #fff; +} + +.leaflet-tooltip-right::before { + left: 0; + + margin-left: -12px; + + border-right-color: #fff; +} diff --git a/package-lock.json b/package-lock.json index 6896a8b5..b5a9e85f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2871,11 +2871,6 @@ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "can-use-dom": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", - "integrity": "sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo=" - }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -2932,11 +2927,6 @@ "supports-color": "^5.3.0" } }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" - }, "character-entities": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", @@ -6138,11 +6128,6 @@ } } }, - "google-maps-infobox": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/google-maps-infobox/-/google-maps-infobox-2.0.0.tgz", - "integrity": "sha512-hTuWmWZZSOxf5D/z7l3/hTF1grgRvLG53BEKMdjiKOG+FcK/kH7vqseUeyIU9Zj2ZIqKTOaro0nknxpAuRq4Vw==" - }, "got": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -7461,6 +7446,11 @@ "invert-kv": "^2.0.0" } }, + "leaflet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.4.0.tgz", + "integrity": "sha512-x9j9tGY1+PDLN9pcWTx9/y6C5nezoTMB8BLK5jTakx+H7bPlnbCHfi9Hjg+Qt36sgDz/cb9lrSpNQXmk45Tvhw==" + }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -7840,16 +7830,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.1.tgz", "integrity": "sha512-+H0L3ibcWhAZE02SKMqmvYsErLo4EAVJxu5h3bHBBDvvjeWXtl92rGUSBYHL2++5Y+RSNgl8dYOAXcYe7lp1fA==" }, - "marker-clusterer-plus": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/marker-clusterer-plus/-/marker-clusterer-plus-2.1.4.tgz", - "integrity": "sha1-+O/3TVmdqzt9Dj/tUmTqDnBPXWc=" - }, - "markerwithlabel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/markerwithlabel/-/markerwithlabel-2.0.2.tgz", - "integrity": "sha512-C/cbm1A0h/u54gwHk5ZJNdUU3V3+1BbCpRPMsMyFA7vF4yL+aB4rWpxACz29TpQ+cTg6/iQroExh0PMSRGtQFg==" - }, "mathml-tag-names": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz", @@ -10395,29 +10375,40 @@ "scheduler": "^0.13.4" } }, - "react-google-maps": { - "version": "9.4.5", - "resolved": "https://registry.npmjs.org/react-google-maps/-/react-google-maps-9.4.5.tgz", - "integrity": "sha512-8z5nX9DxIcBCXuEiurmRT1VXVwnzx0C6+3Es6lxB2/OyY2SLax2/LcDu6Aldxnl3HegefTL7NJzGeaKAJ61pOA==", - "requires": { - "babel-runtime": "^6.11.6", - "can-use-dom": "^0.1.0", - "google-maps-infobox": "^2.0.0", - "invariant": "^2.2.1", - "lodash": "^4.16.2", - "marker-clusterer-plus": "^2.1.4", - "markerwithlabel": "^2.0.1", - "prop-types": "^15.5.8", - "recompose": "^0.26.0", - "scriptjs": "^2.5.8", - "warning": "^3.0.0" - } - }, "react-is": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz", "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==" }, + "react-leaflet": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-2.2.1.tgz", + "integrity": "sha512-q95486MsoKYmHFRDJyKRY/wdlKbaiTBfq23rfcG9WwsGNxaQuHLcIhxj3m9s4PiG3DImhz3Qfov6UUrsf+yMpw==", + "requires": { + "@babel/runtime": "^7.3.1", + "fast-deep-equal": "^2.0.1", + "hoist-non-react-statics": "^3.3.0", + "warning": "^4.0.3" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "requires": { + "react-is": "^16.7.0" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", @@ -10594,24 +10585,6 @@ "readable-stream": "^2.0.2" } }, - "recompose": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", - "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", - "requires": { - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "symbol-observable": "^1.0.4" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -11253,11 +11226,6 @@ "ajv-keywords": "^3.1.0" } }, - "scriptjs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz", - "integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg==" - }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", diff --git a/package.json b/package.json index efe512c1..d48cf6b7 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "jsonwebtoken": "^8.5.0", "jwt-decode": "^2.2.0", "keymirror": "^0.1.1", + "leaflet": "^1.4.0", "marked": "^0.6.1", "method-override": "^3.0.0", "mime": "^2.4.0", @@ -108,7 +109,7 @@ "random-animal-name-generator": "^0.1.0", "react": "^16.8.4", "react-dom": "^16.8.4", - "react-google-maps": "^9.4.5", + "react-leaflet": "^2.2.1", "react-modal": "^3.8.1", "react-redux": "^6.0.1", "react-router": "^4.4.0", From b047c22280b87c96b2184d410cdb1f915c29680f Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Sun, 17 Mar 2019 21:36:31 +0100 Subject: [PATCH 61/77] Remove GoogleMap API key from configuration --- README.md | 3 +-- .../components/FormLocationSelector.js | 1 - app/scripts/components/LocationMap.js | 4 +--- app/scripts/forms/AdminConfigForm.js | 8 -------- app/scripts/views/EventsShow.js | 19 ++++++++++++++++--- app/scripts/views/PlacesShow.js | 2 +- app/styles/components/location-map.scss | 8 +------- app/styles/components/location-selector.scss | 8 -------- common/locales/forms.en.js | 1 - .../20190125152302-create-config-table.js | 1 - .../seeders/20190125162811-default-config.js | 1 - server/models/config.js | 1 - server/validation/config.js | 1 - 13 files changed, 20 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index a0fec210..85ce4043 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,9 @@ Conversation.belongsToMany(Animal, { * Node and npm * PostgreSQL Database -* Google Map API key * AWS S3 Cloud Storage -* PayPal Account for payment * Mail-Server (SMTP) +* PayPal Account for payment (optional) * [gif-stream-server](https://github.com/adzialocha/gif-stream-server) (optional) ## Setup diff --git a/app/scripts/components/FormLocationSelector.js b/app/scripts/components/FormLocationSelector.js index adb65070..5c6a8dd7 100644 --- a/app/scripts/components/FormLocationSelector.js +++ b/app/scripts/components/FormLocationSelector.js @@ -85,7 +85,6 @@ class FormLocationSelector extends Component {
    diff --git a/app/scripts/components/LocationMap.js b/app/scripts/components/LocationMap.js index 9e0e297e..b6eaefdc 100644 --- a/app/scripts/components/LocationMap.js +++ b/app/scripts/components/LocationMap.js @@ -11,7 +11,6 @@ const markerIcon = new L.Icon.Default({ class LocationMap extends Component { static propTypes = { - className: PropTypes.string, initialCenter: PropTypes.shape({ lat: PropTypes.number.isRequired, lng: PropTypes.number.isRequired, @@ -20,7 +19,6 @@ class LocationMap extends Component { } static defaultProps = { - className: undefined, onClick: undefined, } @@ -54,7 +52,7 @@ class LocationMap extends Component { return ( { translate('forms.config.services') } - - { translate('views.events.isPrivateEvent') } @@ -88,8 +89,10 @@ class EventsShow extends Component { { translate('views.places.locationHeader') } +

    @ { latitude }, { longitude }

    - + +
    ) } else if (mode === 'address') { @@ -98,6 +101,7 @@ class EventsShow extends Component { { translate('views.places.locationHeader') } +

    { street }
    { `${cityCode} ${city}` }
    @@ -111,6 +115,7 @@ class EventsShow extends Component { { translate('views.places.locationHeader') } +

    { translate('views.places.virtualLocation') }

    ) @@ -143,6 +148,7 @@ class EventsShow extends Component { } else if (mode === 'address') { return `@ ${street}, ${cityCode} ${city}` } + return translate('components.placeListItem.virtualLocation') } @@ -158,6 +164,7 @@ class EventsShow extends Component { if (this.props.isLoading) { return

    { translate('views.events.titlePlaceholder') }

    } + return

    { this.props.resourceData.title }

    } @@ -169,9 +176,11 @@ class EventsShow extends Component { return (

    + { translate('views.common.imageGalleryTitle') } +
    ) @@ -187,9 +196,11 @@ class EventsShow extends Component { { this.renderOwner() } { this.renderPrivacy() } { this.renderEventTime() } +

    { this.renderPlace() }

    + { this.renderDescription() } { this.renderImageGallery() }
    @@ -205,9 +216,11 @@ class EventsShow extends Component { return (
    { this.renderTitle() } + { translate('common.backToOverview') } + { this.renderActionButton() }
    { this.renderContent() } diff --git a/app/scripts/views/PlacesShow.js b/app/scripts/views/PlacesShow.js index 1fd39c90..2d8b2f5d 100644 --- a/app/scripts/views/PlacesShow.js +++ b/app/scripts/views/PlacesShow.js @@ -80,7 +80,7 @@ class PlacesShow extends Component {

    @ { latitude }, { longitude }

    - +
    ) } else if (mode === 'address') { diff --git a/app/styles/components/location-map.scss b/app/styles/components/location-map.scss index ba615a0d..b69234f7 100644 --- a/app/styles/components/location-map.scss +++ b/app/styles/components/location-map.scss @@ -1,9 +1,3 @@ -$_location-map-height: 300px; - .location-map { - height: $_location-map-height; -} - -.location-map__google-map { - height: $_location-map-height; + height: 300px; } diff --git a/app/styles/components/location-selector.scss b/app/styles/components/location-selector.scss index 1047ee27..65c557d4 100644 --- a/app/styles/components/location-selector.scss +++ b/app/styles/components/location-selector.scss @@ -1,5 +1,3 @@ -$_location-selector-height: 300px; - .location-selector { margin-top: 20px; margin-bottom: 20px; @@ -9,12 +7,6 @@ $_location-selector-height: 300px; margin-top: 20px; } -.location-selector__container { - overflow: hidden; - - height: $_location-selector-height; -} - .location-selector__kitty-future { width: 100%; } diff --git a/common/locales/forms.en.js b/common/locales/forms.en.js index 3328e44d..e79496a2 100644 --- a/common/locales/forms.en.js +++ b/common/locales/forms.en.js @@ -107,7 +107,6 @@ export default { isRandomMeetingEnabled: 'Use random meetings', isSignUpParticipantEnabled: 'Activate partipant ticket sales', isSignUpVisitorEnabled: 'Activate visitor ticket sales', - googleMapApiKey: 'Google Maps API key', gifStreamServerUrl: 'gif-stream Server URL', }, place: { diff --git a/server/database/migrations/20190125152302-create-config-table.js b/server/database/migrations/20190125152302-create-config-table.js index a576a260..7d4b0484 100644 --- a/server/database/migrations/20190125152302-create-config-table.js +++ b/server/database/migrations/20190125152302-create-config-table.js @@ -23,7 +23,6 @@ module.exports = { festivalDateStart: configField(Sequelize.DATEONLY), festivalTicketPrice: configField(Sequelize.FLOAT, true), gifStreamServerUrl: configField(Sequelize.STRING, true), - googleMapApiKey: configField(Sequelize.STRING, true), isActivityStreamEnabled: configField(Sequelize.BOOLEAN), isAnonymizationEnabled: configField(Sequelize.BOOLEAN), isInboxEnabled: configField(Sequelize.BOOLEAN), diff --git a/server/database/seeders/20190125162811-default-config.js b/server/database/seeders/20190125162811-default-config.js index c7395454..a3880267 100644 --- a/server/database/seeders/20190125162811-default-config.js +++ b/server/database/seeders/20190125162811-default-config.js @@ -13,7 +13,6 @@ module.exports = { festivalDateStart: '2017-08-24', festivalTicketPrice: 10.00, gifStreamServerUrl: '', - googleMapApiKey: '', isActivityStreamEnabled: true, isAnonymizationEnabled: true, isInboxEnabled: true, diff --git a/server/models/config.js b/server/models/config.js index ca0bf5f0..88466259 100644 --- a/server/models/config.js +++ b/server/models/config.js @@ -28,7 +28,6 @@ const Config = db.define('config', { festivalDateStart: configField(Sequelize.DATEONLY), festivalTicketPrice: configField(Sequelize.FLOAT, true), gifStreamServerUrl: configField(Sequelize.STRING, true), - googleMapApiKey: configField(Sequelize.STRING, true), isActivityStreamEnabled: configField(Sequelize.BOOLEAN), isAnonymizationEnabled: configField(Sequelize.BOOLEAN), isInboxEnabled: configField(Sequelize.BOOLEAN), diff --git a/server/validation/config.js b/server/validation/config.js index d990c661..5dac3389 100644 --- a/server/validation/config.js +++ b/server/validation/config.js @@ -14,7 +14,6 @@ export default { festivalDateStart: Joi.string().isoDate().required(), festivalTicketPrice: Joi.number(), gifStreamServerUrl: Joi.string().empty('').uri({ scheme: ['http', 'https'] }), - googleMapApiKey: Joi.string().empty('').token(), isActivityStreamEnabled: Joi.boolean().required(), isAnonymizationEnabled: Joi.boolean().required(), isInboxEnabled: Joi.boolean().required(), From 95838e4cfcefdc48afc23be1a22027e1ef79dabb Mon Sep 17 00:00:00 2001 From: Andreas Dzialocha Date: Sun, 17 Mar 2019 23:21:41 +0100 Subject: [PATCH 62/77] Make AWS S3 optional, fix image uploads --- .gitignore | 1 + README.md | 2 +- .../components/CuratedPlaceListItem.js | 8 ++- app/scripts/components/FormImageUploader.js | 36 ++++++++--- server/index.js | 18 ++++++ server/middlewares/upload.js | 13 ++-- server/models/image.js | 4 +- server/services/imageVersions.js | 28 ++++----- server/services/s3.js | 11 ++++ server/services/upload.js | 59 +++++++++++++++++++ 10 files changed, 148 insertions(+), 32 deletions(-) create mode 100644 server/services/upload.js diff --git a/.gitignore b/.gitignore index 9b5cecb2..6993ce87 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ node_modules # local .env static +uploads webpack-assets.json diff --git a/README.md b/README.md index 85ce4043..db87d82b 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Conversation.belongsToMany(Animal, { * Node and npm * PostgreSQL Database -* AWS S3 Cloud Storage * Mail-Server (SMTP) * PayPal Account for payment (optional) +* AWS S3 Cloud Storage (optional) * [gif-stream-server](https://github.com/adzialocha/gif-stream-server) (optional) ## Setup diff --git a/app/scripts/components/CuratedPlaceListItem.js b/app/scripts/components/CuratedPlaceListItem.js index 069550af..59033c80 100644 --- a/app/scripts/components/CuratedPlaceListItem.js +++ b/app/scripts/components/CuratedPlaceListItem.js @@ -5,7 +5,7 @@ import { AnimalLink } from './' import { asInfiniteListItem } from '../containers' import { translate } from '../../../common/services/i18n' -class PlaceListItem extends Component { +class CuratedPlaceListItem extends Component { static propTypes = { item: PropTypes.object.isRequired, } @@ -37,6 +37,7 @@ class PlaceListItem extends Component { } else if (mode === 'address') { return `@ ${street}, ${cityCode} ${city}` } + return translate('components.placeListItem.virtualLocation') } @@ -46,16 +47,19 @@ class PlaceListItem extends Component {
    { this.props.item.title }
    +
    +
    { this.renderAddress() }
    + { this.renderPrivacy() } ) } } -export default asInfiniteListItem(PlaceListItem) +export default asInfiniteListItem(CuratedPlaceListItem) diff --git a/app/scripts/components/FormImageUploader.js b/app/scripts/components/FormImageUploader.js index 0a49cadb..64d7dd46 100644 --- a/app/scripts/components/FormImageUploader.js +++ b/app/scripts/components/FormImageUploader.js @@ -1,23 +1,26 @@ import PropTypes from 'prop-types' import React, { Component } from 'react' +import { FormImageUploaderImage } from './' import { alert } from '../services/dialog' import { asFormField, withImageUpload } from '../containers' -import { FormImageUploaderImage } from './' import { translate } from '../../../common/services/i18n' function convertFileToBase64(file) { return new Promise(resolve => { const reader = new FileReader() + reader.onloadend = () => { resolve(reader.result) } + reader.readAsDataURL(file) }) } function convertFilesToBase64(files) { const promises = [] + for (let i = 0; i < files.length; i++) { promises.push( convertFileToBase64(files[i]) @@ -45,17 +48,12 @@ class FormImageUploader extends Component { maxImagesCount: undefined, } - componentWillMount() { - if (this.props.input.value) { - this.props.setUploadedImages(this.props.input.value) - } - } - componentDidUpdate(prevProps) { if (prevProps.uploadedImages.length !== this.props.uploadedImages.length) { const preparedImages = this.props.uploadedImages.map(image => { if (image.base64String) { return Object.assign({}, { + isNew: true, fileName: image.fileName, }) } @@ -65,6 +63,17 @@ class FormImageUploader extends Component { this.props.input.onChange(preparedImages) } + + if ( + this.props.input.value && + !this._isInitialSet + ) { + this._isInitialSet = true + + if (!this.props.input.value.find(item => item.isNew)) { + this.props.setUploadedImages(this.props.input.value) + } + } } componentWillUnmount() { @@ -79,7 +88,11 @@ class FormImageUploader extends Component { } const totalFilesCount = files.length + this.props.uploadedImages.length - if (this.props.maxImagesCount && totalFilesCount > this.props.maxImagesCount) { + + if ( + this.props.maxImagesCount && + totalFilesCount > this.props.maxImagesCount + ) { alert( translate('components.formImageUploader.maxImageReached', { count: this.props.maxImagesCount, @@ -121,6 +134,7 @@ class FormImageUploader extends Component { ) } + return null } @@ -176,6 +190,7 @@ class FormImageUploader extends Component { type="file" onChange={this.onFilesChange} /> + +
    { this.props.currentPageIndex }
    +